【发布时间】:2011-05-29 02:18:01
【问题描述】:
当在 std::wstring 上调用时,我偶尔会从 boost::lower 得到奇怪的行为。特别是,我在发布版本中看到以下断言失败(但在调试版本中不是):
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 字符的大小写有关——也许小写字符的编码大小与源字符的编码大小不同?
有没有人知道这里可能发生了什么?如果我知道“is_singular()”在 boost 上下文中的含义可能会有所帮助,但是在进行了几次谷歌搜索后,我无法找到任何文档。
相关软件版本:Boost 1.40.0; MS Visual Studio 2008。
【问题讨论】: