3

以下程序在使用 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 时,也许标准是模棱两可的。但是编译器不应该始终如一地解释它吗?

程序可以在这里编译:

4

1 回答 1

2

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

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

于 2015-07-06T10:36:27.210 回答