std::isalpha выдает bad_cast при использовании с boost::locale

У меня есть некоторые проблемы с использованием boost::locale (1.49) в Debian 7 GNU/Linux (версия GCC 4.6.3-1). Код сохраняется в cp1251. Использование таких функций, как "isalpha" (или "boost::gorith::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"), Но та же проблема возникает, когда локаль генерируется boost: std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));, Я был бы благодарен, если бы кто-то мог объяснить, что не так с кодом и / или как я могу сделать аналогичную проверку (isalpha), используя boost и std с языковым стандартом cp1251.

1 ответ

Решение

Заменить:

unsigned char debug501 = 'Б';

с:

char debug501 = 'Б';
Другие вопросы по тегам