В C ++ 20 u8
строковых литералов основаны на char8_t
типе. Они сознательно больше не переходят в char const*
:
const char* str = u8"Hall\u00f6chen \u2603"; // no longer valid in C++20
Конечно, конечная цель при переходе на C ++ 20 - полностью перейти на новое поведение (в приведенном выше примере: изменить тип str
). Однако из-за сторонних библиотек это часто невозможно сразу.
Предложения, которые вводят и «исправляют», char8_t
предвидят это и упоминают, что в clang и gcc есть -fno-char8_t
флаг для возврата к старому поведению (при этом все еще имея возможность пользоваться другими функциями C ++ 20).
Второе предложение устанавливает ожидание того, что Microsoft последует и добавит аналогичный флаг, но я не смог найти, как его установить (по крайней мере, в VS 2019, версия 16.4).
Так кто-нибудь знает, что такое эквивалент MSVC -fno-char8_t
?