때때로 std :: wstring에서 호출 될 때 boost :: lower에서 이상한 동작이 발생합니다. 특히, 나는 다음과 같은 주장은 릴리스 빌드에서 실패 보았다 (그러나 디버그 빌드에서 하지) :boost :: lower가 is_singular 어설 션을 실패하게하는 원인은 무엇입니까?
Assertion failed: !is_singular(), file C:\boost_1_40_0\boost/range/iterator_range.hpp, line 281
나는 또한 상황에서 부스트 :: to_lower를 호출 한 후 메모리 오류를 것으로 보인다 무엇을 보았다 같은 :
void test(const wchar_t* word) {
std::wstring buf(word);
boost::to_lower(buf);
...
}
std::transform(wstr.begin(), wstr.end(), wstr.begin(), towlower)
와 boost::tolower(wstr)
이 문제를 해결하기 위해 표시되는 전화 교체; 하지만 무슨 일이 일어나고 있는지 알고 싶습니다.
아마도 가장 문제는 유니 코드 문자의 대소 문자를 변경하는 것과 관련이있는 것 같습니다. 대문자 문자의 인코딩 크기가 원본 문자의 인코딩 크기와 다를 수 있습니다.
여기에 어떤 일이 벌어 질지 상상해보십시오. 내가 "boost_extular()"가 boost의 문맥에서 의미하는 것을 알았다면 도움이 될지 모르지만, 몇 번의 Google 검색을 수행 한 후에는 문서를 찾을 수 없었습니다.
관련 소프트웨어 버전 : 부스트 1.40.0; Microsoft Visual Studio 2008.