балл С 2003 г. C ++ 03 Документ:
Разработанные спецификаторы типов: раздел 3.4.4, пункт 1:
"An elaborated-type-specifier may be used to refer to a
previously declared class-name or enum-name even though
the name has been hidden by a non-type declaration. **The
class-name or enum-name in the elaborated-type-specifier
may either be a simple identifier or be a qualified-id.**"
Но в n3290 Draft они изменили Разработанные спецификаторы типов (7.1.6.3)
7.1.6.3: Разработанные спецификаторы типов
elaborated-type-specifier:
class-key attribute-specifier-seqopt nested-name-specifieropt identifier
class-key nested-name-specifieropt templateopt simple-template-id
enum nested-name-specifieropt identifier
Могу ли я знать
1) В чем проблема с более ранним синтаксисом, который поддерживает имя типа c ++ 03
7.1.5.3 Elaborated type specifiers
elaborated-type-specifier:
class-key ::opt nested-name-specifieropt identifier
class-key ::opt nested-name-specifieropt templateopt template-id
enum ::opt nested-name-specifieropt identifier
typename ::opt nested-name-specifier identifier
typename ::opt nested-name-specifier templateopt template-id
2) Означает ли, что на самом деле компилятор следует / не выполняет это правило ... (какой компилятор поддерживает это изменение)
3) При переходе к вышеуказанному пункту 3.4.4 / 1-й
The class-name or enum-name in the elaborated-type-specifier
may either be a simple identifier or be a qualified-id
почему это не разрешено в c ++ 0x.
Пожалуйста, кто-нибудь объяснит это?
Пожалуйста, кто-нибудь объяснит это?
(Когда я пытаюсь добавить тег C ++ 0x, он не ... помечается ..., пожалуйста, добавьте любой тег .. Добавить тег ++ Cx?)