Annoyance with new integer promotion deprecations

Dmitry Olshansky dmitry.olsh at gmail.com
Sun Feb 18 13:36:28 UTC 2018


On Sunday, 18 February 2018 at 01:09:57 UTC, Manu wrote:
> On 5 February 2018 at 11:22, H. S. Teoh via Digitalmars-d < 
> digitalmars-d at puremagic.com> wrote:
>
>> Code:
>>
>>         struct S {
>>                 byte[2] x;
>>         }
>>         void main() {
>>                 S s, t;
>>                 s.x = [ 1, -1 ];                // OK
>>                 t.x = [ -s.x[0], -s.x[1] ];     // NG (line 7)
>>         }
>>
>>
>> Compiler says:
>>         /tmp/test.d(7): Deprecation: integral promotion not 
>> done for
>> `-s.x[0]`, use '-transition=intpromote' switch or 
>> `-cast(int)(s.x[0])`
>>         /tmp/test.d(7): Deprecation: integral promotion not 
>> done for
>> `-s.x[1]`, use '-transition=intpromote' switch or 
>> `-cast(int)(s.x[1])`
>>
>>
>> Why should I need to explicitly cast to int only to reassign 
>> it back to byte?!  This is ridiculous.
>
>
> Seriously, WTF is going on here?

C compilers did it for ages, but D doesn’t auto promote to int on 
unary ops. Hence the warning, the suggestion is kinda stupid 
thiugh.

C gets away by truncating results silently on assign of int to 
byte.




More information about the Digitalmars-d mailing list