以下程序在使用 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中的错误?当涉及到 using-declarations 时,也许标准是模棱两可的。但是编译器不应该始终如一地解释它吗?
程序可以在这里编译: