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