std :: isalpha бросает bad_cast при использовании с усилением :: locale
-
12-12-2019 - |
Вопрос
У меня есть некоторые проблемы с использованием Boost :: Locale (1.49) на Debian 7 GNU / Linux (версия GCC - 4.6.3-1).Код сохранен в CP1251.Использование функций, таких как «ISALPHA» (или «BOOST :: ALGORITHM :: IS_ALPHA») заканчивается исключением (Bad_cast).Похоже, что для этого чека нет подходящего фасада.Вот код:
#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;
}
.
Он не работает без исключения на Windows 7 с Visual Studio 2008. Однако есть еще одна проблема: «Debug500» установлен на false в этом случае.Работает нормально, только когда локаль генерируется так: std::locale loc(".1251")
.Но та же проблема появляется, когда локаль генерируется повышением: std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));
.
Я был бы благодарным, если кто-то может объяснить, что не так с кодом и / или как я могу сделать аналогичную проверку (ISALPHA), используя Boost и STD с помощью локали CP1251.
Решение
Заменить:
unsigned char debug501 = 'Б';
.
с:
char debug501 = 'Б';
.