From dabe58c780a7a0de17752b3f1ef58efba41e61df Mon Sep 17 00:00:00 2001 From: Michael Schellenberger Costa Date: Fri, 18 Sep 2026 10:19:50 +0200 Subject: [PATCH] [libcu++] Explicitly disable tuple like overload for tuple It looks like the compiler spends a lot of time to instantiate the tuple like constructor even though there are explicit `tuple` constructors that should be taken. --- .../include/cuda/std/__tuple_dir/tuple.h | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/libcudacxx/include/cuda/std/__tuple_dir/tuple.h b/libcudacxx/include/cuda/std/__tuple_dir/tuple.h index 6d0939a72039..a2b4468ff86e 100644 --- a/libcudacxx/include/cuda/std/__tuple_dir/tuple.h +++ b/libcudacxx/include/cuda/std/__tuple_dir/tuple.h @@ -391,26 +391,29 @@ class _CCCL_TYPE_VISIBILITY_DEFAULT tuple // NOLINTBEGIN(bugprone-forwarding-reference-overload) template ::value, int> = 0, - class _Constraints = _TupleLikeConstructible<_Tuple>, - enable_if_t<_Constraints::__can_construct_implicitly, int> = 0> + enable_if_t>, int> = 0, + enable_if_t<_DisambiguateTupleLike<_Tuple>::value, int> = 0, + class _Constraints = _TupleLikeConstructible<_Tuple>, + enable_if_t<_Constraints::__can_construct_implicitly, int> = 0> _CCCL_API constexpr tuple(_Tuple&& __t) noexcept(_NothrowTupleLikeConstructible<_Tuple>::value) : __base_(__tuple_like_constructor_tag{}, ::cuda::std::forward<_Tuple>(__t)) {} template ::value, int> = 0, - class _Constraints = _TupleLikeConstructible<_Tuple>, - enable_if_t<_Constraints::__can_construct_explicitly, int> = 0> + enable_if_t>, int> = 0, + enable_if_t<_DisambiguateTupleLike<_Tuple>::value, int> = 0, + class _Constraints = _TupleLikeConstructible<_Tuple>, + enable_if_t<_Constraints::__can_construct_explicitly, int> = 0> _CCCL_API explicit constexpr tuple(_Tuple&& __t) noexcept(_NothrowTupleLikeConstructible<_Tuple>::value) : __base_(__tuple_like_constructor_tag{}, ::cuda::std::forward<_Tuple>(__t)) {} #if defined(_CCCL_BUILTIN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY) template ::value, int> = 0, - class _Constraints = _TupleLikeConstructible<_Tuple>, - enable_if_t<_Constraints::__is_deleted, int> = 0> + enable_if_t>, int> = 0, + enable_if_t<_DisambiguateTupleLike<_Tuple>::value, int> = 0, + class _Constraints = _TupleLikeConstructible<_Tuple>, + enable_if_t<_Constraints::__is_deleted, int> = 0> constexpr tuple(_Tuple&&) = delete; #endif // _CCCL_BUILTIN_REFERENCE_CONSTRUCTS_FROM_TEMPORARY // NOLINTEND(bugprone-forwarding-reference-overload)