From: John Maddock (john_at_[hidden])
Date: 2006-09-24 12:26:58
"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));
> 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.
> 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
220.127.116.11 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
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!!!