This seems very inconsistent, does a += b not lower to a = a + b? I guess not based on the below:
ushort a = ushort.max, b = ushort.max; a += b; // Compiles finea = a + b; // Error: cannot implicitly convert expression (cast(int)a + cast(int)b) of type int to ushort