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.