STD :: ISALPHA getta Bad_cast quando si utilizza con boost :: Locale
-
12-12-2019 - |
Domanda
Ho alcuni problemi con l'utilizzo di Boost :: Locale (1.49) su Debian 7 GNU / Linux (versione di GCC è 4.6.3-1).Il codice viene salvato in CP1251.Usando funzioni come "isalpha" (o "boost :: algoritmo :: is_alpha") finisce con eccezione (Bad_cast).Sembra che non ci sia faccetta adeguata per questo assegno.Ecco il codice:
#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;
}
.
Funziona senza eccezione su Windows 7 con Visual Studio 2008. Tuttavia, c'è ancora un problema: "Debug500" è impostato su FALSE in questo caso.Funziona bene solo quando è generato la locale come questa: std::locale loc(".1251")
.Ma lo stesso problema viene visualizzato quando la locale è generata da Boost: std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));
.
Sarei grato se qualcuno potesse spiegare cosa c'è che non va nel codice e / o come posso fare un controllo simile (ISALPHA) utilizzando Boost e STD con CP1251 Locale.
Soluzione
Sostituisci:
unsigned char debug501 = 'Б';
.
Con:
char debug501 = 'Б';
.