Interesting info, I've never seen this behavior in C since the conversion is implicit as [2] notes. A simple cast resolves the problem in D: module main; int main(string[] argv){ short asd = 1; short qwe = cast(short)(asd + asd); return 0; } Thanks for your answer :)