Hum, wrong description on my side. I'd say:

1.If `startIds >= s.length || s[startIdx .. $].indexOf(c, cs) == -1`, then `s.indexOf(c, startIdx, cs) == -1`;
2.Otherwise, `s.indexOf(c, startIdx, cs)` == `startIdx + s[startIdx .. $].indexOf(c, cs)`.

It this better? I'm insisting on the nothrow behavior because I recall many instances in my code where a search with an invalid index was a valid case expected to yield "not found".