Issue with contracts and assertions
Andre via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri May 23 07:38:31 PDT 2014
Am 23.05.2014 16:34, schrieb Rene Zwanenburg:
> On Friday, 23 May 2014 at 13:45:07 UTC, Andre wrote:
>> Hi,
>>
>> for the attached code I noticed some strange behaviors.
>> I compile the programm with: dmd main -unittest
>> The expected assertion of the method c pre condition is
>> not raised.
>> It is only raised if class A not implements interface I.
>>
>> On the otherside the commented assertion in the invariant is working
>> fine.
>>
>> Is this a bug?
>>
>> Kind regards
>> André
>>
>>
>> interface I {
>> void c();
>> }
>>
>> class A : I {
>> invariant() {
>> //assert(false, "Assert INVARIANT"); // Working
>> }
>>
>> void c()
>> in {
>> assert(false, "Assert IN");
>> }
>> body {
>>
>> }
>> }
>>
>> unittest {
>> A a = new A();
>> a.c();
>> }
>>
>> void main(){}
>
> I'm not sure. An implementation shouldn't be allowed to have stricter
> pre-conditions than it's base class or interface. On the other hand it
> should be able to relax them.
In case there is a reason that the assertion is not run,
if feels very dangerous for me that all assertions can be
disabled by mistake just by adding an interface to a class.
At least a compiler messsage should be thrown to warn about
"useless" assertions
Kind regards
André
More information about the Digitalmars-d-learn
mailing list