使用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中存在错误?也许标准在使用声明方面的重新定义是模棱两可的。但编译器不应该一致地解释它吗?
程序可以在这里编译:
答案 0 :(得分:2)
正如Igor Tandetnik所说,由于[basic.scope.declarative] / 4,它的格式不正确,并且铿锵有一个错误。
该错误现已得到确认并修复。请参阅:https://llvm.org/bugs/show_bug.cgi?id=24033