gpt4 book ai didi

c++ - 使用声明的命名空间(GCC/VS2010 中的错误)?

转载 作者:太空宇宙 更新时间:2023-11-04 13:40:15 27 4
gpt4 key购买 nike

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 - "A using-declaration is a declaration and can therefore be used repeatedly where (and only where) multiple declarations are allowed."

右边的例子表明代码确实是错误的。

那么,这是 GCC 和 VS2010 中的错误吗?

编辑 2:

删除多个 using directives因为它与手头的查询无关。

最佳答案

你引用的例子is known to be inconsistent .委员会还没有解决这个问题。

So, is this a bug in GCC and VS2010?

我认为这不是 GCC/VS2010/Clang 或 Comeau 中的错误。它似乎是 C++ 标准中的错误。在这些情况下,编译作者必须决定什么是最可行的。如果删除有问题的示例,则 3.3/4 声明该示例有效:“在单个声明区域中给出一组声明,每个声明都指定相同的非限定名称,......它们都应引用相同的实体,或全部引用功能和功能模板;或...”。

问题出现了,正如在相关问题中所讨论的那样,当 7.3.3/8 说“声明”时指的是什么,委员会没有就此达成共识。因此,在此之前,3.3/4 适用于 GCC/VS2010 和 Clang,而 Comeau 选择使用其他一些语义。

关于c++ - 使用声明的命名空间(GCC/VS2010 中的错误)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27977700/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com