This very fact that you cannot initialize a class member of the same type as the class on the stack, is something that should have been fixed a long time ago. The C++ standard should have tackled this issue, instead of debating of useless features, such construct is essential to become an integral part of C++. I cannot understand why a compiler cannot calculate the size of Foo, in a two pass or three pass compilation and linkage.