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