On Fri, Oct 18, 2013 at 12:05 PM, Stephan T. Lavavej <stl@exchange.microsoft.com> 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