n3290:修改了详细的类型说明符语法
n3290 : Elaborated type specifiers syntax changed?
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标签?)
- 这是一个简单的重组。
- 编译器应该做什么并不清楚。你能想到有效的c++ 03代码不是有效的c++ 0x吗?
- c++ 0x中到底不允许什么?语法说这里允许限定id,如
nested-name-specifier_opt identifier
。
typename-specifier
现在不是一种elaborated-type-specifier
,但它们都是一种trailing-type-specifier
。相关文章:
- 缺少类型说明符,显式类型为"缺少错误"
- 与 tesseract::TessBaseApi() 相关的 Tesseract-OCR 出错(预期的类型说明符)
- 为什么转换函数声明不需要至少一个定义类型说明符
- C++需要所有声明的类型说明符和预期的非限定 id(需要调试帮助)
- printf 数据类型说明符复杂问题
- C++错误:"class name"之前的预期类型说明符
- 缺少类型说明符和另一个问题
- 缺少类型说明符 - 假定为 int.注意 c++ 不支持 default-int
- 错误:C4430:缺少类型说明符-假定为int.注意:C++不支持default-int
- 在C++中出现错误之前,无效使用了不完整的类型和所需的类型说明符
- 缺少类型说明符 - int 假定 声明静态成员后出错
- 不能在类型说明符中定义联合
- 没有带有字符串数组的存储类或类型说明符
- 警告:函数使用不带尾随返回类型的'auto'类型说明符
- 仅为某些模板专用化定义转换运算符:预期类型/预期类型说明符
- 在 C++ 中出现unique_ptr错误之前的预期类型说明符
- 有没有办法将类型说明符存储在变量中
- C 期望类对象的类型说明符
- 是无符号的int"简单类型说明符"
- 在 vscode 上编译错误.类型说明符是 C++11 扩展