¿El estándar C ++ exige una codificación para wchar_t?
Aquí hay algunos extractos de mi copia del borrador del estándar N4140 de 2014
22.5 Facetas de conversión de código estándar [locale.stdcvt]
3 Para cada una de las tres facetas de conversión de códigocodecvt_utf8
, codecvt_utf16
ycodecvt_utf8_utf16
:
(3.1) -Elem
es el tipo de caracteres anchos, comowchar_t
, char16_t
ochar32_t
.
4 Para la facetacodecvt_utf8
:
(4.1) - La faceta se convertirá entre secuencias multibyte UTF-8 y UCS2 o UCS4 (dependiendo del tamaño deElem
) dentro del programa.
Una interpretación de estos dos párrafos es quewchar_t
debe estar codificado como UCS2 o UCS4. No me gusta mucho porque si es cierto, tenemos una propiedad importante del lenguaje enterrado en lo profundo de una descripción de la biblioteca. He tratado de encontrar una declaración más directa de esta propiedad, pero fue en vano.
Otra interpretación quewchar_t
no se requiere que la codificación sea UCS2 o UCS4, y en implementaciones donde no lo es,codecvt_utf8
no funcionará parawchar_t
. Tampoco me gusta mucho esta interpretación, porque si es verdad, y tampocochar
niwchar_t
Las codificaciones nativas son Unicode, no parece haber una forma de convertir de forma portátil entre esas codificaciones nativas y Unicode.
¿Cuál de las dos interpretaciones es verdadera? ¿Hay otro que pasé por alto?
Aclaración No estoy preguntando sobre opiniones generales sobre la idoneidad dewchar_t
para desarrollo de software o propiedades dewchar_t
uno puede derivar de otro lado. estoy interesadoen estos dos párrafos específicos de la norma. Estoy tratando de entender queestos párrafos específicos implican o no implican.
Aclaracion 2. Si 4.1 dice "La faceta se convertirá entre secuencias multibyte UTF-8 y UCS2 o UCS4o cualquier codificación impuesta en wchar_t por la localización global actual"no habría ningún problema. No lo hace. Dice lo que dice. Parece que si uno usastd::codecvt_utf8<wchar_t>
, uno termina con un montón dewchar_t
codificado como UCS2 o UCS4, independientemente de la configuración regional global actual. (No hay forma de especificar una configuración regional o una faceta de conversión de caracteres paracodecvt_utf8
) Por lo tanto, la pregunta se puede reformular así: ¿el resultado de la conversión se puede usar directamente con la configuración regional global actual (y / o con cualquier configuración regional posible) para la salida,wctype
consultas y así sucesivamente? Si no, qué es utilizablepara? (Si la segunda interpretación anterior es correcta, la respuesta parecería ser "nada").