C++ Logo

SG12

Advanced search

Subject: Re: [ub] [c++std-ext-14555] Sized integer types and char bits
From: Matt Austern (austern_at_[hidden])
Date: 2013-10-18 14:54:38


On Fri, Oct 18, 2013 at 12:05 PM, Stephan T. Lavavej <
stl_at_[hidden]> wrote:

> [Gabriel Dos Reis, c++std-ext-14555]
> > My understanding of 'optional' is that the types are conditionally
> > supported, and a macro in <stdint.h> indicates whether the corresponding
> > type is supported.
>
> They are a special form of conditionally supported. C99 7.18.1.1
> "Exact-width integer types" /3: "These types are optional. However, if an
> implementation provides integer types with widths of 8, 16, 32, or 64 bits,
> no padding bits, and (for the signed types) that have a two's complement
> representation, it shall define the corresponding typedef names."
>
> I would like to see CHAR_BIT == 8 and two's complement required. I do not
> want to see specific type requirements for intN_t (in fact, char is
> impossible because it can be either signedish or unsignedish).

And as far as I can tell, int8_t is forbidden to be char even on a system
where char can represent negative numbers. The standard says that int8_t
must be a "signed integer type". Even though char is an integer type that
is signed on some implementations, my reading of the standard is that it is
not a signed integer type. That term refers to a specific list of types and
char does not appear on that list.

                                          --Matt



SG12 list run by herb.sutter at gmail.com