Comparison operator overloading

Mike Parker via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Dec 7 05:31:52 PST 2015


On Monday, 7 December 2015 at 11:49:51 UTC, Dominikus Dittes 
Scherkl wrote:
> On Sunday, 6 December 2015 at 15:01:08 UTC, cym13 wrote:
>> Don't use opCmp, all binary operators should be overriden 
>> using opBinary. For more information I recommend this page 
>> http://ddili.org/ders/d.en/operator_overloading.html
>
> Why should we don't use opCmp() ?
> I can't see any recommendation about this in the cited book. In

That chapter actually shows quite clearly in the table in the 
Binary Operators section that opCmp is used for <, <=, >, and >=, 
which is also exactly what the language reference says. There's 
also another section further down the page that covers opCmp 
explicitly. I have no idea what cym13 is looking at.

> On the other hand the chapter also states that opCmp() should 
> always return "int" - which is a bad idea if you e.g. want to 
> provide a "NaN" value in your type. For that "float" is a much 
> better return type for opCmp().
> So you should not weight in gold for the words in the cited 
> book, I think.

This is not something the author is just making up. opCmp is 
expected to return int because of the way the compiler rewrites 
comparison expressions. See the table at [1]. It wouldn't do to 
return NaN from opCmp.

[1] http://dlang.org/spec/operatoroverloading.html#compare


More information about the Digitalmars-d-learn mailing list