Рассмотрим эту простую программу:
#include <iostream>
#include <locale>
int main()
{
std::locale::global(std::locale("en_US.UTF-8")); // 1
std::wcout.imbue(std::locale("en_US.UTF-8")); // 2
std::wcout << L"é\n";
}
Если я соберу и запущу это на машине Linux с помощью gcc или clang, используя либо libc++, либо libstdc++, эта программа напечатает ожидаемый символ с диакритическим знаком. Если я закомментирую и строку 1, и строку 2, это не произойдет, как и ожидалось (язык по умолчанию — C без поддержки Unicode).
Сейчас происходят странные вещи.
Если я закомментирую только строку 1, она будет работать с libc++, но перестанет работать с libstdc++.
Если я закомментирую только строку 2, она будет работать с libstdc++, но перестанет работать с libc++.
Я ожидаю, что любая линия должна иметь желаемый эффект. Я ошибаюсь, ожидая этого?
Я использую Gentoo Linux с gcc-11.1.0, clang-11.1.0 и libc++-11.1.0.