n3290:修改了详细的类型说明符语法

n3290 : Elaborated type specifiers syntax changed?

本文关键字:类型 说明符 语法 修改 n3290      更新时间:2023-10-16

point From 2003 c++ 03 Document:

详细的类型说明符:章节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草案中,他们改变了阐述的类型说明符 (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标签?)

    这是一个简单的重组。typename-specifier现在不是一种elaborated-type-specifier,但它们都是一种trailing-type-specifier
  1. 编译器应该做什么并不清楚。你能想到有效的c++ 03代码不是有效的c++ 0x吗?
  2. c++ 0x中到底不允许什么?语法说这里允许限定id,如nested-name-specifier_opt identifier