WAT: opCmp and opEquals woes

Daniel Gibson via Digitalmars-d digitalmars-d at puremagic.com
Thu Jul 24 01:18:21 PDT 2014


Am 24.07.2014 01:52, schrieb Andrei Alexandrescu:
>
> I'm unconvinced. Most algorithms that need inequality don't need
> equality comparison; instead, they consider objects for which both !(a <
> b) && !(b < a) in the same "equivalence class" that doesn't assume they
> are actually equal.
>
> Bottom line, inferring opEquals from opCmp seems fishy.
>

You're thinking too algorithm-centric :-P

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.

Cheers,
Daniel


More information about the Digitalmars-d mailing list