¿Por qué una clase tiene permitido tener un miembro estático de sí mismo, pero no un miembro no estático?

class base { public: base a; }; 

Da error de comstackción.

 class base { public: static base a; }; 

mientras que este código no da error de comstackción

Debido a que static miembros de la clase static no se almacenan en la instancia de la clase, es por eso que funcionaría una static .

Almacenar un objeto dentro de otro objeto del mismo tipo rompería el tiempo de ejecución – tamaño infinito, ¿verdad?

¿Qué devolvería sizeof ? El tamaño del objeto necesita ser conocido por el comstackdor, pero dado que contiene un objeto del mismo tipo, no tiene sentido.

Supongo que el error es algo así como

el campo ‘a’ tiene un tipo incompleto

Esto se debe a que cuando no es estático, la clase A no está completamente definida hasta el corsé de cierre. Las variables de miembro estático, por otro lado, necesitan un paso de definición por separado después de que la clase está completamente definida, por lo que funcionan.

Busque la diferencia entre la statement y la definición para obtener explicaciones más completas.