以下程序在使用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