使用boost :: locale时,std :: isalpha会抛出bad_cast

时间:2012-05-21 15:12:01

标签: c++ boost locale boost-locale

我在Debian 7 GNU / Linux上使用boost :: locale(1.49)时遇到了一些麻烦(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;
}

在使用Visual Studio 2008的Windows 7上运行时没有例外。但是,仍有一个问题:在这种情况下,“debug500”设置为false。只有在生成区域设置时才能正常工作:std::locale loc(".1251")。但是当boost:std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));生成语言环境时,会出现同样的问题。 如果有人能解释代码的错误和/或我如何使用boost和std与cp1251语言环境进行类似的检查(isalpha),我将感激不尽。

1 个答案:

答案 0 :(得分:0)

替换:

unsigned char debug501 = 'Б';

使用:

char debug501 = 'Б';