Я написал следующую простую программу и скомпилировал ее на компиляторе gcc
#include <stdio.h>
typedef int i;
void foo()
{
struct i {i i;} i;
i.i = 3;
printf("%i\n", i.i);
}
int main() { foo(); }
Он компилируется и отлично работает в C. (см. живое демо здесь) Но это не скомпилировано в С++. Компилятор С++ предоставляет следующие сообщения об ошибках.
prog.cc: In function 'void foo()':
prog.cc:5:17: error: field 'i' has incomplete type 'foo()::i'
struct i {i i;} i;
^
prog.cc:5:12: note: definition of 'struct foo()::i' is not complete until the closing brace
struct i {i i;} i;
Смотрите демо-версию здесь
Я не мог найти правила относительно этого в стандартах C и С++. Почему он компилируется в C, но не на С++? Что говорит об этом стандарт? Я очень хорошо знаю, что C и С++ - разные языки, имеющие разные правила, но мне любопытно узнать о точных правилах.