On Friday, 3 November 2017 at 02:32:41 UTC, Jonathan M Davis
wrote:
Personally, I hate how verbose they are, but my solution is
just not to use them. And IMHO, the only place that they add
real value is in classes, where their success or failure can be
&&ed or ||ed based on how that should work with inheritance.
For struct member functions or free functions, where no
inheritance is involved, they add considerably less value.
One advantage is documentation of expected pre-conditions. With
the proposed block-less syntax, people would presumably use them
more. Then there would be a bigger motivation for some compilers
to insert the contracts at the call site, and use this
information for optimization on the caller side, or to point out
logical inconsistencies in the calling code (e.g. detecting
invalid null arguments).