https://issues.dlang.org/show_bug.cgi?id=519
--- Comment #18 from Andrei Alexandrescu <and...@erdani.com> --- (In reply to Martin Nowak from comment #17) > (In reply to Andrei Alexandrescu from comment #16) > > I stated this elsewhere, just making sure I don't forget: probably we don't > > want to invoke invariants during the GC cycle. > > Walter has a different opinion on this, I don't follow his argument though. > http://forum.dlang.org/post/m753hk$pt2$1...@digitalmars.com > > Currently it can't be done, because the calls to the invariant are embedded > into the generated destructor function. Well a simple invariant would be: assert(this.parent.child is this); which would be placed in some child node, or could be moved in parent like this: assert(this.child.parent is this); The invariant involves two objects no matter where you put it. > Also the invariant is called twice, before and after running the destructor. > The latter forces one to perform additional cleanup, e.g. setting pointers > to null. That's definitely a problem. Invariants are not supposed to hold after destruction. --