Lines Matching refs:tuple
16 tuple synopsis
22 class tuple {
24 explicit(see-below) constexpr tuple();
25 explicit(see-below) tuple(const T&...); // constexpr in C++14
27 explicit(see-below) tuple(U&&...); // constexpr in C++14
28 tuple(const tuple&) = default;
29 tuple(tuple&&) = default;
32 constexpr explicit(see-below) tuple(tuple<UTypes...>&); // C++23
34 explicit(see-below) tuple(const tuple<U...>&); // constexpr in C++14
36 explicit(see-below) tuple(tuple<U...>&&); // constexpr in C++14
38 constexpr explicit(see-below) tuple(const tuple<UTypes...>&&); // C++23
41 constexpr explicit(see-below) tuple(pair<U1, U2>&); // iff sizeof...(Types) == 2 // C++23
43 explicit(see-below) tuple(const pair<U1, U2>&); // iff sizeof...(T) == 2 // constexpr in C++14
45 explicit(see-below) tuple(pair<U1, U2>&&); // iff sizeof...(T) == 2 // constexpr in C++14
47 constexpr explicit(see-below) tuple(const pair<U1, U2>&&); // iff sizeof...(Types) == 2 // C++23
51 tuple(allocator_arg_t, const Alloc& a);
53 explicit(see-below) tuple(allocator_arg_t, const Alloc& a, const T&...); // constexpr in C++20
55 explicit(see-below) tuple(allocator_arg_t, const Alloc& a, U&&...); // constexpr in C++20
57 tuple(allocator_arg_t, const Alloc& a, const tuple&); // constexpr in C++20
59 tuple(allocator_arg_t, const Alloc& a, tuple&&); // constexpr in C++20
62 tuple(allocator_arg_t, const Alloc& a, tuple<UTypes...>&); // C++23
64 explicit(see-below) tuple(allocator_arg_t, const Alloc& a, const tuple<U...>&); // constexpr in C++20
66 explicit(see-below) tuple(allocator_arg_t, const Alloc& a, tuple<U...>&&); // constexpr in C++20
69 tuple(allocator_arg_t, const Alloc& a, const tuple<UTypes...>&&); // C++23
72 tuple(allocator_arg_t, const Alloc& a, pair<U1, U2>&); // C++23
74 explicit(see-below) tuple(allocator_arg_t, const Alloc& a, const pair<U1, U2>&); // constexpr in C++20
76 explicit(see-below) tuple(allocator_arg_t, const Alloc& a, pair<U1, U2>&&); // constexpr in C++20
79 tuple(allocator_arg_t, const Alloc& a, const pair<U1, U2>&&); // C++23
81 tuple& operator=(const tuple&); // constexpr in C++20
82 constexpr const tuple& operator=(const tuple&) const; // C++23
83 tuple& operator=(tuple&&) noexcept(is_nothrow_move_assignable_v<T> && ...); // constexpr in C++20
84 constexpr const tuple& operator=(tuple&&) const; // C++23
86 tuple& operator=(const tuple<U...>&); // constexpr in C++20
88 constexpr const tuple& operator=(const tuple<UTypes...>&) const; // C++23
90 tuple& operator=(tuple<U...>&&); // constexpr in C++20
92 constexpr const tuple& operator=(tuple<UTypes...>&&) const; // C++23
94 tuple& operator=(const pair<U1, U2>&); // iff sizeof...(T) == 2 // constexpr in C++20
96 constexpr const tuple& operator=(const pair<U1, U2>&) const; // iff sizeof...(Types) == 2 // C++23
98 tuple& operator=(pair<U1, U2>&&); // iff sizeof...(T) == 2 // constexpr in C++20
100 constexpr const tuple& operator=(pair<U1, U2>&&) const; // iff sizeof...(Types) == 2 // C++23
103 tuple& operator=(array<U, N> const&) // iff sizeof...(T) == N, EXTENSION
105 tuple& operator=(array<U, N>&&) // iff sizeof...(T) == N, EXTENSION
107 void swap(tuple&) noexcept(AND(swap(declval<T&>(), declval<T&>())...)); // constexpr in C++20
108 constexpr void swap(const tuple&) const noexcept(see-below); // C++23
113 requires requires { typename tuple<common_reference_t<TQual<TTypes>, UQual<UTypes>>...>; }
114 struct basic_common_reference<tuple<TTypes...>, tuple<UTypes...>, TQual, UQual> {
115 using type = tuple<common_reference_t<TQual<TTypes>, UQual<UTypes>>...>;
119 requires requires { typename tuple<common_type_t<TTypes, UTypes>...>; }
120 struct common_type<tuple<TTypes...>, tuple<UTypes...>> {
121 using type = tuple<common_type_t<TTypes, UTypes>...>;
125 tuple(T...) -> tuple<T...>; // since C++17
127 tuple(pair<T1, T2>) -> tuple<T1, T2>; // since C++17
129 tuple(allocator_arg_t, Alloc, T...) -> tuple<T...>; // since C++17
131 tuple(allocator_arg_t, Alloc, pair<T1, T2>) -> tuple<T1, T2>; // since C++17
133 tuple(allocator_arg_t, Alloc, tuple<T...>) -> tuple<T...>; // since C++17
142 template <class... T> tuple<V...> make_tuple(T&&...); // constexpr in C++14
143 template <class... T> tuple<ATypes...> forward_as_tuple(T&&...) noexcept; // constexpr in C++14
144 template <class... T> tuple<T&...> tie(T&...) noexcept; // constexpr in C++14
145 template <class... Tuples> tuple<CTypes...> tuple_cat(Tuples&&... tpls); // constexpr in C++14
147 // [tuple.apply], calling a function with a tuple of arguments:
153 // 20.4.1.4, tuple helper classes:
155 template <class... T> struct tuple_size<tuple<T...>>;
159 template <size_t I, class... T> struct tuple_element<I, tuple<T...>>;
165 typename tuple_element<I, tuple<T...>>::type&
166 get(tuple<T...>&) noexcept; // constexpr in C++14
168 const typename tuple_element<I, tuple<T...>>::type&
169 get(const tuple<T...>&) noexcept; // constexpr in C++14
171 typename tuple_element<I, tuple<T...>>::type&&
172 get(tuple<T...>&&) noexcept; // constexpr in C++14
174 const typename tuple_element<I, tuple<T...>>::type&&
175 get(const tuple<T...>&&) noexcept; // constexpr in C++14
178 constexpr T1& get(tuple<T...>&) noexcept; // C++14
180 constexpr const T1& get(const tuple<T...>&) noexcept; // C++14
182 constexpr T1&& get(tuple<T...>&&) noexcept; // C++14
184 constexpr const T1&& get(const tuple<T...>&&) noexcept; // C++14
187 template<class... T, class... U> bool operator==(const tuple<T...>&, const tuple<U...>&); // constexpr in C++14
188 template<class... T, class... U> bool operator<(const tuple<T...>&, const tuple<U...>&); // constexpr in C++14, removed in C++20
189 template<class... T, class... U> bool operator!=(const tuple<T...>&, const tuple<U...>&); // constexpr in C++14, removed in C++20
190 template<class... T, class... U> bool operator>(const tuple<T...>&, const tuple<U...>&); // constexpr in C++14, removed in C++20
191 template<class... T, class... U> bool operator<=(const tuple<T...>&, const tuple<U...>&); // constexpr in C++14, removed in C++20
192 template<class... T, class... U> bool operator>=(const tuple<T...>&, const tuple<U...>&); // constexpr in C++14, removed in C++20
195 operator<=>(const tuple<T...>&, const tuple<U...>&); // since C++20
198 struct uses_allocator<tuple<Types...>, Alloc>;
202 swap(tuple<Types...>& x, tuple<Types...>& y) noexcept(noexcept(x.swap(y)));
205 constexpr void swap(const tuple<Types...>& x, const tuple<Types...>& y) noexcept(see-below); // C++23
214 # include <__cxx03/tuple>
223 # include <__fwd/tuple.h>
274 // [tuple.syn]
323 static_assert(!is_reference<_Hp>::value, "Attempted to default construct a reference element in a tuple");
328 static_assert(!is_reference<_Hp>::value, "Attempted to default construct a reference element in a tuple");
334 static_assert(!is_reference<_Hp>::value, "Attempted to default construct a reference element in a tuple");
339 static_assert(!is_reference<_Hp>::value, "Attempted to default construct a reference element in a tuple");
364 static_assert(!is_reference<_Hp>::value, "Attempted to uses-allocator construct a reference element in a tuple");
371 static_assert(!is_reference<_Hp>::value, "Attempted to uses-allocator construct a reference element in a tuple");
492 template <class _Tuple, __enable_if_t<__tuple_constructible<_Tuple, tuple<_Tp...> >::value, int> = 0>
501 template <class _Alloc, class _Tuple, __enable_if_t<__tuple_constructible<_Tuple, tuple<_Tp...> >::value, int> = 0>
538 class _LIBCPP_TEMPLATE_VIS tuple {
544 friend _LIBCPP_CONSTEXPR_SINCE_CXX14 typename tuple_element<_Jp, tuple<_Up...> >::type& get(tuple<_Up...>&) _NOEXCEPT;
546 friend _LIBCPP_CONSTEXPR_SINCE_CXX14 const typename tuple_element<_Jp, tuple<_Up...> >::type&
547 get(const tuple<_Up...>&) _NOEXCEPT;
549 friend _LIBCPP_CONSTEXPR_SINCE_CXX14 typename tuple_element<_Jp, tuple<_Up...> >::type&&
550 get(tuple<_Up...>&&) _NOEXCEPT;
552 friend _LIBCPP_CONSTEXPR_SINCE_CXX14 const typename tuple_element<_Jp, tuple<_Up...> >::type&&
553 get(const tuple<_Up...>&&) _NOEXCEPT;
557 __conditional_t<_And<__libcpp_is_trivially_relocatable<_Tp>...>::value, tuple, void>;
559 // [tuple.cnstr]
561 // tuple() constructors (including allocator_arg_t variants)
566 tuple() noexcept(_And<is_nothrow_default_constructible<_Tp>...>::value) {}
573 tuple(allocator_arg_t, _Alloc const& __a)
581 // tuple(const T&...) constructors (including allocator_arg_t variants)
586 tuple(const _Tp&... __t) noexcept(_And<is_nothrow_copy_constructible<_Tp>...>::value)
588 typename __make_tuple_types<tuple, sizeof...(_Tp)>::type(),
590 typename __make_tuple_types<tuple, 0>::type(),
598 tuple(allocator_arg_t, const _Alloc& __a, const _Tp&... __t)
602 typename __make_tuple_types<tuple, sizeof...(_Tp)>::type(),
604 typename __make_tuple_types<tuple, 0>::type(),
607 // tuple(U&& ...) constructors (including allocator_arg_t variants)
611 struct _IsThisTuple<_Up> : is_same<__remove_cvref_t<_Up>, tuple> {};
623 tuple(_Up&&... __u) noexcept(_And<is_nothrow_constructible<_Tp, _Up>...>::value)
625 typename __make_tuple_types<tuple, sizeof...(_Up)>::type(),
627 typename __make_tuple_types<tuple, sizeof...(_Tp), sizeof...(_Up)>::type(),
635 tuple(allocator_arg_t, const _Alloc& __a, _Up&&... __u)
639 typename __make_tuple_types<tuple, sizeof...(_Up)>::type(),
641 typename __make_tuple_types<tuple, sizeof...(_Tp), sizeof...(_Up)>::type(),
645 tuple(const tuple&) = default;
646 tuple(tuple&&) = default;
651 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple(allocator_arg_t, const _Alloc& __alloc, const tuple& __t)
657 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple(allocator_arg_t, const _Alloc& __alloc, tuple&& __t)
660 // tuple(const tuple<U...>&) constructors (including allocator_arg_t variants)
668 tuple<_Up...>,
675 _Not<is_same<_OtherTuple, const tuple&> >,
676 _Not<is_same<_OtherTuple, tuple&&> >,
687 template <class... _Up, __enable_if_t< _And< _EnableCtorFromUTypesTuple<const tuple<_Up...>&> >::value, int> = 0>
690 tuple(const tuple<_Up...>& __t) noexcept(_And<is_nothrow_constructible<_Tp, const _Up&>...>::value)
695 __enable_if_t< _And< _EnableCtorFromUTypesTuple<const tuple<_Up...>&> >::value, int> = 0>
698 tuple(allocator_arg_t, const _Alloc& __a, const tuple<_Up...>& __t)
702 // tuple(tuple<U...>&) constructors (including allocator_arg_t variants)
704 template <class... _Up, enable_if_t< _EnableCtorFromUTypesTuple<tuple<_Up...>&>::value>* = nullptr>
705 _LIBCPP_HIDE_FROM_ABI constexpr explicit(!_Lazy<_And, is_convertible<_Up&, _Tp>...>::value) tuple(tuple<_Up...>& __t)
708 template <class _Alloc, class... _Up, enable_if_t< _EnableCtorFromUTypesTuple<tuple<_Up...>&>::value>* = nullptr>
710 tuple(allocator_arg_t, const _Alloc& __alloc, tuple<_Up...>& __t)
714 // tuple(tuple<U...>&&) constructors (including allocator_arg_t variants)
715 template <class... _Up, __enable_if_t< _And< _EnableCtorFromUTypesTuple<tuple<_Up...>&&> >::value, int> = 0>
717 tuple(tuple<_Up...>&& __t) noexcept(_And<is_nothrow_constructible<_Tp, _Up>...>::value)
722 __enable_if_t< _And< _EnableCtorFromUTypesTuple<tuple<_Up...>&&> >::value, int> = 0>
724 tuple(allocator_arg_t, const _Alloc& __a, tuple<_Up...>&& __t)
728 // tuple(const tuple<U...>&&) constructors (including allocator_arg_t variants)
730 template <class... _Up, enable_if_t< _EnableCtorFromUTypesTuple<const tuple<_Up...>&&>::value>* = nullptr>
732 tuple(const tuple<_Up...>&& __t)
737 enable_if_t< _EnableCtorFromUTypesTuple<const tuple<_Up...>&&>::value>* = nullptr>
739 tuple(allocator_arg_t, const _Alloc& __alloc, const tuple<_Up...>&& __t)
743 // tuple(const pair<U1, U2>&) constructors (including allocator_arg_t variants)
748 class _Tuple = tuple>
752 struct _CtorPredicateFromPair<_Pred, _Pair, pair<_Up1, _Up2>, tuple<_Tp1, _Tp2> >
761 template <class _Pair, class _DecayedPair = __remove_cvref_t<_Pair>, class _Tuple = tuple>
765 struct _BothImplicitlyConvertible<_Pair, pair<_Up1, _Up2>, tuple<_Tp1, _Tp2> >
774 tuple(const pair<_Up1, _Up2>& __p) noexcept(_NothrowConstructibleFromPair<const pair<_Up1, _Up2>&>::value)
784 tuple(allocator_arg_t, const _Alloc& __a, const pair<_Up1, _Up2>& __p)
788 // tuple(pair<U1, U2>&) constructors (including allocator_arg_t variants)
792 tuple(pair<_U1, _U2>& __p)
800 tuple(allocator_arg_t, const _Alloc& __alloc, pair<_U1, _U2>& __p)
804 // tuple(pair<U1, U2>&&) constructors (including allocator_arg_t variants)
812 tuple(pair<_Up1, _Up2>&& __p) noexcept(_NothrowConstructibleFromPair<pair<_Up1, _Up2>&&>::value)
822 tuple(allocator_arg_t, const _Alloc& __a, pair<_Up1, _Up2>&& __p)
826 // tuple(const pair<U1, U2>&&) constructors (including allocator_arg_t variants)
830 tuple(const pair<_U1, _U2>&& __p)
838 tuple(allocator_arg_t, const _Alloc& __alloc, const pair<_U1, _U2>&& __p)
842 // [tuple.assign]
843 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple&
844 operator=(_If<_And<is_copy_assignable<_Tp>...>::value, tuple, __nat> const& __tuple) noexcept(
851 _LIBCPP_HIDE_FROM_ABI constexpr const tuple& operator=(tuple const& __tuple) const
858 _LIBCPP_HIDE_FROM_ABI constexpr const tuple& operator=(tuple&& __tuple) const
867 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple&
868 operator=(_If<_And<is_move_assignable<_Tp>...>::value, tuple, __nat>&& __tuple) noexcept(
879 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple&
880 operator=(tuple<_Up...> const& __tuple) noexcept(_And<is_nothrow_assignable<_Tp&, _Up const&>...>::value) {
888 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple&
889 operator=(tuple<_Up...>&& __tuple) noexcept(_And<is_nothrow_assignable<_Tp&, _Up>...>::value) {
899 _LIBCPP_HIDE_FROM_ABI constexpr const tuple& operator=(const tuple<_UTypes...>& __u) const {
907 _LIBCPP_HIDE_FROM_ABI constexpr const tuple& operator=(tuple<_UTypes...>&& __u) const {
918 class _Tuple = tuple>
922 struct _AssignPredicateFromPair<_Pred, _Const, _Pair, pair<_Up1, _Up2>, tuple<_Tp1, _Tp2> >
934 _LIBCPP_HIDE_FROM_ABI constexpr const tuple& operator=(const pair<_U1, _U2>& __pair) const
942 _LIBCPP_HIDE_FROM_ABI constexpr const tuple& operator=(pair<_U1, _U2>&& __pair) const
953 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple&
961 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple&
973 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple&
984 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple&
994 // [tuple.swap]
996 swap(tuple& __t) noexcept(__all<__is_nothrow_swappable_v<_Tp>...>::value) {
1001 _LIBCPP_HIDE_FROM_ABI constexpr void swap(const tuple& __t) const
1009 class _LIBCPP_TEMPLATE_VIS tuple<> {
1011 constexpr tuple() _NOEXCEPT = default;
1013 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple(allocator_arg_t, const _Alloc&) _NOEXCEPT {}
1015 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple(allocator_arg_t, const _Alloc&, const tuple&) _NOEXCEPT {}
1017 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple(array<_Up, 0>) _NOEXCEPT {}
1019 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple(allocator_arg_t, const _Alloc&, array<_Up, 0>) _NOEXCEPT {}
1020 _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void swap(tuple&) _NOEXCEPT {}
1022 _LIBCPP_HIDE_FROM_ABI constexpr void swap(const tuple&) const noexcept {}
1028 requires requires { typename tuple<common_reference_t<_TQual<_TTypes>, _UQual<_UTypes>>...>; }
1029 struct basic_common_reference<tuple<_TTypes...>, tuple<_UTypes...>, _TQual, _UQual> {
1030 using type = tuple<common_reference_t<_TQual<_TTypes>, _UQual<_UTypes>>...>;
1034 requires requires { typename tuple<common_type_t<_TTypes, _UTypes>...>; }
1035 struct common_type<tuple<_TTypes...>, tuple<_UTypes...>> {
1036 using type = tuple<common_type_t<_TTypes, _UTypes>...>;
1042 tuple(_Tp...) -> tuple<_Tp...>;
1044 tuple(pair<_Tp1, _Tp2>) -> tuple<_Tp1, _Tp2>;
1046 tuple(allocator_arg_t, _Alloc, _Tp...) -> tuple<_Tp...>;
1048 tuple(allocator_arg_t, _Alloc, pair<_Tp1, _Tp2>) -> tuple<_Tp1, _Tp2>;
1050 tuple(allocator_arg_t, _Alloc, tuple<_Tp...>) -> tuple<_Tp...>;
1055 swap(tuple<_Tp...>& __t, tuple<_Tp...>& __u) noexcept(__all<__is_nothrow_swappable_v<_Tp>...>::value) {
1062 swap(const tuple<_Tp...>& __lhs,
1063 const tuple<_Tp...>& __rhs) noexcept(__all<is_nothrow_swappable_v<const _Tp>...>::value) {
1071 inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 typename tuple_element<_Ip, tuple<_Tp...> >::type&
1072 get(tuple<_Tp...>& __t) _NOEXCEPT {
1073 using type _LIBCPP_NODEBUG = typename tuple_element<_Ip, tuple<_Tp...> >::type;
1078 inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const typename tuple_element<_Ip, tuple<_Tp...> >::type&
1079 get(const tuple<_Tp...>& __t) _NOEXCEPT {
1080 using type _LIBCPP_NODEBUG = typename tuple_element<_Ip, tuple<_Tp...> >::type;
1085 inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 typename tuple_element<_Ip, tuple<_Tp...> >::type&&
1086 get(tuple<_Tp...>&& __t) _NOEXCEPT {
1087 using type _LIBCPP_NODEBUG = typename tuple_element<_Ip, tuple<_Tp...> >::type;
1092 inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const typename tuple_element<_Ip, tuple<_Tp...> >::type&&
1093 get(const tuple<_Tp...>&& __t) _NOEXCEPT {
1094 using type _LIBCPP_NODEBUG = typename tuple_element<_Ip, tuple<_Tp...> >::type;
1101 inline _LIBCPP_HIDE_FROM_ABI constexpr _T1& get(tuple<_Args...>& __tup) noexcept {
1106 inline _LIBCPP_HIDE_FROM_ABI constexpr _T1 const& get(tuple<_Args...> const& __tup) noexcept {
1111 inline _LIBCPP_HIDE_FROM_ABI constexpr _T1&& get(tuple<_Args...>&& __tup) noexcept {
1116 inline _LIBCPP_HIDE_FROM_ABI constexpr _T1 const&& get(tuple<_Args...> const&& __tup) noexcept {
1125 inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 tuple<_Tp&...> tie(_Tp&... __t) _NOEXCEPT {
1126 return tuple<_Tp&...>(__t...);
1130 inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 tuple<__unwrap_ref_decay_t<_Tp>...>
1132 return tuple<__unwrap_ref_decay_t<_Tp>...>(std::forward<_Tp>(__t)...);
1136 inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 tuple<_Tp&&...> forward_as_tuple(_Tp&&... __t) _NOEXCEPT {
1137 return tuple<_Tp&&...>(std::forward<_Tp>(__t)...);
1158 operator==(const tuple<_Tp...>& __x, const tuple<_Up...>& __y) {
1169 __tuple_compare_three_way(const tuple<_Tp...>& __x, const tuple<_Up...>& __y, index_sequence<_Is...>) {
1179 operator<=>(const tuple<_Tp...>& __x, const tuple<_Up...>& __y) {
1187 operator!=(const tuple<_Tp...>& __x, const tuple<_Up...>& __y) {
1214 operator<(const tuple<_Tp...>& __x, const tuple<_Up...>& __y) {
1221 operator>(const tuple<_Tp...>& __x, const tuple<_Up...>& __y) {
1227 operator>=(const tuple<_Tp...>& __x, const tuple<_Up...>& __y) {
1233 operator<=(const tuple<_Tp...>& __x, const tuple<_Up...>& __y) {
1245 struct __tuple_cat_type<tuple<_Ttypes...>, __tuple_types<_Utypes...> > {
1246 using type _LIBCPP_NODEBUG = tuple<_Ttypes..., _Utypes...>;
1253 struct __tuple_cat_return_1<tuple<_Types...>, true, _Tuple0> {
1255 typename __tuple_cat_type< tuple<_Types...>,
1260 struct __tuple_cat_return_1<tuple<_Types...>, true, _Tuple0, _Tuple1, _Tuples...>
1262 typename __tuple_cat_type< tuple<_Types...>,
1273 : public __tuple_cat_return_1<tuple<>,
1280 using type _LIBCPP_NODEBUG = tuple<>;
1283 inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 tuple<> tuple_cat() { return tuple<>(); }
1289 struct __tuple_cat_return_ref_imp<tuple<_Types...>, __tuple_indices<_I0...>, _Tuple0> {
1291 typedef tuple<_Types..., __copy_cvref_t<_Tuple0, typename tuple_element<_I0, _T0>::type>&&...> type;
1295 struct __tuple_cat_return_ref_imp<tuple<_Types...>, __tuple_indices<_I0...>, _Tuple0, _Tuple1, _Tuples...>
1297 tuple<_Types...,
1306 tuple<>,
1315 struct __tuple_cat<tuple<_Types...>, __tuple_indices<_I0...>, __tuple_indices<_J0...> > {
1318 typename __tuple_cat_return_ref<tuple<_Types...>&&, _Tuple0&&>::type
1319 operator()(tuple<_Types...> __t, _Tuple0&& __t0) {
1327 typename __tuple_cat_return_ref<tuple<_Types...>&&, _Tuple0&&, _Tuple1&&, _Tuples&&...>::type
1328 operator()(tuple<_Types...> __t, _Tuple0&& __t0, _Tuple1&& __t1, _Tuples&&... __tpls) {
1332 return __tuple_cat<tuple<_Types..., __copy_cvref_t<_Tuple0, typename tuple_element<_J0, _T0>::type>&&...>,
1358 __tuple_cat<tuple<>, __tuple_indices<>, _T0Indices>()(
1359 tuple<>(), std::forward<_Tuple0>(__t0), std::forward<_Tuples>(__tpls)...),
1364 struct _LIBCPP_TEMPLATE_VIS uses_allocator<tuple<_Tp...>, _Alloc> : true_type {};