С моим компилятором c - 54464 (урезано 16 бит), а d - 10176.
Но с gcc, c - 120000, а d - 600000.
Каково истинное поведение? Является ли поведение undefined? Или мой компилятор false?
unsigned short a = 60000;
unsigned short b = 60000;
unsigned long c = a + b;
unsigned long d = a * 10;
Есть ли возможность предупредить об этих случаях?
Wconversion предупреждает:
void foo(unsigned long a);
foo(a+b);
но не предупреждает:
unsigned long c = a + b