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

Redefinition inconsistency in clang between struct and int

以下程序用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 中存在错误?在使用声明时,标准可能不明确什么是重新定义。但是编译器不应该一致地做出解释吗?

可以在这里编译程序:

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

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