On 2/4/2012 12:45 PM, Timon Gehr wrote:
[...]
Pure does not imply const in D.
[...]

I think this is a language defect:

struct Foo
{
    int computed() pure { return x * y; }
    int wrapper() const { return computed() + 5; }

    int x;
    int y;
}

void main()
{
}

src\Bug2.d(4): Error: mutable method Bug2.Foo.computed is not callable using a const object

Surprisingly, this is legal, and "fixes" the issue:

    int computed() const pure { return x * y; }

I say this is a bug because of what a "non-const pure" method would be: a method which could somehow modify 'this', or its members. I hope we all agree that such a method is not, in fact, pure. Let's try, just to make sure:

    int computed() pure { return ++x * y; }

Oh noes...this is allowed!!! Surely this is wrong. Suppose we rewrote the method like so:

    int computed(ref int x, int y) pure { return ++x * y; }

Would anyone say this is legit?

Dave

Reply via email to