I've noticed that, for DMD 2.037, we've started mandating that the input parameter for struct opEquals be const ref T. This seemed like a good idea initially, but it creates the horribly leaky abstraction that the right-hand argument to opEquals can't be an rvalue. Example:
struct Foo { bool opEquals(const ref Foo rhs) const { // Only signature // that compiles. return true; } } Foo getFoo() { return Foo(); } void main() { Foo foo = getFoo(); bool isEqual = foo == getFoo(); } Error: Foo.opEquals type signature should be const bool(ref const(Foo)) not const bool(Foo rhs) Will this be getting fixed witht he new operator overloading?