Согласно документу cppreference.com о wchar_t:
wchar_t- тип для представления широкого символа (см. широкие строки). Требуется быть достаточно большим, чтобы представлять любую поддерживаемую кодовую точку символа (32 бита в системах, поддерживающих Unicode. Заметным исключением является Windows, где wchar_t - 16 бит и содержит UTF-16). Он имеет одинаковый размер, подпись и выравнивание как один из целочисленных типов, но является отдельным типом.
Стандарт говорит в [basic.fundamental]/5:
Тип
wchar_t- это отдельный тип, значения которого могут представлять различные коды для всех членов самого большого расширенного набора символов, указанного среди поддерживаемых локалей. Типwchar_tдолжен иметь те же требования к размеру, подписи и выравниванию, что и один из других интегральных типов, называемый его базовым типом. Типыchar16_tиchar32_tобозначают разные типы с одинаковым размером, подписью и выравниванием какuint_least16_tиuint_least32_t, соответственно, в<cstdint>, называемые базовыми типами.
Итак, если я хочу иметь дело с символами unicode, следует ли использовать wchar_t?
Эквивалентно, как я узнаю, поддерживается ли какой-либо конкретный символ юникода wchar_t?