Ниже фрагмент ниже компилируется (демонстрация):
struct A{ int i = 10; };
int main() {
struct A{ int i = 20; };
struct A;
struct A a;
}
Но это не так:
struct A{ int i = 10; };
int main() {
// struct A{ int i = 20; };
struct A;
struct A a;
}
Я вижу, что ответ, вероятно, приведен в этих параграфах в стандарте:
[basic.lookup.elab]/2 и [basic.scope.pdecl]/7.
Но я действительно не знаю, как вывести различные поведения, показанные выше из этих двух абзацев.
Обратите внимание, что в первом примере struct A
не сначала объявлен в спецификаторе специфицированного типа struct A;
, а в определении struct A
в main()
.
Во втором примере struct A
также не сначала объявлен в специфицированном спецификаторе типа struct A;
, а в определении struct A
в глобальной области.