According to the C++ standard (§30.7.5.2.4 of C++17 draft (N4659)), out << ch
will not perform a widening operation on ch
, if ch
is a char
and out
is a std::ostream
.
Does this imply that std::ctype<char>::widen()
(i.e., char
-> char
) is guaranteed by the standard to be an identity function (widen(ch) == ch
) for all characters in the basic source character set?
If so, does this, in turn, imply that all locales are required by the standard to use the same non-wide (or multi-byte) encoding of characters from the basic source character set?
If not, it seems like out << 'x'
, with a particular choice of character encoding for literals, might not work in all locales, even when it works in some. That is, there might be no choice of character literal encoding, such that out << 'x'
works in all locales simultaneously.