1

コンパイル時エラーを引き起こすコードは次のとおりです。

#include <iostream>

int a;

void f()
{
    using ::a;
    using ::a; //'a' is already declared in this scope. 
}

int main(){ }

デモ

標準の内容は次のとおりです ( N4296::7.3.3/10 [namespace.udecl]):

using-declaration は宣言であるため、複数の宣言が許可されている場所 (および場所のみ) で繰り返し使用できます。

したがって、ブロックスコープ内での再宣言は形式が正しくないと思いました。しかし、プログラム

#include <iostream>

void f()
{
    extern int a;
    extern int a;
}

int main(){ }

デモ

正常に動作します。では、using 再宣言が実際にブロック スコープに 2 回出現しないのはなぜでしょうか?

4

0 に答える 0