考虑下面的代码:
struct foo{};
int main() {
foo::foo a;
}
我希望这是格式良好的,通过class/2中的规则声明了一个foo
类型的变量(N4140,重点是我的):
在看到类名之后立即将类名插入到声明它的作用域中。类名也被插入到类本身的作用域中;这称为注入类名。出于访问检查的目的,注入的类名被视为公共成员名。
clang 3.6.0
同意我的观点,他用-Wall -pedantic
编译了上面的代码,没有适用的警告。
gcc 5.2.0
不同意,并提供了以下错误消息:
main.cpp: In function 'int main()':
main.cpp:5:5: error: 'foo::foo' names the constructor, not the type
foo::foo a;
无论注入的类名的嵌套有多深,例如foo::foo::foo::foo
,以上都是成立的。
是否存在强制将该构造解释为该上下文中的构造函数的规则,或者这是一个gcc
错误?或者我对标准引用的解释不正确?
https://stackoverflow.com/questions/32006122
复制相似问题