std :: isalpha бросает bad_cast при использовании с усилением :: locale

StackOverflow https://stackoverflow.com//questions/10687907

Вопрос

У меня есть некоторые проблемы с использованием 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 = 'Б';
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top