On 02/16/2014 01:35 PM, Hannes Steffenhagen wrote:
isImplicitlyConvertible!(int,ulong) is true. Maybe this is just me, but
I get the impression that this is quite nuts. Why is an implicit
conversion from a signed to an unsigned type possible? The other way
round would be at least somewhat understandable if there's a static
check that the values actually fit.
I don't know all of the reasons but it is at least about convenience. It
is possible to write expressions like 'u + diff' without explicit casts:
ulong u = 10;
int diff = -3;
auto a = u + diff;
static assert(is (typeof(a) == ulong));
Related, the type of 'a' above is implied as ulong due to arithmetic
conversions, which are sometimes very confusing as well. See "Usual
Arithmetic Conversions" here:
http://dlang.org/type.html
Ali