
"Lars Gullik Bjønnes" wrote:
I have a test failing on gcc 4.1.1 with glibc 2.4.
This test from cstdint_test.cpp fails:
integral_constant_type_check(boost::uint8_t(0), UINT8_C(0));
http://engineering.meta-comm.com/boost-regression/CVS-RC_1_34_0/developer/in...
At least some discussions I found seems to say that UINT8_C cannot be used to deduce types because of some integer promotion issues and that UINT8_C should return int.
The UINT8_C macro has been changed from returning c ## u, to returning just c, between version 2.3.5 and 2.4 of glibc.
http://comments.gmane.org/gmane.os.cygwin.patches/3101
Is the test wrong or is the C standard library in error?
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 :-( 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!!! John.