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 < [email protected]> 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.


Reply via email to