我偶爾會從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.