¿Qué proporciona “ y dónde está documentado?

El nuevo estándar C ++ 11 menciona un encabezado , presumiblemente en analogía a C99 .

Ahora, sabemos que C ++ 11 trae nuevos tipos de caracteres y literales que están específicamente diseñados para UTF16 y UTF32, pero no creo que el lenguaje en realidad contenga funciones para convertir la encoding de multibyte estrecha (dependiente del sistema) a una de las codificaciones Unicode. Sin embargo, me encontré con la sinopsis del encabezado de que menciona las funciones mbrtoc16 / c16rtombr y mbrtoc32 / c32rtombr que parecen hacer precisamente eso.

Lamentablemente, el estándar no dice nada sobre esas funciones más allá de la sinopsis del encabezado. ¿Dónde están definidas esas funciones, qué hacen realmente y dónde puedo leer más sobre ellas? ¿Esto significa que ahora se puede usar Unicode adecuado completamente con C ++ estándar, sin la necesidad de bibliotecas adicionales?

Estos se describieron en un documento del WG21 de 2005, pero la descripción no está presente en el estándar final. Están documentados en ISO / IEC 19769: 2004 ( Extensiones para el lenguaje de progtwigción C para admitir nuevos tipos de datos de caracteres ) ( borrador ), a los que se refiere el estándar C ++ 11.

El texto es demasiado largo para publicarlo aquí, pero estas son las firmas:

 size_t mbrtoc16(char16_t * pc16, const char * s, size_t n, mbstate_t * ps); size_t c16rtomb(char * s, char16_t c16, mbstate _t * ps); size_t mbrtoc32(char32_t * pc32, const char * s, size_t n, mbstate_t * ps); size_t c32rtomb(char * s, char32_t c32, mbstate_t * ps); 

Las funciones se convierten entre caracteres multibyte y caracteres UTF-16 o UTF-32, respectivamente, similar a mbrtowc . No hay versiones no reentrantes, y honestamente, ¿quién las necesita?

Probablemente la mejor documentación de la que tengo conocimiento esté en n1326 , la propuesta de agregar TR19769 a la biblioteca estándar de C [Editar: aunque lo mire, el N1010 que R. Martinho Fernandes citó parece tener prácticamente lo mismo].