L'extrait ci-dessous compiles (demo):Le premier extrait ci-dessous se compile, mais pas le second. Pourquoi?
struct A{ int i = 10; };
int main() {
struct A{ int i = 20; };
struct A;
struct A a;
}
Mais cela ne:
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:
[basic.lookup.elab]/2 et [basic.scope.pdecl]/7.
Mais je ne sais vraiment pas comment déduire les différents comportements montrés ci-dessus de ces deux paragraphes.
Notez que dans le premier exemple, le struct A
est pas d'abord déclaré dans le -type élaboré spécificateurstruct A;
, mais dans la définition de struct A
dans main()
.
Dans le deuxième exemple, le struct A
est également pas d'abord déclaré dans le élaboré type spécificateurstruct A;
, mais dans la définition de struct A
portée mondiale.
Pourquoi le tag 'language-lawyer' a-t-il été supprimé? – giusti
@giusti Je viens de réinsérer l'étiquette –
Je voudrais comprendre pourquoi @RyanHaining l'a supprimé en premier lieu. Peut-être qu'il avait une raison. – giusti