В соответствии со стандартом С++ (§30.7.5.2.4 проекта С++ 17 draft (N4659)) out << ch
не будет выполнять расширяющуюся операцию на ch
, если ch
является char
и out
- это std::ostream
.
Означает ли это, что std::ctype<char>::widen()
(т.е. char
→ char
) гарантируется стандартом как тождественная функция (widen(ch) == ch
) для всех символов в наборе основных исходных символов?
Если это так, означает ли это, в свою очередь, что все локали требуются стандартом для использования одного и того же неширокого (или многобайтового) кодирования символов из базового набора символов источника?
Если нет, кажется, что out << 'x'
, с определенным выбором кодировки символов для литералов, может не работать во всех локалях, даже если он работает в некоторых. То есть, не может быть выбора символьного кодирования букв, так что out << 'x'
работает во всех локалях одновременно.