Is this reasonable?

monarch_dodra monarchdodra at gmail.com
Fri Dec 6 09:28:09 PST 2013


On Thursday, 5 December 2013 at 18:26:48 UTC, Jonathan M Davis 
wrote:
> To be fair, you can't solve the problem automatically. It's 
> fundamentally
> wrong to compare signed and unsigned values, and doing either 
> the conversion
> to unsigned or to signed could be wrong (or both could be 
> wrong), depending on
> the values.

*Actually*... that's not exactly true.

std.algorithm.max and std.algorithm.min actually do it perfectly 
well.

It is completely feaseable to imagine having an:
std.functional.less(T, U)(T t, U u){}

Which could work for *any* (compatible) type, including those 
with mixed signed-ness.

The only "issue" is that if the signs *are* mixed, the comparison 
is a *bit* more costly. It involved *two* comparisons, and a 
boolean condition:
https://github.com/D-Programming-Language/phobos/blob/ab34fb92addca61755474df04a0d0d6e0f1148a2/std/algorithm.d#L6698

Truth be told, "a < b" could work correctly 100% of the time, no 
question asked, if the *language* wanted to. The (2) problems 
would be:
1) Breaks backward compatibility with C and C++.
2) Higher (and hidden) comparison costs.

Try to convince Walter that these are worth it XD !


More information about the Digitalmars-d-learn mailing list