std::isalpha lança bad_cast quando usando com o boost::localização
-
12-12-2019 - |
Pergunta
Eu tenho alguns problemas com usando o boost::localidade (1.49) no Debian 7 GNU/Linux (versão do GCC é 4.6.3-1).O código é salvo no cp1251.Usando funções como "isalpha" (ou "boost::algoritmo::is_alpha") acaba com exceção de (bad_cast).Parece que não há adequada faceta para esta verificação.Aqui está o 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;
}
Ele é executado com nenhuma exceção no Windows 7 com o Visual Studio 2008.No entanto, ainda há um problema:"debug500" é definida como false no presente caso.Ele funciona bem apenas quando localidade é gerado como este: std::locale loc(".1251")
.Mas o mesmo problema aparece quando a localidade é gerado por impulso: std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));
.Eu ficaria grato se alguém pudesse explicar o que há de errado com o código e/ou como eu posso fazer um teste semelhante (isalpha) com impulso e std com cp1251 localidade.
Solução
Substituir:
unsigned char debug501 = 'Б';
com:
char debug501 = 'Б';