What is the case against a struct post-blit default constructor?

monarch_dodra monarchdodra at gmail.com
Mon Oct 15 09:05:35 PDT 2012


On Monday, 15 October 2012 at 15:56:33 UTC, Steven Schveighoffer 
wrote:
>
>
> Isn't it possible to customize when an "invariant" is called 
> using contracts?
>
> For example:
>
> struct S
> {
>    private bool isValid;
>    private void _invariant() {assert(isValid);}
>
>    void foo()
>    in { _invariant();} out {_invariant();} body
>    {
>       // whatever
>    }
>
>    void opAssign(ref S other)
>    out {_invariant();} body
>    {
>       isValid = other.isValid;
>    }
> }
>
> ???
>
> Yeah, It's extra work.  But essentially, isn't this what you 
> want?  The thing about disabling invariant checks on some 
> specific function in some specific case is that someone else 
> has a valid case for requiring it.
>
> The only sucky part about the above is, _invariant is compiled 
> in even in release mode (though it should inline to a noop).
>
> -Steve

There is now an "assert" word for version blocks so you can put 
your code inside that, and it doesn't get compiled in during 
release.


More information about the Digitalmars-d mailing list