struct和int之间clang中的重新定义不一致



以下程序在使用clang编译时不会出现错误:

namespace X {
    struct i {};
}
namespace Y {
    using X::i;
    struct i {};
}
int main() {}

让我们使用int而不是struct,然后我们得到:

namespace X {
    int i;
}
namespace Y {
    using X::i;
    int i;
}
int main() {}

当使用clang进行编译时,此程序会出现重新定义错误。

程序之间的唯一区别是使用的实体类型(struct或int(,但其中一个编译时没有错误,另一个则给出重新定义错误。

这是否表明clang中存在错误?当涉及到使用声明时,标准可能不明确什么是重新定义。但是编译器不应该一致地解释它吗?

程序可以在这里编译:

  • http://melpon.org/wandbox/permlink/Cixqs9EJcxeYb53E
  • http://melpon.org/wandbox/permlink/QmZ8ehXyozvKnZST

正如Igor Tandetnik所说,由于[basic.scope.declarative]/4,它的格式不正确,clang中有一个错误。

该错误现已得到确认和修复。请参阅:https://llvm.org/bugs/show_bug.cgi?id=24033

相关内容

  • 没有找到相关文章

最新更新