optional feature with contract inheritance? (design question)

Jonathan M Davis jmdavisProg at gmail.com
Sat Feb 27 16:44:35 PST 2010


Lutger wrote:

> Jonathan M Davis wrote:
> 
>> Lutger wrote:
>> 
>>> 
>>> True, it only adds AssertError and that could be replaced with regular
>>> asserts.
>>> 
>>> Thanks.
>> 
>> ??? Regular asserts? When asserts in D fail, they throw an exception of
>> type AssertError. So, unless you're talking about explicitly throwing an
>> AssertError yourself (which seems rather silly to me), I don't know what
>> you could mean by the difference of having an AssertError get thrown from
>> having a "regular" assert.
>> 
>> - Jonathan M Davis
> 
> I wasn't clear, this is what I meant with 'regular' asserts:
> 
> void foo()
> {
>     assert(precondition);
> }
> 
> instead of:
> 
> void foo()
> in
> {
>     assert(precondition);
> }
> body
> { 
> }

Ah, okay. Normally, both would be there in debug mode and neither would be 
there in release mode, though I believe that if you were to use the unittest 
flag in release mode, you'd get the asserts inside functions but not the 
ones in contracts. So, there _could_ be a difference, but in most cases, 
there wouldn't be. Naturally, if you really want to make it so that calling 
a particular function throws an exception, you're going to want to throw 
that exception yourself rather than using an assertion.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list