L'extrait de code ci-dessous compile (démo):
struct A{ int i = 10; };
int main() {
struct A{ int i = 20; };
struct A;
struct A a;
}
Mais ce n'est pas:
struct A{ int i = 10; };
int main() {
// struct A{ int i = 20; };
struct A;
struct A a;
}
Je peux voir que la réponse est probablement donnée par ces paragraphes dans la Norme:
[de base.de recherche.elab]/2 et [de base.la portée.pdecl]/7.
Mais je ne sais vraiment pas comment en déduire les différents comportements indiqué ci-dessus à partir de ces deux paragraphes.
Notez que dans le premier exemple, l' struct A
est pas déclaré d'abord dans le élaborées de type spécificateur struct A;
, mais dans la définition de l' struct A
en main()
.
Dans le deuxième exemple, l' struct A
est également pas déclaré d'abord dans le élaborées de type spécificateur struct A;
, mais dans la définition de l' struct A
dans la portée globale.