Debian 7 GNU/Linuxでboost::locale(1.49)を使用する際に問題が発生しました(GCCのバージョンは4.6.3-1です)。コードはcp1251に保存されます。「isalpha」(または「boost :: alarmithm :: 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 Studio2008を搭載したWindows7でも例外なく実行されます。ただし、問題が1つあります。この場合、「debug500」がfalseに設定されています。ロケールが次のように生成された場合にのみ正常に機能しますstd::locale loc(".1251")
。ただし、ブーストによってロケールが生成される場合にも同じ問題が発生しますstd::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));
。誰かがコードの何が問題なのか、および/またはcp1251ロケールでboostとstdを使用して同様のチェック(isalpha)を行う方法を説明できれば幸いです。