Ниже фрагмент ниже компилируется (демонстрация):
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 в глобальной области.