It would incur a major compiler overhead. In order to efficiently generate code, the compiler needs to have available a scalar type which encompasses the entire range of possible values for all scalar types. If you wanted to accommodate both signed and unsigned 32-bit values, that range would be -2147483548..4294967295, and that range can't be contained in 32 bits.