22 General utilities library [utilities] (original) (raw)

22.4 Tuples [tuple]

22.4.9 Relational operators [tuple.rel]

template<class... TTypes, class... UTypes> constexpr bool operator==(const tuple<TTypes...>& t, const tuple<UTypes...>& u);template<class... TTypes, [_tuple-like_](tuple.like#concept:tuple-like "22.4.3 Concept tuple-like [tuple.like]") UTuple> constexpr bool operator==(const tuple<TTypes...>& t, const UTuple& u);

For the first overload let UTuple be tuple<UTypes...>.

Constraints: For all i, where 0 ≤ i < sizeof...(TTypes),get<i>(t) == get<i>(u) is a valid expression anddecltype(get<i>(t) == get<i>(u)) models boolean-testable.

sizeof...(TTypes) equalstuple_size_v<UTuple>.

Returns: true if get<i>(t) == get<i>(u) for alli, otherwise false.

[Note 1:

If sizeof...(TTypes) equals zero, returns true.

— _end note_]

Remarks:

template<class... TTypes, class... UTypes> constexpr common_comparison_category_t<_synth-three-way-result_<TTypes, UTypes>...> operator<=>(const tuple<TTypes...>& t, const tuple<UTypes...>& u);template<class... TTypes, [_tuple-like_](tuple.like#concept:tuple-like "22.4.3 Concept tuple-like [tuple.like]") UTuple> constexpr common_comparison_category_t<_synth-three-way-result_<TTypes, Elems>...> operator<=>(const tuple<TTypes...>& t, const UTuple& u);

For the second overload, Elems denotes the pack of typestuple_element_t<0, UTuple>,tuple_element_t<1, UTuple>, …,tuple_element_t<tuple_size_v<UTuple> - 1, UTuple>.

Effects: Performs a lexicographical comparison between t and u.

If sizeof...(TTypes) equals zero, returns strong_ordering​::​equal.

Otherwise, equivalent to:if (auto c = synth-three-way(get<0>(t), get<0>(u)); c != 0) return c;return <=> ;where for some ris a tuple containing all but the first element of r.

[Note 2:

The above definition does not require t(or u) to be constructed.

It might not even be possible, as t and u are not required to be copy constructible.

Also, all comparison operator functions are short circuited; they do not perform element accesses beyond what is needed to determine the result of the comparison.

— _end note_]