コンパイル時エラーを引き起こすコードは次のとおりです。
#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 回出現しないのはなぜでしょうか?