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
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: