putting more smarts into a == b
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sat Sep 26 18:32:13 PDT 2009
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
More information about the Digitalmars-d
mailing list