On Sat, 26 Sep 2009 21:32:13 -0400, Andrei Alexandrescu <seewebsiteforem...@erdani.org> wrote:

Consider two objects a and b with a of class type. Currently, the expression a == b is blindly rewritten as a.opEquals(b). I argue it should be rewritten into a call to an (imaginary/inlined) function equalObjects(a, b), with the following definition:

bool equalObjects(T, U)(T a, U b) if (is(T == class))
{
     static if (is(U == class))
     {
         if (b is null) return a is null;
         if (a is null) return b is null;
     }
     else
     {
         enforce(a !is null);
     }
     return a.opEquals(b);
}

This hoists the identity test outside the opEquals call and also deals with null references. What do you think?


Andrei

I like this. I think optimizing away opEquals for identical objects would also be a good idea:

static if (is(U == class))
        if(a is b || a is null || b  is null) return a is b;
else
        enforce(a !is null);

Reply via email to