n3290:详细说明的类型说明符语法是否已更改?

时间:2011-08-22 11:38:37

标签: c++ c++11

点从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草稿中,他们更改了 Elaborated类型说明符(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)早期语法的问题是什么,它支持typename 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 TAG时,它不会..任何一个..添加c ++ 0x标签?)

1 个答案:

答案 0 :(得分:1)

  1. 这是一个简单的重组。 typename-specifier现在不是elaborated-type-specifier,但它们都属于trailing-type-specifier种类。
  2. 目前尚不清楚编译器应该做什么。你能想到有效的C ++ 03代码不是有效的C ++ 0x吗?
  3. C ++ 0x中究竟不允许什么?语法表示允许使用qualified {id nested-name-specifier_opt identifier