On Saturday, September 1, 2018 8:31:36 AM MDT H. S. Teoh via Digitalmars-d wrote: > This change may also address the current hackish implementation of > subclass contracts (which involves catching Errors, an arguably > dangerous thing to do), though I'm not 100% sure.
AFAIK, there's absolutely nothing required to fix that other than just implementing it. As I understand it, the assertions act normally and thus throw AssertErrors, but there should be no technical reason why they couldn't be transformed into something else. e.g. in { assert(foo < 7); } could be lowered to something like in { if(foo < 7) return false; return true; } The only differences would then be if any functions called in the contract resulted in an AssertError (sinc that would no longer count as a contract failure - which is arguably a bug fix) and that explicitly throwing an AssertError wouldn't work anymore - but I expect that that's rare enough that it wouldn't be all that big a deal. - Jonathan M Davis