С++ 11 делает множество дополнений к списку кодовых точек Unicode, разрешенных в идентификаторах (§E). Это включает в себя знак порядка байтов, который включен в диапазон FE47-FFFD
.
Консультирование браузера символов, этот диапазон включает в себя целую кучу случайных вещей, начиная с WHITE SESAME DOT
и PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
, включая некоторую "маленькую пунктуацию", фантастическую арабскую, спецификацию здесь, полуширина и полноразмерные азиатские символы, и, наконец, включает в себя REPLACEMENT CHARACTER
, который обычно используется для указания разбитого текстового рендеринга.
Конечно, это какая-то ошибка. Они почувствовали необходимость исключить "кунжутные точки", независимо от того, что есть, но знак байтового байта a.k.a. устаревшее безразличное пространство без ширины - это честная игра? Когда есть еще одно неразрывное пространство для словаря a.k.a., которое также было допустимым идентификатором в С++ 11?
Кажется, самая элегантная интерпретация Стандарта, чтобы определить любую форму Юникода в качестве исходного набора символов, заключается в том, чтобы начать файл после дополнительной спецификации. Но также пользователь может законно запустить файл, используя спецификацию для идентификатора. Это просто уродливо.
Я что-то упускаю, или это беспроблемный дефект?