On Tuesday, 16 May 2017 at 03:44:54 UTC, MysticZach wrote:
It seems to me that the compiler could detect a presence or lack of a body simply by the presence or absence of any statement after the contracts, i.e.,

interface D {
  // fun is implicitly overridable here
  int fun() {
    in assert(...);
  }
}

Also, does a final function with contracts, but no body, make any sense? What's the use case?

Even if there were some use case for it, I can think of two solutions. One is to keep and require the current syntax for an interface function without a body. This is the natural way to install contracts anyway, for a function with no body.

The other solution is to recommend the addition of an empty statement, for an empty final function, e.g.:

// final
int fun() {
  in assert(...);
  {}
}

Considering what Jonathan said about how he never uses contracts because they're so bulky, might it not be worth it to solve the interface problem in either of the above two ways?

I should have said *three* ways, because it's quite possible to conclude that there will never be a use case for a final function in an interface to have contracts, but no body, and therefore assume that contracts plus a lack of statements --> an overridable function.

Reply via email to