From fdfea05144124c255df38de43b2caece41d05e55 Mon Sep 17 00:00:00 2001 From: Austin Schuh Date: Wed, 15 Nov 2023 20:55:51 -0800 Subject: [PATCH] Fix error compiling tuple_size in clang 17. Clang complains: In file included from cuco/static_map.cuh:24: In file included from cuco/pair.cuh:147: In file included from cuco/detail/pair/pair.inl:54: cuco/detail/pair/tuple_helpers.inl:18:8: error: cannot specialize a dependent template 18 | struct tuple_size> : integral_constant { | ^ cuco/detail/pair/tuple_helpers.inl:22:8: error: cannot specialize a dependent template 22 | struct tuple_size> : tuple_size> { | ^ cuco/detail/pair/tuple_helpers.inl:26:8: error: cannot specialize a dependent template 26 | struct tuple_size> : tuple_size> { | ^ cuco/detail/pair/tuple_helpers.inl:30:8: error: cannot specialize a dependent template 30 | struct tuple_size> : tuple_size> { | ^ cuco/detail/pair/tuple_helpers.inl:34:8: error: cannot specialize a dependent template 34 | struct tuple_element> { | ^ cuco/detail/pair/tuple_helpers.inl:39:8: error: cannot specialize a dependent template 39 | struct tuple_element<0, cuco::pair> { | ^ cuco/detail/pair/tuple_helpers.inl:44:8: error: cannot specialize a dependent template 44 | struct tuple_element<1, cuco::pair> { | ^ cuco/detail/pair/tuple_helpers.inl:49:8: error: cannot specialize a dependent template 49 | struct tuple_element<0, const cuco::pair> : tuple_element<0, cuco::pair> { | ^ cuco/detail/pair/tuple_helpers.inl:53:8: error: cannot specialize a dependent template 53 | struct tuple_element<1, const cuco::pair> : tuple_element<1, cuco::pair> { | ^ cuco/detail/pair/tuple_helpers.inl:57:8: error: cannot specialize a dependent template 57 | struct tuple_element<0, volatile cuco::pair> : tuple_element<0, cuco::pair> { | ^ cuco/detail/pair/tuple_helpers.inl:61:8: error: cannot specialize a dependent template 61 | struct tuple_element<1, volatile cuco::pair> : tuple_element<1, cuco::pair> { | ^ cuco/detail/pair/tuple_helpers.inl:65:8: error: cannot specialize a dependent template 65 | struct tuple_element<0, const volatile cuco::pair> : tuple_element<0, cuco::pair> { | ^ cuco/detail/pair/tuple_helpers.inl:69:8: error: cannot specialize a dependent template 69 | struct tuple_element<1, const volatile cuco::pair> : tuple_element<1, cuco::pair> { | ^ If we dig in, include/cuco/detail/pair/pair.inl is trying to teach tuple_size and tuple_element to work with cuco::pair's. thrust/pair.h defines thrust::tuple_size to be: template using tuple_size = ::cuda::std::tuple_size; This is a using statement, not a class. So, we only need to teach cuda::std::{tuple_size, tuple_element} how to work with cuco::pair, not thrust::{tuple_size, tuple_element}. Signed-off-by: Austin Schuh --- include/cuco/detail/pair/pair.inl | 4 ---- 1 file changed, 4 deletions(-) diff --git a/include/cuco/detail/pair/pair.inl b/include/cuco/detail/pair/pair.inl index 3279a915d..f7d8d136a 100644 --- a/include/cuco/detail/pair/pair.inl +++ b/include/cuco/detail/pair/pair.inl @@ -50,10 +50,6 @@ __host__ __device__ constexpr bool operator==(cuco::pair const& lhs, } // namespace cuco -namespace thrust { -#include -} // namespace thrust - namespace cuda::std { #include } // namespace cuda::std