我偶尔会从boost :: lower获得奇怪的行为,当调用std :: wstring时。特别是,我已经看到了以下断言在发布版本失败(但不在调试版本):什么导致boost :: lower会失败is_singular断言?
Assertion failed: !is_singular(), file C:\boost_1_40_0\boost/range/iterator_range.hpp, line 281
我还看到了什么叫出现的boost :: to_lower在上下文之后是内存错误如:
void test(const wchar_t* word) {
std::wstring buf(word);
boost::to_lower(buf);
...
}
更换boost::tolower(wstr)
与std::transform(wstr.begin(), wstr.end(), wstr.begin(), towlower)
出现来解决这个问题的呼叫;但我想知道发生了什么问题。
我最好的猜测是,也许这个问题与更改Unicode字符的情况有关 - 也许编码大小的downcased字符是不同于源字符的编码大小?
有没有人有任何想法可能会发生在这里?如果我知道“is_singular()”在提升的背景下意味着什么,可能会有所帮助,但是在执行一些谷歌搜索之后,我无法找到任何文档。
相关软件版本:Boost 1.40.0; MS Visual Studio 2008.