DIP 1006 - Preliminary Review Round 1
Mathias Lang via Digitalmars-d
digitalmars-d at puremagic.com
Wed Apr 12 09:34:12 PDT 2017
On Wednesday, 12 April 2017 at 16:22:00 UTC, Lewis wrote:
>
> I have to ask the newbie question, just to make sure we're not
> missing anything obvious. Why can't we fix invariants so that
> they're pay-for-what-you-use? In other words, is there a way we
> can make sure _d_invariant is never called (or early-outs) for
> classes that don't use invariants?
There's no newbie question :)
Sadly it is not possible. Consider the following hierarchy:
```
class Mother : Object { public int i; public void myFunction ()
{} }
class Daughter1 : Mother { invariant () { assert(i != 0); } }
class Daughter2 : Mother {}
```
The `Mother` class needs to insert invariant checks at the
beginning and the end of `myFunction` to account for the
possibility of a derived class defining invariant (here
`Daughter1`). However those checks are superfluous if no
`invariant` is defined, as it's the case with `Daughter2`.
However the base class cannot know this in advance (because it
might be in a library and already compiler, for example).
More information about the Digitalmars-d
mailing list