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.