这是导致编译时错误的代码:
#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 重新声明实际上阻止了在块范围内出现两次呢?