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.