Boost logo

Boost :

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));
>
> http://engineering.meta-comm.com/boost-regression/CVS-RC_1_34_0/developer/integer.html
>
> 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.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk