C ++ 11 делает многочисленные дополнения к списку кодовых точек Unicode, разрешенных в идентификаторах (§E). Сюда входит метка порядка байтов, которая входит в диапазон FE47-FFFD
.
Если обратиться к браузеру символов, этот диапазон включает в себя целую кучу случайных вещей, начиная с БЕЛАЯ ТОЧКА СЕЗАМА
и ФОРМА ПРЕДСТАВЛЕНИЯ ДЛЯ ВЕРТИКАЛЬНОЙ ЛЕВОЙ КВАДРАТНОЙ КРОНШТЕЙН
, включая некоторые «мелкие знаки препинания, "причудливый арабский язык, спецификация отображается здесь , азиатские символы половинной и полной ширины, и, наконец, включая ХАРАКТЕР ЗАМЕНЫ
, который обычно используется для обозначения нарушенного отображения текста".
Наверняка это ошибка какая-то. Они чувствовали необходимость исключить «точки кунжута», что бы они ни были, но отметка порядка байтов, также известная как устаревшее неразрывное пространство нулевой ширины, - это честная игра? Когда есть еще один неразрывный пробел нулевой ширины, также известный как средство объединения слов, которое также стало приемлемым идентификатором в C ++ 11?
Это кажется наиболее элегантной интерпретацией Стандарта, определяющей любую форму Юникод в качестве исходного набора символов должен начинать файл после необязательной спецификации. Но пользователь также может законно начать файл, используя спецификацию для идентификатора. Это просто некрасиво.
Я что-то упускаю или это очевидный дефект?