55 #ifndef _GLIBCXX_UTILITY
56 #define _GLIBCXX_UTILITY 1
58 #pragma GCC system_header
72 #if __cplusplus >= 201103L
76 namespace std _GLIBCXX_VISIBILITY(default)
78 _GLIBCXX_BEGIN_NAMESPACE_VERSION
83 template<std::
size_t _Int,
class _Tp>
87 template<
class _Tp1,
class _Tp2>
88 struct tuple_size<std::pair<_Tp1, _Tp2>>
89 :
public integral_constant<std::size_t, 2> { };
91 template<
class _Tp1,
class _Tp2>
92 struct tuple_element<0, std::pair<_Tp1, _Tp2>>
93 {
typedef _Tp1 type; };
95 template<
class _Tp1,
class _Tp2>
96 struct tuple_element<1, std::pair<_Tp1, _Tp2>>
97 {
typedef _Tp2 type; };
99 template<std::
size_t _Int>
105 template<
typename _Tp1,
typename _Tp2>
106 static constexpr _Tp1&
108 {
return __pair.first; }
110 template<
typename _Tp1,
typename _Tp2>
111 static constexpr _Tp1&&
113 {
return std::forward<_Tp1>(__pair.first); }
115 template<
typename _Tp1,
typename _Tp2>
116 static constexpr
const _Tp1&
118 {
return __pair.first; }
124 template<
typename _Tp1,
typename _Tp2>
125 static constexpr _Tp2&
127 {
return __pair.second; }
129 template<
typename _Tp1,
typename _Tp2>
130 static constexpr _Tp2&&
132 {
return std::forward<_Tp2>(__pair.second); }
134 template<
typename _Tp1,
typename _Tp2>
135 static constexpr
const _Tp2&
137 {
return __pair.second; }
140 template<std::
size_t _Int,
class _Tp1,
class _Tp2>
141 constexpr
typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
143 {
return __pair_get<_Int>::__get(__in); }
145 template<std::
size_t _Int,
class _Tp1,
class _Tp2>
146 constexpr
typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&&
148 {
return __pair_get<_Int>::__move_get(std::move(__in)); }
150 template<std::
size_t _Int,
class _Tp1,
class _Tp2>
151 constexpr
const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
153 {
return __pair_get<_Int>::__const_get(__in); }
155 _GLIBCXX_END_NAMESPACE_VERSION
Struct holding two objects of arbitrary type.