(2) fails because the class it not complete yet at that point (the full list of member variables isn't known yet, more or less). And also because of common sense, as it would cause an infinite nesting of objects (and infinite memory if you add any other member variable).
(1) Passes because the compiler performs two passes over a class to parse it. The method bodies are processed during the second pass, at which point the class is already complete. Also (1) doesn't require infinite memory, calling .func()
just creates one more object.