Здесь есть две проблемы. Во-первых, какие символы допускаются в коде C++ (и комментариях), например имена переменных. Во-вторых, какие символы допускаются в строках и строковых литералах.
Как отмечено, компиляторы C++ должны поддерживать очень ограниченный набор символов на ASCII для символов, разрешенных в коде и комментариях. На практике этот набор символов не очень хорошо работал с некоторыми европейскими наборами символов (и особенно с некоторыми европейскими клавиатурами, в которых не было нескольких символов - например, квадратными скобками - доступно), поэтому концепция орграфов и триграфов была представил. Многие компиляторы принимают на данный момент больше, чем этот набор символов, но никаких гарантий нет.
Что касается строк и строковых литералов, C++ имеет понятие широкого символа и широкой строки символов. Однако кодировка для этого набора символов не определена. На практике это почти всегда Unicode, но я не думаю, что здесь есть какая-то гарантия. Широкие символьные строковые литералы выглядят как L "строковый литерал", и их можно присвоить std :: wstring.
C++ 11 добавлена явная поддержка для строк Unicode и строковых литералов, закодированный в формате UTF-8, UTF-16 с обратным порядком байтов, UTF-16 с обратным порядком байтов мало, UTF-32 большой Endian и UTF-32 с обратным порядком байтов мало ,
* RE: «что бы это ни называлось»: * [Из Википедии] (https://en.wikipedia.org/wiki/Plane_%28Unicode%29#Basic_Multilingual_Plane): Первая плоскость, ** плоскость 0 **, ** Basic Multilingual Plane (BMP) ** содержит символы почти для всех современных языков и большое количество символов. Основной целью BMP является поддержка унификации предыдущих наборов символов, а также символов для записи. Большинство назначенных кодовых точек в BMP используются для кодирования ** китайских **, ** японских ** и ** корейских (CJK) ** символов. – DavidRR 2015-04-22 14:41:50