On 2012-10-10, 14:24, Marco Leise wrote:
enum Comparison { Before = -1, Same = 0, After = 1, Unordered = NaN, }
a) There is no integer NaN and floating point is a no-go.
The NaN was intended as a joke, and to highlight the fact that you can have opCmp return a float today, and get some of the behavior that floats have.
b) If you mix sortable and unsortable most algorithms fail. Otherwise an enum solution is good, but a bit longer in code: auto rel = a.OpCmp(b); if (rel < 0) ...; else if (rel > 0) ...; else ...; vs. if (rel == Comparison.Before) ...; else if (rel == Comparison.After) ...; else ...; And in many cases right now you can just "return a - b";
Yeah, this last part is what I really like about the current solution. Of course, if we could have ranged enums: enum Comparison { Before < 0, Same = 0, After > 0 } But that's not going to happen (unless someone provides it in a library, of course). -- Simen