Why is int implicitly convertible to ulong?
Ali Çehreli
acehreli at yahoo.com
Fri Feb 21 09:01:33 PST 2014
On 02/21/2014 04:41 AM, Hannes Steffenhagen wrote:
> The specific problem here was when working with std.json.
>
> std.json distinguishes between UINTEGER and INTEGER, so I had code like
>
> static if(is(T : ulong)) {
> // must be UINTEGER
> } else static if(is(T : long)) {
> // can be either INTEGER or UINTEGER
> }
>
>
> I've since found out about isSigned and isUnsigned, still it was mighty
> confusing for me that the first case was selected for signed types.
I have something like the following in an experimental std.json code
that converts to JSONValue.
Since std.json uses long for the value, I attempt to detect data loss
when the value is a large ulong:
JSONValue to(Target : JSONValue, T)(T value)
{
/* ... */
} else static if (is (T : long)) {
static if (is (T == ulong)) {
enforce(value <= long.max,
format("Data loss: %s %s cannot fit a long.",
T.stringof, value));
}
json.type = JSON_TYPE.INTEGER;
json.integer = value;
} else static if (is (T : real)) {
Ali
More information about the Digitalmars-d
mailing list