On Monday, 8 July 2013 at 11:37:31 UTC, JS wrote:
On Monday, 8 July 2013 at 09:55:29 UTC, John Colvin wrote:
On Monday, 8 July 2013 at 09:52:44 UTC, John Colvin wrote:
Most other solutions I tried failed because the compiler evaluates the check (e.g. out contracts) in the interface, which makes the check either semantically wrong, or statically false/failed.

Woops, should be "the contract exists in the scope of the interface", not "the compiler evaluates the check (e.g. out contracts) in the interface"

Hopefully there is a cleaner way but this beats nothing... thanks.

There could be merit in adding more sophisticated requirements in base classes and interfaces. Currently, AFAIK there isn't one.

inherited "static invariant() {}" would be one possibility, run at compile-time. Perhaps only run on classes that can be explicitly instantiated, but declared in any class/interface further up the inheritance tree. All static invariants would have to pass, in derived and base classes, i.e. it's a tighten-only contract like out.

It's a unittest of sorts, but compile-time and fully class-aware.

Reply via email to