Случайно наткнулся на то, что в clang-овой реализации libc++ (по крайней мере в MacOS) при работе с русской юникодной строкой в wstring ее метод substr ничего не выдает. Меняем текст на английский во всем том же юникоде - substr работает:
#include <iostream>
int main() {
::setlocale(LC_ALL, "");
std::wstring s1(L"test");
std::wstring s2(L"тест");
std::wcout << s1.substr(2, 1); // s
std::wcout << s2.substr(2, 1); // <пусто>
}
Компилируем пример в gcc: выдается sс
Прочитал старый срач по поводу реализации юникода в C++ Есть ли жизнь на lua (комментарий) , но сути проблем работы substr с wstring так и не понял.
Понятно, что есть библиотека ICU, но хотелось бы понять из-за чего это может происходить?