Modifica risposta: Come menzione nei commenti. Il problema in questo caso è che scrittura
external int a;
auto a = 3;
è lo stesso di scrittura
external int a;
int a = 3;
che significa che hai una nuova definizione di una e che causa un errore.
Prima risposta: Per la mia comprensione, questo rompe parti della regola della definizione One. Specificamente, intendo la seguente regola (in riferimento a MISRA C++ 2008) che dice che un identificatore con linkage esterno dovrebbe sempre avere solo una definizione. Nel tuo esempio hai una definizione nel file corrente (auto a = 3;
) e con l'esterno fai riferimento anche a una definizione in un altro file.
Sicuramente questo è un bug g ++ –
Questo codice causa un errore anche in MS Visual Studio 2012, dicendo 'errore C2371: 'a': ridefinizione; diversi tipi di base ». – nabroyan
Che dire: 'extern int a; decltype (a) a; ';) – Ajay