28
28
_LIBCPP_BEGIN_NAMESPACE_STD
30
template <class _Tp> class _LIBCPP_TYPE_VIS tuple_size;
33
class _LIBCPP_TYPE_VIS tuple_size<const _Tp>
34
: public tuple_size<_Tp> {};
37
class _LIBCPP_TYPE_VIS tuple_size<volatile _Tp>
38
: public tuple_size<_Tp> {};
41
class _LIBCPP_TYPE_VIS tuple_size<const volatile _Tp>
42
: public tuple_size<_Tp> {};
44
template <size_t _Ip, class _Tp> class _LIBCPP_TYPE_VIS tuple_element;
30
template <class _Tp> class _LIBCPP_TYPE_VIS_ONLY tuple_size;
33
class _LIBCPP_TYPE_VIS_ONLY tuple_size<const _Tp>
34
: public tuple_size<_Tp> {};
37
class _LIBCPP_TYPE_VIS_ONLY tuple_size<volatile _Tp>
38
: public tuple_size<_Tp> {};
41
class _LIBCPP_TYPE_VIS_ONLY tuple_size<const volatile _Tp>
42
: public tuple_size<_Tp> {};
44
template <size_t _Ip, class _Tp> class _LIBCPP_TYPE_VIS_ONLY tuple_element;
46
46
template <size_t _Ip, class _Tp>
47
class _LIBCPP_TYPE_VIS tuple_element<_Ip, const _Tp>
47
class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, const _Tp>
50
50
typedef typename add_const<typename tuple_element<_Ip, _Tp>::type>::type type;
53
53
template <size_t _Ip, class _Tp>
54
class _LIBCPP_TYPE_VIS tuple_element<_Ip, volatile _Tp>
54
class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, volatile _Tp>
57
57
typedef typename add_volatile<typename tuple_element<_Ip, _Tp>::type>::type type;
60
60
template <size_t _Ip, class _Tp>
61
class _LIBCPP_TYPE_VIS tuple_element<_Ip, const volatile _Tp>
61
class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, const volatile _Tp>
64
64
typedef typename add_cv<typename tuple_element<_Ip, _Tp>::type>::type type;
67
template <class ..._Tp> class _LIBCPP_TYPE_VIS tuple;
68
template <class _T1, class _T2> struct _LIBCPP_TYPE_VIS pair;
69
template <class _Tp, size_t _Size> struct _LIBCPP_TYPE_VIS array;
67
template <class ..._Tp> class _LIBCPP_TYPE_VIS_ONLY tuple;
68
template <class _T1, class _T2> struct _LIBCPP_TYPE_VIS_ONLY pair;
69
template <class _Tp, size_t _Size> struct _LIBCPP_TYPE_VIS_ONLY array;
71
71
template <class _Tp> struct __tuple_like : false_type {};
164
164
template <class _Hp, class ..._Tp>
165
class _LIBCPP_TYPE_VIS tuple_element<0, __tuple_types<_Hp, _Tp...> >
165
class _LIBCPP_TYPE_VIS_ONLY tuple_element<0, __tuple_types<_Hp, _Tp...> >
168
168
typedef _Hp type;
171
171
template <size_t _Ip, class _Hp, class ..._Tp>
172
class _LIBCPP_TYPE_VIS tuple_element<_Ip, __tuple_types<_Hp, _Tp...> >
172
class _LIBCPP_TYPE_VIS_ONLY tuple_element<_Ip, __tuple_types<_Hp, _Tp...> >
175
175
typedef typename tuple_element<_Ip-1, __tuple_types<_Tp...> >::type type;
178
178
template <class ..._Tp>
179
class _LIBCPP_TYPE_VIS tuple_size<__tuple_types<_Tp...> >
179
class _LIBCPP_TYPE_VIS_ONLY tuple_size<__tuple_types<_Tp...> >
180
180
: public integral_constant<size_t, sizeof...(_Tp)>