首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >注入的类名编译器差异

注入的类名编译器差异
EN

Stack Overflow用户
提问于 2015-08-14 16:56:22
回答 3查看 4.3K关注 0票数 22

考虑下面的代码:

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错误?或者我对标准引用的解释不正确?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32006122

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档