Questo codiceInterazione tra decltype e il nome del membro della classe shadowing un nome esterno
int clash;
struct Foo {
decltype(clash) clash;
};
compila in silenzio su clang, ma non riesce a compilare su gcc dà errori
error: declaration of 'int Foo::clash' [-fpermissive]
error: changes meaning of 'clash' from 'int clash' [-fpermissive]
Sembra che 2 ingredienti sono richiesto per l'errore:
L'ombreggiamento deve essere eseguito da un membro della classe (nessun problema se è lo scope locale di una funzione).
decltype ([nome ombreggiato]) deve essere utilizzato nell'ombreggiamento prima della dichiarazione di [nome ombreggiatura].
La mia domanda è duplice:
- è GCC giustificato nel respingere questo codice?
- Dove lo dice nello standard?
Che dire: 'int chash [sizeof (clash)];'? Cosa dice un compilatore diverso? Immagino che non abbia a che fare con i compilatori di reclami C++ 11, ma come si comportano in questi casi. – Ajay