n3290: Синтаксис разработанных спецификаторов типов изменен? - PullRequest
0 голосов
/ 22 августа 2011

балл С 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?)

1 Ответ

1 голос
/ 22 августа 2011
  1. Это простая реорганизация.typename-specifier теперь не является разновидностью elaborated-type-specifier, но они оба вида trailing-type-specifier.
  2. Непонятно, что должны делать компиляторы.Можете ли вы вспомнить действительный код C ++ 03, который не является допустимым C ++ 0x?
  3. Что именно не разрешено в C ++ 0x?Грамматика гласит, что здесь разрешен квалифицированный идентификатор, как nested-name-specifier_opt identifier.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...