Поддержка локали в libc++ и libstdc++

Рассмотрим эту простую программу:

#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.


person n. 1.8e9-where's-my-share m.    schedule 03.06.2021    source источник
comment
Стандарт ничего не обещает в отношении en_US.UTF-8, поэтому я не спрашиваю, насколько (не) соответствует стандарту такое поведение.   -  person n. 1.8e9-where's-my-share m.    schedule 03.06.2021
comment
Этот вопрос и ответ кажется актуальным.   -  person Ayxan Haqverdili    schedule 03.06.2021
comment
@AyxanHaqverdili, ха-ха, я забыл об этом. Так что теоретически imbue должно быть достаточно, но на практике для libstdc++ это не работает...   -  person n. 1.8e9-where's-my-share m.    schedule 03.06.2021
comment
Для этого должен быть значок.   -  person Ayxan Haqverdili    schedule 03.06.2021