isSomeFiniteCharInputRange

This simplifies a commonly used idiom in phobos for accepting any kind of string parameter. The type R can for example be a simple string, chained string using std.range.chain, std.path.chainPath or any other input range of characters.

Only finite length character ranges are allowed with this constraint.

This template is equivalent to:

isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R)
template isSomeFiniteCharInputRange (
R
) {
enum isSomeFiniteCharInputRange;
}

Examples

import std.path : chainPath;
import std.range : chain;

void someLibraryMethod(R)(R argument)
if (isSomeFiniteCharInputRange!R)
{
    // implementation detail, would iterate over each character of argument
}

someLibraryMethod("simple strings work");
someLibraryMethod(chain("chained", " ", "strings", " ", "work"));
someLibraryMethod(chainPath("chained", "paths", "work"));
// you can also use custom structs implementing a char range

See Also

Meta