Согласно стандарту C ++ 14,
§2.2.1.1 […] Допустимый набор физических символов исходного файла:
реализации. […] Любой символ исходного файла, отсутствующий в
основной исходный набор символов заменяется универсальным именем
это обозначает этот характер. […]
Означает ли это, что стандарт C ++ не дает определенной или условно поддерживаемой поддержки символов, отличных от UCS / Unicode? Например, физическая исходная кодировка файла, включающая символы без соответствующей кодовой точки UCS.
Единственное, о чем я могу думать, это то, что если бы это было так (компилятор поддерживает символы не-UCS посредством кодировок не-UCS), компилятору пришлось бы использовать частные диапазоны UCS для отображения этих физических символов, но в любом случае это решение не подходит к «универсальное имя персонажа, которое обозначает этот персонаж» отчасти потому, что кодовые точки UCS внутри закрытых диапазонов вообще не определяют какой-либо конкретный символ.
На самом деле, нет.. Вид. Важная часть цитаты IMO [lex.phases] заключается в следующем:
[…] Физические символы исходного файла сопоставляются с основным источником
набор символов
Поддерживается только базовый исходный набор символов, все остальное должно как-то отображаться на него ([lex.charset]):
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9
_ { } [ ] # ( ) < > % : ; . ? * + - / ^ & | ~ ! = , \ " ’
Но стандарт также говорит, что это должно сделать это если необходимо. Далее говорится следующее:
Набор физических
Допустимые символы исходного файла определяются реализацией.
Так что я полагаю, что это позволяет компилятору делать все, что он хочет, в конце концов, пока он по крайней мере поддерживает базовый набор символов.
Других решений пока нет …