Сниппет ниже компилирует (demo):Первый фрагмент ниже компилируется, а второй - нет. Зачем?
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
в глобальном масштабе.
Почему был удален тег 'language-lawyer'? – giusti
@giusti Я только что вставлял тег –
Хотелось бы понять, почему @RyanHaining удалил его в первую очередь. Возможно, у него была причина. – giusti