Polymorphic, Defaulted Equality

I recently ran into an interesting bug that I thought was worth sharing. The Setup We have an abstract base class, with polymorphic equality: struct Base { virtual ~Base() = default; virtual auto operator==(Base const&) const -> bool = 0; }; And then we have a bunch of derived classes from this abstract base that implement equality in the expected way. If the two objects are...