parent
9f6e9cf71b
commit
e495760140
|
|
@ -22,36 +22,36 @@
|
|||
|
||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||
|
||||
template <class _Tp> class _LIBCPP_TEMPLATE_VIS tuple_size;
|
||||
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS tuple_size;
|
||||
|
||||
#if !defined(_LIBCPP_CXX03_LANG)
|
||||
template <class _Tp, class...>
|
||||
using __enable_if_tuple_size_imp = _Tp;
|
||||
|
||||
template <class _Tp>
|
||||
class _LIBCPP_TEMPLATE_VIS tuple_size<__enable_if_tuple_size_imp<
|
||||
struct _LIBCPP_TEMPLATE_VIS tuple_size<__enable_if_tuple_size_imp<
|
||||
const _Tp,
|
||||
typename enable_if<!is_volatile<_Tp>::value>::type,
|
||||
integral_constant<size_t, sizeof(tuple_size<_Tp>)>>>
|
||||
: public integral_constant<size_t, tuple_size<_Tp>::value> {};
|
||||
|
||||
template <class _Tp>
|
||||
class _LIBCPP_TEMPLATE_VIS tuple_size<__enable_if_tuple_size_imp<
|
||||
struct _LIBCPP_TEMPLATE_VIS tuple_size<__enable_if_tuple_size_imp<
|
||||
volatile _Tp,
|
||||
typename enable_if<!is_const<_Tp>::value>::type,
|
||||
integral_constant<size_t, sizeof(tuple_size<_Tp>)>>>
|
||||
: public integral_constant<size_t, tuple_size<_Tp>::value> {};
|
||||
|
||||
template <class _Tp>
|
||||
class _LIBCPP_TEMPLATE_VIS tuple_size<__enable_if_tuple_size_imp<
|
||||
struct _LIBCPP_TEMPLATE_VIS tuple_size<__enable_if_tuple_size_imp<
|
||||
const volatile _Tp,
|
||||
integral_constant<size_t, sizeof(tuple_size<_Tp>)>>>
|
||||
: public integral_constant<size_t, tuple_size<_Tp>::value> {};
|
||||
|
||||
#else
|
||||
template <class _Tp> class _LIBCPP_TEMPLATE_VIS tuple_size<const _Tp> : public tuple_size<_Tp> {};
|
||||
template <class _Tp> class _LIBCPP_TEMPLATE_VIS tuple_size<volatile _Tp> : public tuple_size<_Tp> {};
|
||||
template <class _Tp> class _LIBCPP_TEMPLATE_VIS tuple_size<const volatile _Tp> : public tuple_size<_Tp> {};
|
||||
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS tuple_size<const _Tp> : public tuple_size<_Tp> {};
|
||||
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS tuple_size<volatile _Tp> : public tuple_size<_Tp> {};
|
||||
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS tuple_size<const volatile _Tp> : public tuple_size<_Tp> {};
|
||||
#endif
|
||||
|
||||
template <size_t _Ip, class _Tp> class _LIBCPP_TEMPLATE_VIS tuple_element;
|
||||
|
|
@ -165,7 +165,7 @@ template <class ..._Tp> class _LIBCPP_TEMPLATE_VIS tuple;
|
|||
template <class... _Tp> struct __tuple_like<tuple<_Tp...> > : true_type {};
|
||||
|
||||
template <class ..._Tp>
|
||||
class _LIBCPP_TEMPLATE_VIS tuple_size<tuple<_Tp...> >
|
||||
struct _LIBCPP_TEMPLATE_VIS tuple_size<tuple<_Tp...> >
|
||||
: public integral_constant<size_t, sizeof...(_Tp)>
|
||||
{
|
||||
};
|
||||
|
|
@ -291,7 +291,7 @@ public:
|
|||
|
||||
|
||||
template <class ..._Tp>
|
||||
class _LIBCPP_TEMPLATE_VIS tuple_size<__tuple_types<_Tp...> >
|
||||
struct _LIBCPP_TEMPLATE_VIS tuple_size<__tuple_types<_Tp...> >
|
||||
: public integral_constant<size_t, sizeof...(_Tp)>
|
||||
{
|
||||
};
|
||||
|
|
|
|||
|
|
@ -91,7 +91,7 @@ template <class T, size_t N>
|
|||
template <class T, size_t N >
|
||||
void swap(array<T,N>& x, array<T,N>& y) noexcept(noexcept(x.swap(y))); // C++17
|
||||
|
||||
template <class T> class tuple_size;
|
||||
template <class T> struct tuple_size;
|
||||
template <size_t I, class T> class tuple_element;
|
||||
template <class T, size_t N> struct tuple_size<array<T, N>>;
|
||||
template <size_t I, class T, size_t N> struct tuple_element<I, array<T, N>>;
|
||||
|
|
@ -430,7 +430,7 @@ swap(array<_Tp, _Size>& __x, array<_Tp, _Size>& __y)
|
|||
}
|
||||
|
||||
template <class _Tp, size_t _Size>
|
||||
class _LIBCPP_TEMPLATE_VIS tuple_size<array<_Tp, _Size> >
|
||||
struct _LIBCPP_TEMPLATE_VIS tuple_size<array<_Tp, _Size> >
|
||||
: public integral_constant<size_t, _Size> {};
|
||||
|
||||
template <size_t _Ip, class _Tp, size_t _Size>
|
||||
|
|
|
|||
|
|
@ -84,8 +84,8 @@ template <class T, class Tuple>
|
|||
constexpr T make_from_tuple(Tuple&& t); // C++17
|
||||
|
||||
// 20.4.1.4, tuple helper classes:
|
||||
template <class T> class tuple_size; // undefined
|
||||
template <class... T> class tuple_size<tuple<T...>>;
|
||||
template <class T> struct tuple_size; // undefined
|
||||
template <class... T> struct tuple_size<tuple<T...>>;
|
||||
template <class T>
|
||||
inline constexpr size_t tuple_size_v = tuple_size<T>::value; // C++17
|
||||
template <size_t I, class T> class tuple_element; // undefined
|
||||
|
|
|
|||
|
|
@ -103,7 +103,7 @@ swap(pair<T1, T2>& x, pair<T1, T2>& y) noexcept(noexcept(x.swap(y)));
|
|||
struct piecewise_construct_t { };
|
||||
inline constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t();
|
||||
|
||||
template <class T> class tuple_size;
|
||||
template <class T> struct tuple_size;
|
||||
template <size_t I, class T> class tuple_element;
|
||||
|
||||
template <class T1, class T2> struct tuple_size<pair<T1, T2> >;
|
||||
|
|
@ -683,7 +683,7 @@ make_pair(_T1 __x, _T2 __y)
|
|||
#endif // _LIBCPP_CXX03_LANG
|
||||
|
||||
template <class _T1, class _T2>
|
||||
class _LIBCPP_TEMPLATE_VIS tuple_size<pair<_T1, _T2> >
|
||||
struct _LIBCPP_TEMPLATE_VIS tuple_size<pair<_T1, _T2> >
|
||||
: public integral_constant<size_t, 2> {};
|
||||
|
||||
template <size_t _Ip, class _T1, class _T2>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
// template <class... Types> class tuple;
|
||||
|
||||
// template <class... Types>
|
||||
// class tuple_size<tuple<Types...>>
|
||||
// struct tuple_size<tuple<Types...>>
|
||||
// : public integral_constant<size_t, sizeof...(Types)> { };
|
||||
|
||||
// UNSUPPORTED: c++98, c++03
|
||||
|
|
@ -26,19 +26,19 @@ struct Dummy2 {};
|
|||
struct Dummy3 {};
|
||||
|
||||
template <>
|
||||
class std::tuple_size<Dummy1> {
|
||||
struct std::tuple_size<Dummy1> {
|
||||
public:
|
||||
static size_t value;
|
||||
};
|
||||
|
||||
template <>
|
||||
class std::tuple_size<Dummy2> {
|
||||
struct std::tuple_size<Dummy2> {
|
||||
public:
|
||||
static void value() {}
|
||||
};
|
||||
|
||||
template <>
|
||||
class std::tuple_size<Dummy3> {};
|
||||
struct std::tuple_size<Dummy3> {};
|
||||
|
||||
int main()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
// template <class... Types> class tuple;
|
||||
|
||||
// template <class... Types>
|
||||
// class tuple_size<tuple<Types...>>
|
||||
// struct tuple_size<tuple<Types...>>
|
||||
// : public integral_constant<size_t, sizeof...(Types)> { };
|
||||
|
||||
// XFAIL: gcc-4.9
|
||||
|
|
@ -31,7 +31,7 @@ struct Dummy1 {};
|
|||
struct Dummy2 {};
|
||||
|
||||
namespace std {
|
||||
template <> class tuple_size<Dummy1> : public integral_constant<size_t, 0> {};
|
||||
template <> struct tuple_size<Dummy1> : public integral_constant<size_t, 0> {};
|
||||
}
|
||||
|
||||
template <class T>
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@
|
|||
// template <class... Types> class tuple;
|
||||
|
||||
// template <class... Types>
|
||||
// class tuple_size<tuple<Types...>>
|
||||
// struct tuple_size<tuple<Types...>>
|
||||
// : public integral_constant<size_t, sizeof...(Types)> { };
|
||||
|
||||
// UNSUPPORTED: c++98, c++03, c++11, c++14
|
||||
|
|
@ -129,7 +129,7 @@ void test_before_tuple_size_specialization() {
|
|||
}
|
||||
|
||||
template <>
|
||||
class std::tuple_size<Test> {
|
||||
struct std::tuple_size<Test> {
|
||||
public:
|
||||
static const size_t value = 1;
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in New Issue