This is also related to char32_t
and any intXX_t
. The specification points out that:
2.14.3.2
:
The value of a char16_t literal containing a single c-char is equal to its ISO 10646 code point value, provided that the code point is representable with a single 16-bit code unit.
5.3.3.1
:
[..] in particular [..] sizeof(char16_t), sizeof(char32_t), and sizeof(wchar_t) are implementation-defined
I can not see anything about the intXX_t
types, apart from the comment that they are "optional" (18.4.1
).
If a char16_t
isn`t guaranteed to be 2 bytes, is it guaranteed to be 16 bit (even on architectures where 1 byte != 8 bit)?
3.9.1 Fundamental types [basic.fundamental]
This means char16_t is at least 16 bits (but may be larger)
But I also believe:
provides the same guarantees (though less explicitly (as you have to know that ISO 10646 is UCS (Note UCS is compatible but not exactly the same as Unicode))).