Why does this template not have the desired result?
Adam D. Ruppe
destructionator at gmail.com
Fri Jul 19 13:42:54 PDT 2013
On Friday, 19 July 2013 at 20:26:36 UTC, Gary Willoughby wrote:
> Why does this template not have the desired result? I honestly
> though it would return true.
It is because size_t is an unsigned type. Comparisons between
signed and unsigned numbers can be surprising because if either
of the items being compared are unsigned, the whole comparison is
unsigned.
Negative signed numbers, when interpreted as unsigned, become
very large numbers because the bits are flipped when you go
negative. cast(ubyte) -1 == 255, and of course, 255 <= 10 is
false.
The way I'd do the inBounds is to just use T size instead of
size_t size.
template inBounds(T, T size) { snip same stuff }
then
writefln("%s", inBounds!(int, 10).result); // true as
expected
More information about the Digitalmars-d-learn
mailing list