New integer promotion rules

rumbu rumbu at rumbu.ro
Thu Jan 18 18:12:46 UTC 2018


On Thursday, 18 January 2018 at 18:00:51 UTC, rumbu wrote:
> On Thursday, 18 January 2018 at 17:54:59 UTC, rumbu wrote:
>> On Thursday, 18 January 2018 at 12:51:48 UTC, Dominikus Dittes
>
>>>
>>> target = isNegative ? cast(Unsigned!T)(-c) : 
>>> cast(Unsigned!T)c;
>>>
>>> That would have been better even before the change, because 
>>> the operator '-' used on unsigned types is likely to produce 
>>> unexpected results, if the behaviour is defined at all.
>>
>> I don't think so:
>>
>> ulong c = 128;
>> bool isNegative = true;
>> byte target = isNegative ? -cast(ubyte)c : cast(ubyte)c;
>>
>> Error Deprecation: integral promotion not done for 
>> `-cast(ubyte)c`, use '-transition=intpromote' switch or 
>> `-cast(int)(cast(ubyte)c)`		
>
> My bad, it works. Thanks:
>
> ulong c = 128;
> bool isNegative = true;
> byte target = isNegative ? cast(ubyte)-c : cast(ubyte)c;

But this doesn't:

ushort c = 128;
bool isNegative = true;
byte target = isNegative ? cast(ubyte)-c : cast(ubyte)c;

Error Deprecation: integral promotion not done for `-c`, use 
'-transition=intpromote' switch or `-cast(int)(c)

This is starting to become truly crazy.




More information about the Digitalmars-d-learn mailing list