Иногда я получаю странное поведение от boost :: lower, когда вызывается на std :: wstring.В частности, я видел следующее утверждение сбоя в сборке выпуска (но не в сборке отладки):
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)
, кажется, решает проблему;но я хотел бы знать, что происходит не так.
Мое предположение заключается в том, что, возможно, проблема связана с изменением регистра символов Юникода - возможно, размер кодировки символа в нижнем регистре отличается отразмер кодировки исходного символа?
У кого-нибудь есть идеи, что здесь происходит?Могло бы помочь, если бы я знал, что означает «is_singular ()» в контексте повышения, но после нескольких поисков в Google я не смог найти для него никакой документации.
Соответствующие версии программного обеспечения: Повышение 1.40.0;MS Visual Studio 2008.