以下微不足道的Boost语言环境库使用会产生运行时错误:
#include <boost/locale.hpp>
int main(int argc, const char * argv[]) {
boost::locale::generator gen;
std::locale loc = gen("");
std::locale::global(loc);
std::wstring a=L"Façade", b=L"facade";
bool eq = std::use_facet<boost::locale::collator<wchar_t>>(loc).compare(
boost::locale::collator_base::secondary,
a, b
) == 0;
if (eq) std::cout << "OK" << std::endl;
return 0;
}
调试器在collator.hpp中捕获错误:
int compare(level_type level,string_type const &l,string_type const &r) const
{
---> return do_compare(level,l.data(),l.data()+l.size(),r.data(),r.data()+r.size());
}
错误是&#34;线程1:EXC_BAD_ACCESS(代码= 1,地址= 0x0)&#34;
我正在使用Xcode 8.0(8A218a)和boost-1.61.0_1运行macOS Sierra版本10.12的2013年末iMac。希望我可能只是没有用Boost安装ICU,我只是跑了这个:
brew install boost --with-icu4c --cxx11
此示例基于Boost自己的文档:
http://www.boost.org/doc/libs/1_49_0/libs/locale/doc/html/index.html
思考?谢谢。
----编辑-----
我尝试转出有关默认语言环境的信息:
std::cout << std::use_facet<boost::locale::info>(loc).name() << std::endl;
它只包含&#34; C&#34;其他属性不是我的预期。因此我在我的设置中明确了:
boost::locale::generator gen;
std::locale loc = gen("en_US.UTF-8");
std::locale::global(loc);
std::cout << std::use_facet<boost::locale::info>(loc).name() << std::endl;
std::cout << std::use_facet<boost::locale::info>(loc).language() << std::endl;
std::cout << std::use_facet<boost::locale::info>(loc).country() << std::endl;
std::cout << std::use_facet<boost::locale::info>(loc).variant() << std::endl;
std::cout << std::use_facet<boost::locale::info>(loc).encoding() << std::endl;
std::cout << std::use_facet<boost::locale::info>(loc).utf8() << std::endl;
哪个输出:
en_US.UTF-8
en
US
utf-8
1
可悲的是,这没有用。另外,我注意到以下代码没有按预期工作:
const std::string g = "grüßEN";
std::cout << boost::locale::normalize(g, boost::locale::norm_nfc) << std::endl;
std::cout << boost::locale::normalize(g, boost::locale::norm_nfd) << std::endl;
std::cout << boost::locale::normalize(g, boost::locale::norm_nfkc) << std::endl;
std::cout << boost::locale::normalize(g, boost::locale::norm_nfkd) << std::endl;
输出所有相同的字符串:
grüßEN
grüßEN
grüßEN
grüßEN
这似乎暗示我安装Boost或ICU会有些麻烦。