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é

Reply via email to