57 #ifndef _GLIBCXX_UTILITY
58 #define _GLIBCXX_UTILITY 1
60 #pragma GCC system_header
74 #ifdef __GXX_EXPERIMENTAL_CXX0X__
78 namespace std _GLIBCXX_VISIBILITY(default)
80 _GLIBCXX_BEGIN_NAMESPACE_VERSION
85 template<std::
size_t _Int,
class _Tp>
89 template<
class _Tp1,
class _Tp2>
90 struct tuple_size<std::pair<_Tp1, _Tp2>>
91 :
public integral_constant<std::size_t, 2> { };
93 template<
class _Tp1,
class _Tp2>
94 struct tuple_element<0, std::pair<_Tp1, _Tp2>>
95 {
typedef _Tp1 type; };
97 template<
class _Tp1,
class _Tp2>
98 struct tuple_element<1, std::pair<_Tp1, _Tp2>>
99 {
typedef _Tp2 type; };
101 template<std::
size_t _Int>
107 template<
typename _Tp1,
typename _Tp2>
108 static constexpr _Tp1&
110 {
return __pair.first; }
112 template<
typename _Tp1,
typename _Tp2>
113 static constexpr _Tp1&&
115 {
return std::forward<_Tp1>(__pair.first); }
117 template<
typename _Tp1,
typename _Tp2>
118 static constexpr
const _Tp1&
120 {
return __pair.first; }
126 template<
typename _Tp1,
typename _Tp2>
127 static constexpr _Tp2&
129 {
return __pair.second; }
131 template<
typename _Tp1,
typename _Tp2>
132 static constexpr _Tp2&&
134 {
return std::forward<_Tp2>(__pair.second); }
136 template<
typename _Tp1,
typename _Tp2>
137 static constexpr
const _Tp2&
139 {
return __pair.second; }
142 template<std::
size_t _Int,
class _Tp1,
class _Tp2>
143 constexpr
typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
145 {
return __pair_get<_Int>::__get(__in); }
147 template<std::
size_t _Int,
class _Tp1,
class _Tp2>
148 constexpr
typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&&
150 {
return __pair_get<_Int>::__move_get(std::move(__in)); }
152 template<std::
size_t _Int,
class _Tp1,
class _Tp2>
153 constexpr
const typename tuple_element<_Int, std::pair<_Tp1, _Tp2>>::type&
155 {
return __pair_get<_Int>::__const_get(__in); }
157 _GLIBCXX_END_NAMESPACE_VERSION
Struct holding two objects of arbitrary type.