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

时间:2015-07-05 13:34:16

标签: c++ clang language-lawyer using-declaration redeclaration

使用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中存在错误?也许标准在使用声明方面的重新定义是模棱两可的。但编译器不应该一致地解释它吗?

程序可以在这里编译:

1 个答案:

答案 0 :(得分:2)

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

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