Std :: Isalpha lanza bad_cast cuando se usa con Boost :: Locale
-
12-12-2019 - |
Pregunta
Tengo algunos problemas con el uso de Boost :: Locale (1.49) en Debian 7 GNU / Linux (la versión de GCC es 4.6.3-1).El código se guarda en CP1251.Usando funciones como "Isalpha" (o "Boost :: algoritmo :: is_alpha") termina con excepción (BAD_CAST).Parece que no hay faceta adecuada para este cheque.Aquí está el código:
#include <iostream>
#include <boost/locale.hpp>
int main ()
{
boost::locale::generator gen;
std::locale loc(gen.generate("ru_RU.cp1251"));
unsigned char debug501 = 'Б';
bool debug500 = std::isalpha(debug501, loc);
std::cout<< debug500;
return 0;
}
Se ejecuta sin excepción en Windows 7 con Visual Studio 2008. Sin embargo, todavía hay un problema: "Debug500" se establece en FALSO en este caso.Funciona bien solo cuando el local se genera así: std::locale loc(".1251")
.Pero aparece el mismo problema cuando el local se genera al impulso: std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));
.
Me agradecería si alguien pudiera explicar lo que está mal con el código y / o cómo puedo hacer un cheque similar (Isalpha) usando BOOST y STD con CP1251 Locale.
Solución
Reemplazar:
unsigned char debug501 = 'Б';
con:
char debug501 = 'Б';