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.

Reply via email to