On Thursday, 19 September 2013 at 17:25:37 UTC, Andrei Alexandrescu wrote:
Well I have bad news. Consider:

interface A
{
    void fun(int x) out { assert(x == 42); }
}

class B : A
{
    void fun(int x) { x = 42; }
}

void main()
{
    A a = new B;
    a.fun(0);
}

This fails at run time, meaning in this particular case x will have the value before the call.

Is this by design? That seems inconsistent to me, but maybe I'm missing something.

This passes btw:

struct S
{
    int y;
}

interface A
{
    void fun(S x) out { assert(x.y == 42); }
}

class B : A
{
    void fun(S x) { x.y = 42; }
}

void main()
{
    A a = new B;
    a.fun(S(0));
}

So, sometimes it uses the old value and sometimes it uses the new value?

Reply via email to