On Thursday, 24 July 2014 at 08:18:22 UTC, Daniel Gibson wrote:
When I implement the "comparison operator" for my type, I
expect it to be used for comparisons - and that includes
equality.
If I had the feeling that I could implement == in a more
efficient way, or that I actually want equality to have
different semantics, I'd just implement opEquals as well.
IMHO, everything else would be just confusing to the "average"
user, and if someone wants to be confused by counterintuitive
rules (however much sense they may make in some way) he could
as well just use C++ instead.
But if the general view really is that opEquals should *not* be
opCmp == 0 by default, for performance reasons or whatever,
then please enforce defining opEquals when opCmd is defined, so
it's at least explicit that opCmd does not define equality.
+1
Silently breaking (IMHO reasonable) expectations is bad.