点从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标签?)
答案 0 :(得分:1)
typename-specifier
现在不是elaborated-type-specifier
,但它们都属于trailing-type-specifier
种类。 nested-name-specifier_opt identifier
。