Hay dos cuestiones en juego aquí. El primero es qué caracteres están permitidos en el código C++ (y comentarios), como nombres de variables. El segundo es qué caracteres se permiten en cadenas y literales de cadena.
Como se indicó, los compiladores de C++ deben contener un conjunto de caracteres ASCII muy restringido para los caracteres permitidos en el código y los comentarios. En la práctica, este juego de caracteres no funcionó muy bien con algunos juegos de caracteres europeos (y especialmente con algunos teclados europeos que no tenían algunos caracteres, como corchetes, disponibles), por lo que el concepto de dígrafos y trigrafos era introducido. Muchos compiladores aceptan más que este conjunto de caracteres en este momento, pero no hay ninguna garantía.
En cuanto a cadenas y literales de cadenas, C++ tiene el concepto de un carácter ancho y una cadena de caracteres anchos. Sin embargo, la codificación para ese juego de caracteres no está definida. En la práctica, casi siempre es Unicode, pero no creo que haya ninguna garantía aquí. Los literales de cadena de caracteres anchos parecen L "literal de cadena", y estos se pueden asignar a std :: wstring.
C++ 11 Añadido soporte explícito para cadenas Unicode y literales de cadena, codificado como UTF-8, UTF-16 big endian, UTF-16 poco endian, UTF-32 big endian y UTF-32 Little Endian .
* RE: "como se llame": * [De Wikipedia] (https://en.wikipedia.org/wiki/Plane_%28Unicode%29#Basic_Multilingual_Plane): El primer avión, ** plano 0 **, ** Plano básico multilingüe (BMP) ** contiene caracteres para casi todos los idiomas modernos y una gran cantidad de símbolos. Un objetivo principal para el BMP es apoyar la unificación de conjuntos de caracteres anteriores, así como los caracteres para la escritura. La mayoría de los puntos de código asignados en el BMP se utilizan para codificar caracteres ** chinos **, ** japoneses ** y ** coreanos (CJK) **. – DavidRR