
"John Maddock" <john@johnmaddock.co.uk> writes: | Strangely this is one case where C99 appears to be quite specific, section | 7.18.4.1 p2 says: | | "The macro INTN_C(value) shall expand to a signed integer constant with the | specified value and type int_leastN_t. The macro UINTN_C(value) shall expand | to an unsigned integer constant with the specified value and type | uint_leastN_t." | | Except, I note that the discusssion you site rejects this argument :-( Yes, this is the wording in the ChangeLog for the change in glibc: * sysdeps/generic/stdint.h (UINT8_C, UINT16_C): Don't append 'U', since C99 requires the result to promote to 'int' when uint_least8_t and uint_least16_t promote to 'int'. | Then there's TR1, which is rather under-specified in this area, so double | :-( | | To be honest I'm not sure what we should do here: in C++ we really do want | these types to be unsigned!!! Is this something that could be run through comp.lang.c++.moderated? Or is it so that you cannot expect to get a specific type out of UINT8_C? (meaning that the test really is wrong, and that it is doing something that is not guaranteed.) -- Lgb