incomplete-type

¿Cómo puedo declarar un vector miembro de la misma clase?

¿Por qué diablos funciona el siguiente código? struct A { std::vector<A> subAs; }; A es un tipo incompleto, ¿verdad? Si hubiera un vector de A*s lo entendería. Pero aquí no entiendo cómo funciona. Parece ser una definición recursiva.

"Tipo incompleto" en clase que tiene un miembro del mismo tipo de la propia clase

Tengo una clase que debería tener un miembro privado de la misma clase, algo así como: class A { private: A mem ... to. ¿Por qué? No me dice el tipo incompleto si uso un puntero, pero prefiero no usar un puntero. Cualquier ayuda es apreciada

¿Es & * p válido C, dado que p es un puntero a un tipo incompleto?

¿Es el siguiente ejemplo una unidad de traducción completa válida en C? struct foo; struct foo *bar(struct foo *j) { r ... o. En su lugar da el siguiente error: y.c:5: error: dereferencing pointer to incomplete type ¿Es esto un defecto en gcc?