assert(x == 42 && parent is Widget.init);Is that meant to say "x is Widget.init"?To clarify:assert(Widget.init.x == 42 && Widget.init.parent is Widget.init);
Ah right, missed the parent parameter... Also ignore my previous comment in that case :-)
However, I'm not sure this is good. Those kinds of reference cycles can easily lead to infinite loops. Is that really an improvement on a null-pointer dereference?