GCC admite -fshort-wchar que cambia wchar_t de 4 a dos bytes.¿Qué tan grande es wchar_t con GCC?
¿Cuál es la mejor forma de detectar el tamaño de wchar_t en tiempo de compilación, por lo que puedo asignarlo correctamente al tipo apropiado utf-16 o utf-32? Al menos, hasta que se libere C++ 0x y nos proporcione utf16_t y utf_32_t typedefs estables.
#if ?what_goes_here?
typedef wchar_t Utf32;
typedef unsigned short Utf16;
#else
typedef wchar_t Utf16;
typedef unsigned int Utf32;
#endif
No haga esto. wchar_t no tiene nada que ver con unicode. Es un tipo distinto que puede contener todos los miembros del conjunto de caracteres ampliado más grande de todas las configuraciones regionales compatibles. Si su plataforma solo admite ASCII, sizeof (wchar_t) puede ser 1. Esto también significa que, por ejemplo, que L'mötley crüe 'no es * necesariamente una cadena unicode, podría ser una cadena Latin-1 almacenada con wchar_t. –
Ese es el comentario más universalmente inútil de la historia. Sobre la base de ese consejo, nunca deberíamos intentar tratar con una cadena codificada Utf hasta que C++ 0x sea lanzado universalmente. Mientras tanto, necesito un conjunto de typedefs, para las plataformas que soporto, que se correlacionan con los tipos distintivos más apropiados que pueden contener los datos requeridos. –