Sup*_*mum 5 c++ declaration using-declaration language-lawyer
以下程序是否符合c ++标准?
namespace X { class A; }
namespace Y { using X::A; class A {}; }
int main() {}
Run Code Online (Sandbox Code Playgroud)
我用不同的编译器得到了不同的结果:
我没有在我的程序违反的c ++标准中找到任何规则.
如果程序格式正确,为什么visual studio会出错?
如果程序格式不正确,那么c ++标准中的规则是否会违反,为什么gcc不会出错?
我不是想让我的程序编译.我只是想根据c ++标准找出它是否格式正确,以及为什么我测试的两个编译器表现不同.
我认为该程序格式不正确。[basic.scope.declarative]/4 说:
\n\n\n给定单个声明区域中的一组声明,每个声明都指定相同的非限定名称,
\n\xe2\x80\x94 它们都应该指同一个实体,或者都指函数和函数模板;或者
\n\xe2\x80\x94 恰好有一个声明应声明一个不是 typedef 名称的类名或枚举名称,并且其他声明应全部引用相同的变量或枚举器,或者全部引用函数和函数模板;在这种情况下,类名或枚举名被隐藏
\n
两次不合格名称声明A引用不同的实体,它们都是类。
(有趣的是,GCC 6.0 和 Clang 3.7 似乎都没有这样诊断。两者都接受编写的代码(不诊断具有相同名称的两个不同类的声明)。如果您添加到 的主体,那么X::A a;Clangmain会抱怨不完整类型X::A。)
| 归档时间: |
|
| 查看次数: |
1063 次 |
| 最近记录: |