Действительно ли маркер порядка байтов является допустимым идентификатором?

C ++ 11 делает многочисленные дополнения к списку кодовых точек Unicode, разрешенных в идентификаторах (§E). Сюда входит метка порядка байтов, которая входит в диапазон FE47-FFFD .

Если обратиться к браузеру символов, этот диапазон включает в себя целую кучу случайных вещей, начиная с БЕЛАЯ ТОЧКА СЕЗАМА и ФОРМА ПРЕДСТАВЛЕНИЯ ДЛЯ ВЕРТИКАЛЬНОЙ ЛЕВОЙ КВАДРАТНОЙ КРОНШТЕЙН , включая некоторые «мелкие знаки препинания, "причудливый арабский язык, спецификация отображается здесь , азиатские символы половинной и полной ширины, и, наконец, включая ХАРАКТЕР ЗАМЕНЫ , который обычно используется для обозначения нарушенного отображения текста".

Наверняка это ошибка какая-то. Они чувствовали необходимость исключить «точки кунжута», что бы они ни были, но отметка порядка байтов, также известная как устаревшее неразрывное пространство нулевой ширины, - это честная игра? Когда есть еще один неразрывный пробел нулевой ширины, также известный как средство объединения слов, которое также стало приемлемым идентификатором в C ++ 11?

Это кажется наиболее элегантной интерпретацией Стандарта, определяющей любую форму Юникод в качестве исходного набора символов должен начинать файл после необязательной спецификации. Но пользователь также может законно начать файл, используя спецификацию для идентификатора. Это просто некрасиво.

Я что-то упускаю или это очевидный дефект?

11
задан ildjarn 22 November 2011 в 19:47
поделиться