jdoerrie created this revision. jdoerrie added a reviewer: mclow.lists. Herald added subscribers: libcxx-commits, ldionne.
Similarly to https://reviews.llvm.org/rL350972 this revision changes std::tuple_element from class to struct. Fixes PR#41331. Repository: rCXX libc++ https://reviews.llvm.org/D60069 Files: include/__tuple include/array include/span include/tuple include/utility test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple.include.array.pass.cpp test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_element.fail.cpp test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_element.pass.cpp test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_structured_bindings.pass.cpp
Index: test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_structured_bindings.pass.cpp =================================================================== --- test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_structured_bindings.pass.cpp +++ test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_size_structured_bindings.pass.cpp @@ -116,7 +116,7 @@ int get(Test const&) { static_assert(N == 0, ""); return -1; } template <> -class std::tuple_element<0, Test> { +struct std::tuple_element<0, Test> { public: typedef int type; }; Index: test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_element.pass.cpp =================================================================== --- test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_element.pass.cpp +++ test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_element.pass.cpp @@ -11,7 +11,7 @@ // template <class... Types> class tuple; // template <size_t I, class... Types> -// class tuple_element<I, tuple<Types...> > +// struct tuple_element<I, tuple<Types...> > // { // public: // typedef Ti type; Index: test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_element.fail.cpp =================================================================== --- test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_element.fail.cpp +++ test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple_element.fail.cpp @@ -11,7 +11,7 @@ // template <class... Types> class tuple; // template <size_t I, class... Types> -// class tuple_element<I, tuple<Types...> > +// struct tuple_element<I, tuple<Types...> > // { // public: // typedef Ti type; Index: test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple.include.array.pass.cpp =================================================================== --- test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple.include.array.pass.cpp +++ test/std/utilities/tuple/tuple.tuple/tuple.helper/tuple.include.array.pass.cpp @@ -11,7 +11,7 @@ // template <class... Types> class tuple; // template <size_t I, class... Types> -// class tuple_element<I, tuple<Types...> > +// struct tuple_element<I, tuple<Types...> > // { // public: // typedef Ti type; Index: include/utility =================================================================== --- include/utility +++ include/utility @@ -103,7 +103,7 @@ inline constexpr piecewise_construct_t piecewise_construct = piecewise_construct_t(); template <class T> struct tuple_size; -template <size_t I, class T> class tuple_element; +template <size_t I, class T> struct tuple_element; template <class T1, class T2> struct tuple_size<pair<T1, T2> >; template <class T1, class T2> struct tuple_element<0, pair<T1, T2> >; @@ -687,20 +687,20 @@ : public integral_constant<size_t, 2> {}; template <size_t _Ip, class _T1, class _T2> -class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, pair<_T1, _T2> > +struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, pair<_T1, _T2> > { static_assert(_Ip < 2, "Index out of bounds in std::tuple_element<std::pair<T1, T2>>"); }; template <class _T1, class _T2> -class _LIBCPP_TEMPLATE_VIS tuple_element<0, pair<_T1, _T2> > +struct _LIBCPP_TEMPLATE_VIS tuple_element<0, pair<_T1, _T2> > { public: typedef _T1 type; }; template <class _T1, class _T2> -class _LIBCPP_TEMPLATE_VIS tuple_element<1, pair<_T1, _T2> > +struct _LIBCPP_TEMPLATE_VIS tuple_element<1, pair<_T1, _T2> > { public: typedef _T2 type; Index: include/tuple =================================================================== --- include/tuple +++ include/tuple @@ -87,8 +87,8 @@ 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 -template <size_t I, class... T> class tuple_element<I, tuple<T...>>; +template <size_t I, class T> struct tuple_element; // undefined +template <size_t I, class... T> struct tuple_element<I, tuple<T...>>; template <size_t I, class T> using tuple_element_t = typename tuple_element <I, T>::type; // C++14 Index: include/span =================================================================== --- include/span +++ include/span @@ -531,7 +531,7 @@ template <size_t _Ip, class _Tp, size_t _Size> -class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, span<_Tp, _Size>> +struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, span<_Tp, _Size>> { static_assert( dynamic_extent != _Size, "std::tuple_element<> not supported for std::span<T, dynamic_extent>"); static_assert(_Ip < _Size, "Index out of bounds in std::tuple_element<> (std::span)"); Index: include/array =================================================================== --- include/array +++ include/array @@ -91,7 +91,7 @@ void swap(array<T,N>& x, array<T,N>& y) noexcept(noexcept(x.swap(y))); // C++17 template <class T> struct tuple_size; -template <size_t I, class T> class tuple_element; +template <size_t I, class T> struct 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>>; template <size_t I, class T, size_t N> T& get(array<T, N>&) noexcept; // constexpr in C++14 @@ -433,7 +433,7 @@ : public integral_constant<size_t, _Size> {}; template <size_t _Ip, class _Tp, size_t _Size> -class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, array<_Tp, _Size> > +struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, array<_Tp, _Size> > { static_assert(_Ip < _Size, "Index out of bounds in std::tuple_element<> (std::array)"); public: Index: include/__tuple =================================================================== --- include/__tuple +++ include/__tuple @@ -53,24 +53,24 @@ 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; +template <size_t _Ip, class _Tp> struct _LIBCPP_TEMPLATE_VIS tuple_element; template <size_t _Ip, class _Tp> -class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const _Tp> +struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const _Tp> { public: typedef typename add_const<typename tuple_element<_Ip, _Tp>::type>::type type; }; template <size_t _Ip, class _Tp> -class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, volatile _Tp> +struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, volatile _Tp> { public: typedef typename add_volatile<typename tuple_element<_Ip, _Tp>::type>::type type; }; template <size_t _Ip, class _Tp> -class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const volatile _Tp> +struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const volatile _Tp> { public: typedef typename add_cv<typename tuple_element<_Ip, _Tp>::type>::type type; @@ -281,7 +281,7 @@ #endif template <size_t _Ip, class ..._Types> -class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, __tuple_types<_Types...>> +struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, __tuple_types<_Types...>> { public: static_assert(_Ip < sizeof...(_Types), "tuple_element index out of range"); @@ -456,7 +456,7 @@ template <size_t _Ip, class ..._Tp> -class _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, tuple<_Tp...> > +struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, tuple<_Tp...> > { public: typedef typename tuple_element<_Ip, __tuple_types<_Tp...> >::type type;
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits