使用声明(GCC/VS2010中的错误)的名称空间?
-
27-09-2019 - |
题
namespace A{
int i;
}
int main(){
using A::i;
using A::i;
}
VS2010-编译罚款
GCC(IDEONE) - 编译罚款
Comeau-给出错误““ comeAutest.c”,第10行:错误:“ i”已经在当前范围中使用a :: i;”在当前范围内声明了。
$ 7.3.3/8-“使用解释是一份声明,因此可以在允许多个声明的地方重复使用。”
那里的示例表明该代码确实是错误的。
那么,这是GCC和VS2010中的错误吗?
编辑2:
删除倍数 using directives
因为它与手头的查询无关。
解决方案
您指的示例 已知不一致. 。委员会尚未解决此问题。
那么,这是GCC和VS2010中的错误吗?
我认为这不是GCC/VS2010/Clang或Comeau的错误。它似乎是C ++标准中的错误。在这些情况下,编译作家必须下定决心最可行的东西。如果您删除了所讨论的示例,则3.3/4表示示例有效:“给定单个声明区域中的一组声明,每个声明区域都指定相同的不合格名称,...他们应全部参考相同的实体,或全部指函数和功能模板;或...”。
正如链接的问题所讨论的那样,出现的问题是7.3.3/8所指的“声明”时,委员会没有达成共识。因此,在此之前,3.3/4适用于GCC/VS2010和Clang,而Comeau则选择使用其他一些语义。
其他提示
是的你是对的。这确实是G ++,MSVC ++和Clang中的错误。 Comeau已经正确了。
如你所说 7.3.3/8
说
使用解释是声明,因此可以在允许多个声明的情况下重复使用
还提供了以下代码段。
void f()
{
using A::i;
using A::i; //error: double declaration
}
同样,您的代码也不明显。
不隶属于 StackOverflow