https://issues.dlang.org/show_bug.cgi?id=15285
--- Comment #4 from greenify <[email protected]> --- Hey I had a look at what types does functions allow: abbrev string[] capitalize isSomeString isNumeric isSomeString inPattern isSomeString munch isSomeString representation Char[] (char[],wchar[],dchar[]) squeeze anything - no constrains??? succ isSomeString translate immutable char[] outdent isSomeString wrap isSomeString I guess the biggest win is, if we first focus on those isSomeString functions. So you mean we could add to isSomeString a RangeString? ``` template isRangeString(R) { enum bool isRangeString = is(typeof( (inout int = 0) { static assert(isInputRange!R); static assert(hasLength!R); // all the algorithms allocate a new immutable string static asssert(isSomeChar!(isElementType!R)); } } ``` The only problem then would be that currently those algorithms use an index-based for-loop ``` for (size_t i = j; i < iLen; i++) { immutable c = s[i]; ``` can we just replace that with ``` foreach (i,immutable c;s) ``` so in summary - my questions: 1) can we replace for --> foreach or do we have to use `static if`? 2) we still will return a newly allocated immutable string. Should we return something different for ranges? --
