On Sunday, November 07, 2010 18:42:08 Adam Burton wrote: > 1. Default struct constructor. > This means the NN can be created without assigning a value. I have tried to > get around this issue somewhat by adding a null check in the invariant but > it seems the invariant is not called when using the default constructor. > Should it be or should it not? If it is then atleast while contracts are > enabled we get to know about uninitialised NNs.
There are no default constructors for structs. They use init, which is known at compile-time, so there is no constructor for the invariant to be called after. It's quite easy to create structs which pass their invariant when you construct them with a constructor but whose init fails the invariant. The fact that the invariant gets called before opAssign() doesn't help either: http://d.puremagic.com/issues/show_bug.cgi?id=5058 The result is that at this point, you pretty much either need to have init pass your invariant or have no invariant. - Jonathan M Davis