On Sat, Sep 26, 2009 at 9:32 PM, 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?
I'm almost sure that C# does this already, and it's a useful behavior. Of course, with nonnull types, the check for null wouldn't even need to exiiiiiiiist.... ;)