putting more smarts into a == b

Frank Benoit keinfarbton at googlemail.com
Sun Sep 27 00:56:17 PDT 2009


Andrei Alexandrescu schrieb:
> 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

What about interfaces?



More information about the Digitalmars-d mailing list