Using decodeFront with a generalised input range
Vinay Sajip
vinay_sajip at yahoo.co.uk
Fri Nov 9 09:47:32 UTC 2018
According to the std.utf documentation,
> decode will only work with strings and random access ranges of
> code units with length and slicing, whereas decodeFront will
> work with any input range of code units.
However, I can't seem to get such a usage to compile: the
following code
import std.range;
import std.utf;
void somefn(InputRange!(ubyte) r) {
r.decodeFront!(No.useReplacementDchar, dchar)();
}
gives a compilation error:
onlineapp.d(5): Error: template std.utf.decodeFront cannot deduce
function from argument types !(cast(Flag)false,
dchar)(InputRange!ubyte), candidates are:
/dlang/dmd/linux/bin64/../../src/phobos/std/utf.d(1176):
std.utf.decodeFront(Flag useReplacementDchar =
No.useReplacementDchar, S)(ref S str, out size_t numCodeUnits) if
(!isSomeString!S && isInputRange!S && isSomeChar!(ElementType!S))
/dlang/dmd/linux/bin64/../../src/phobos/std/utf.d(1214):
std.utf.decodeFront(Flag useReplacementDchar =
No.useReplacementDchar, S)(ref S str, out size_t numCodeUnits) if
(isSomeString!S)
/dlang/dmd/linux/bin64/../../src/phobos/std/utf.d(1243):
std.utf.decodeFront(Flag useReplacementDchar =
No.useReplacementDchar, S)(ref S str) if (isInputRange!S &&
isSomeChar!(ElementType!S))
I'm not sure what's wrong here. Also, the information in the
error message seems to indicate that decodeFront isn't expecting
to work on a generic InputRange interface, but rather a subset
which comes from an actual string. Have I read that wrong? I get
the same error with leaving out the useReplacementDchar flag,
i.e. `r.decodeFront!(dchar)()`
More information about the Digitalmars-d-learn
mailing list