**Section:** 23.5.3.8 [tuple.rel], 99 [tr.tuple.rel] **Status:** LEWG
**Submitter:** David Abrahams **Opened:** 2005-11-29 **Last modified:** 2016-02-10

**Priority: **Not Prioritized

**View other** active issues in [tuple.rel].

**View all other** issues in [tuple.rel].

**View all issues with** LEWG status.

**Duplicate of:** 348

**Discussion:**

Where possible, `tuple` comparison operators <,<=,=>, and > ought to be
defined in terms of `std::less` rather than `operator<`, in order to
support comparison of tuples of pointers.

*[
2009-07-28 Reopened by Alisdair. No longer solved by concepts.
]*

*[
2009-10 Santa Cruz:
]*

If we solve this for

tuplewe would have to solve it forpairalgorithms, etc. It is too late to do that at this time. Move to NAD Future.

**Proposed resolution:**

change 6.1.3.5/5 from:

Returns: The result of a lexicographical comparison between t and u. The result is defined as: (bool)(get<0>(t) < get<0>(u)) || (!(bool)(get<0>(u) < get<0>(t)) && ttail < utail), where rtail for some tuple r is a tuple containing all but the first element of r. For any two zero-length tuples e and f, e < f returns false.

to:

Returns: The result of a lexicographical comparison between t and u. For any two zero-length tuples e and f, e < f returns false. Otherwise, the result is defined as: cmp( get<0>(t), get<0>(u)) || (!cmp(get<0>(u), get<0>(t)) && ttail < utail), where rtail for some tuple r is a tuple containing all but the first element of r, and cmp(x,y) is an unspecified function template defined as follows.

Where T is the type of x and U is the type of y:

if T and U are pointer types and T is convertible to U, returns less<U>()(x,y)

otherwise, if T and U are pointer types, returns less<T>()(x,y)

otherwise, returns (bool)(x < y)

*[
Berlin: This issue is much bigger than just tuple (pair, containers,
algorithms). Dietmar will survey and work up proposed wording.
]*

**Rationale:**

Recommend NAD. This will be fixed with the next revision of concepts.

*[
San Francisco:
]*

Solved by N2770.