
With the RV convention change that I proposed on github (always point before the first element that is out-of-order with respect to its predecessor, rather than the first that is out-of-order with respect to its successor), it would be exactly the same, so I think we may be stuck with this name, even though I agree that it sounds like it should return a bool.
I'm not sure I understand the recommendation. Are you saying that if I write: auto i = is_ordered(f, l, r) Then I should have: is_increasing(f, i); Or, writing using std algorithms: auto i = is_sorted_until(f, l, r) assert(is_sorted(f, i));
If we were starting from scratch my first impulse would be end_of_ordered_prefix(), but that too seems wordier than the ideal.
I think ordered_until is a reasonable name. On a side note, I think the algorithm can be trivially implemented using adjacent_find, and should have the same iterator requirements. return adjacent_find(f, l, not2(pred)); Something like that. On a technical note, an arbitrary predicate doesn't define an ordering. You need a Pred to be a relation, a strict weak order. Also, why not define the algorithm in terms of a natural order? Shouldn't I be able to write is_ordered(f, l) if the iterator's value is totally ordered?