On Tuesday, 13 June 2017 at 14:51:40 UTC, Steven Schveighoffer wrote:
Yes, I saw that when I was looking (you can see from my reply that you quoted below).

Yes, I had missed that point.


Yes I think it makes sense to have such a comparison function for non-ranges. Yes it probably belongs there, as there are other functions (e.g. swap) that are not specific to ranges in std.algorithm. It should probably not be called cmp, as it will be a default comparison (with the default ordering), although if we did something like:

int cmp(alias pred = "a < b", T)(T t1, T t2) if(!isInputRange!T)
{
   static if(pred == "a < b") { /* do default optimized way */ }
   else { /* more generic mechanism using pred */ }
}

it might be nice. Need to think about the API ramifications.

I retracted my earlier proposal after I had realized my confusion. I had thought that cmp would implement three way range comparison based on three way element comparison. Then I realized that it is based on "a < b" or alike. The latter is certainly useful but I am afraid that this approach does not always lead to optimal performance.

I gathered a few ideas about the subject. I have to sit down and write it down.


I agree. It's a thing also that can be optimized in unintuitive ways. I think Andrei has a nice way to do opCmp for integers that's a simple subtraction and negation or something like that.

I observed that compiler optimizers are pretty smart about comparison of individual integers. I guess that we do not need to be clever, here.

Reply via email to