«ошибка C2015: слишком много символов в константе» для литерала char32_t

#c #unicode

#c #юникод

Вопрос:

char32_t c = U'▁' работает под GCC и Clang, но не работает под MSVC с ошибкой

 error C2015: too many characters in constant
 

U'u2581' работает, но является ли это ошибкой компилятора? Документация Microsoft по строковым и символьным литералам, похоже, ничего не говорит о том, что она не поддерживается, но, возможно, я пропустил что-то важное.

Комментарии:

1. Это может иметь какое-то отношение к исходному набору символов, с которым обрабатывается файл CPP. В какой кодировке символов сохранен исходный файл?

2. @1201ProgramAlarm UTF-8.

3. Если я скомпилирую эту строку в файл, сохраненный как «UTF-8», он скомпилируется нормально. Если я использую «UTF-8-no-bom» (как его называет мой редактор; в начале файла нет маркировки порядка байтов), я получаю эту ошибку.

4. @1201ProgramAlarm Ах, и 1) VS Code идет другим путем; «UTF-8» и «UTF-8 со спецификацией»; 2) согласно en.wikipedia.org/wiki/Byte_order_mark#UTF-8 , «Компиляторы и интерпретаторы Microsoft, а также многие части программного обеспечения в Microsoft Windows, такие как Notepad, рассматривают спецификацию как обязательное магическое число, а нечем использовать эвристику «. хотя это и не рекомендуется. Похоже, это ответ; спасибо!

5. MSVC нуждается /utf-8 в переключении компилятора, если исходный файл не имеет спецификации, в противном случае предполагается локализованная кодировка ANSI, например Windows-1252 , в американских и западноевропейских версиях Windows.