以下是导致编译时错误的代码:
#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]
):
使用声明是声明,因此可以使用 反复允许多个声明在哪里(并且只在哪里)。
所以,我认为任何重新声明在块范围内都是不正确的。但是程序
#include <iostream>
void f()
{
extern int a;
extern int a;
}
int main(){ }
工作正常。那么为什么实际上阻止使用重新声明在块范围内出现两次呢?