@@ -669,26 +669,40 @@ template <class... _Tp> class _LIBCUDACXX_TEMPLATE_VIS tuple {
669669 struct _PackExpandsToThisTuple <_Arg>
670670 : is_same<__remove_cvref_t <_Arg>, tuple> {};
671671
672- template <size_t _Jp, class ... _Up>
673- friend _LIBCUDACXX_CONSTEXPR_AFTER_CXX11
674- _LIBCUDACXX_INLINE_VISIBILITY __tuple_element_t <_Jp, tuple<_Up...>> &
675- get (tuple<_Up...> &) noexcept ;
676- template <size_t _Jp, class ... _Up>
677- friend _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 _LIBCUDACXX_INLINE_VISIBILITY const
678- __tuple_element_t <_Jp, tuple<_Up...>> &
679- get (const tuple<_Up...> &) noexcept ;
680- template <size_t _Jp, class ... _Up>
681- friend _LIBCUDACXX_CONSTEXPR_AFTER_CXX11
682- _LIBCUDACXX_INLINE_VISIBILITY __tuple_element_t <_Jp, tuple<_Up...>> &&
683- get (tuple<_Up...> &&) noexcept ;
684- template <size_t _Jp, class ... _Up>
685- friend _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 _LIBCUDACXX_INLINE_VISIBILITY const
686- __tuple_element_t <_Jp, tuple<_Up...>> &&
687- get (const tuple<_Up...> &&) noexcept ;
688-
689672public:
690- template <
691- class _Constraints = __tuple_constraints<_Tp...>,
673+ template <size_t _Ip>
674+ _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 __tuple_element_t <_Ip, tuple>&
675+ __get_impl () & noexcept
676+ {
677+ typedef _LIBCUDACXX_NODEBUG_TYPE __tuple_element_t <_Ip, tuple> type;
678+ return static_cast <__tuple_leaf<_Ip, type>&>(__base_).get ();
679+ }
680+
681+ template <size_t _Ip>
682+ _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 const __tuple_element_t <_Ip, tuple>&
683+ __get_impl () const & noexcept
684+ {
685+ typedef _LIBCUDACXX_NODEBUG_TYPE __tuple_element_t <_Ip, tuple> type;
686+ return static_cast <const __tuple_leaf<_Ip, type>&>(__base_).get ();
687+ }
688+
689+ template <size_t _Ip>
690+ _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 __tuple_element_t <_Ip, tuple>&&
691+ __get_impl () && noexcept
692+ {
693+ typedef _LIBCUDACXX_NODEBUG_TYPE __tuple_element_t <_Ip, tuple> type;
694+ return static_cast <type&&>(static_cast <__tuple_leaf<_Ip, type>&&>(__base_).get ());
695+ }
696+
697+ template <size_t _Ip>
698+ _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 const __tuple_element_t <_Ip, tuple>&&
699+ __get_impl () const && noexcept
700+ {
701+ typedef _LIBCUDACXX_NODEBUG_TYPE __tuple_element_t <_Ip, tuple> type;
702+ return static_cast <const type&&>(static_cast <const __tuple_leaf<_Ip, type>&&>(__base_).get ());
703+ }
704+
705+ template < class _Constraints = __tuple_constraints<_Tp...>,
692706 __enable_if_t <_Constraints::__implicit_default_constructible, int > = 0 >
693707 _LIBCUDACXX_INLINE_VISIBILITY constexpr tuple () noexcept (
694708 _Constraints::__nothrow_default_constructible) {}
@@ -962,37 +976,31 @@ inline _LIBCUDACXX_INLINE_VISIBILITY
962976
963977// get
964978template <size_t _Ip, class ... _Tp>
965- inline _LIBCUDACXX_INLINE_VISIBILITY
966- _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 __tuple_element_t <_Ip, tuple<_Tp...>> &
967- get (tuple<_Tp...> &__t ) noexcept {
968- typedef _LIBCUDACXX_NODEBUG_TYPE __tuple_element_t <_Ip, tuple<_Tp...>> type;
969- return static_cast <__tuple_leaf<_Ip, type> &>(__t .__base_ ).get ();
979+ inline _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 __tuple_element_t <_Ip, tuple<_Tp...>>&
980+ get (tuple<_Tp...>& __t ) noexcept
981+ {
982+ return __t .template __get_impl <_Ip>();
970983}
971984
972985template <size_t _Ip, class ... _Tp>
973- inline _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 const
974- __tuple_element_t <_Ip, tuple<_Tp...>> &
975- get (const tuple<_Tp...> &__t ) noexcept {
976- typedef _LIBCUDACXX_NODEBUG_TYPE __tuple_element_t <_Ip, tuple<_Tp...>> type;
977- return static_cast <const __tuple_leaf<_Ip, type> &>(__t .__base_ ).get ();
986+ inline _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 const __tuple_element_t <_Ip, tuple<_Tp...>>&
987+ get (const tuple<_Tp...>& __t ) noexcept
988+ {
989+ return __t .template __get_impl <_Ip>();
978990}
979991
980992template <size_t _Ip, class ... _Tp>
981- inline _LIBCUDACXX_INLINE_VISIBILITY
982- _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 __tuple_element_t <_Ip, tuple<_Tp...>> &&
983- get (tuple<_Tp...> &&__t ) noexcept {
984- typedef _LIBCUDACXX_NODEBUG_TYPE __tuple_element_t <_Ip, tuple<_Tp...>> type;
985- return static_cast <type &&>(
986- static_cast <__tuple_leaf<_Ip, type> &&>(__t .__base_ ).get ());
993+ inline _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 __tuple_element_t <_Ip, tuple<_Tp...>>&&
994+ get (tuple<_Tp...>&& __t ) noexcept
995+ {
996+ return _CUDA_VSTD::move (__t ).template __get_impl <_Ip>();
987997}
988998
989999template <size_t _Ip, class ... _Tp>
990- inline _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 const
991- __tuple_element_t <_Ip, tuple<_Tp...>> &&
992- get (const tuple<_Tp...> &&__t ) noexcept {
993- typedef _LIBCUDACXX_NODEBUG_TYPE __tuple_element_t <_Ip, tuple<_Tp...>> type;
994- return static_cast <const type &&>(
995- static_cast <const __tuple_leaf<_Ip, type> &&>(__t .__base_ ).get ());
1000+ inline _LIBCUDACXX_INLINE_VISIBILITY _LIBCUDACXX_CONSTEXPR_AFTER_CXX11 const __tuple_element_t <_Ip, tuple<_Tp...>>&&
1001+ get (const tuple<_Tp...>&& __t ) noexcept
1002+ {
1003+ return _CUDA_VSTD::move (__t ).template __get_impl <_Ip>();
9961004}
9971005
9981006#if _LIBCUDACXX_STD_VER > 11
0 commit comments