View source code
Display the source code in std/range/package.d from which this page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using local clone.

Enum member std.range.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, chainPath or any other input range of characters.

enum isSomeFiniteCharInputRange(R) = isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R);

Only finite length character ranges are allowed with this constraint.

This template is equivalent to:

isInputRange!R && !isInfinite!R && isSomeChar!(ElementEncodingType!R)

See Also

isInputRange, isInfinite, isSomeChar, ElementEncodingType


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


Andrei Alexandrescu, David Simcha, Jonathan M Davis, and Jack Stouffer. Credit for some of the ideas in building this module goes to Leonardo Maffi.


Boost License 1.0.