On Friday, 23 October 2015 at 01:31:47 UTC, tsbockman wrote:
dchar c = cast(dchar) uint.max;
if(c > 0x10FFFF)
    writeln("invalid");
else
    writeln("OK");

With constant folding for integer comparisons, the above will print "OK" rather than "invalid", as it should. The predicate (c > 0x10FFFF) is simply *assumed* to be false, because the current starting range.imax for a dchar expression is dchar.max.

That doesn't sound right. In fact, this puts into question why dchar.max is at the value it is now. It might be the current maximum at the current version of Unicode, but this seems like a completely pointless restriction that breaks forward-compatibility with future Unicode versions, meaning that D programs compiled today may be unable to work with Unicode text in the future because of a pointless artificial limitation.

Reply via email to