Вот код, который вызывает ошибку времени компиляции:
#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(){ }
работает отлично. Так почему же повторная декларация использования на самом деле предотвращается от двойного появления в области блока?
using ...;
в начале блока. - person Rufflewind   schedule 16.01.2015