3

次のプログラムは、clang でコンパイルしてもエラーになりません。

namespace X {
    struct i {};
}

namespace Y {
    using X::i;
    struct i {};
}

int main() {}

struct の代わりに int を使用すると、次のようになります。

namespace X {
    int i;
}

namespace Y {
    using X::i;
    int i;
}

int main() {}

このプログラムは、clang でコンパイルすると再定義エラーになります。

プログラム間の唯一の違いは、使用されるエンティティの種類 (struct または int) ですが、一方はエラーなしでコンパイルされ、もう一方は再定義エラーが発生します。

これはclangのバグを示していますか? たぶん、宣言の使用に関しては、再定義とは何かという標準があいまいです。しかし、コンパイラはその解釈を一貫して行うべきではありませんか?

プログラムは次の場所でコンパイルできます。

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 に答える