#include #include #include #include #include #include template <> inline constexpr bool thrust::detail::is_proxy_reference_v::reference> = true; void TestRawReferenceCast() { using ::cuda::std::is_same_v; { [[maybe_unused]] int i = 42; [[maybe_unused]] const int ci = 42; static_assert(is_same_v); static_assert(is_same_v); } { [[maybe_unused]] thrust::host_vector vec(1); static_assert(is_same_v); static_assert(is_same_v); [[maybe_unused]] auto zip = thrust::make_zip_iterator(vec.begin(), vec.begin()); static_assert( is_same_v>); [[maybe_unused]] auto zip2 = thrust::make_zip_iterator(zip, zip); static_assert( is_same_v, thrust::detail::tuple_of_iterator_references>>); } { [[maybe_unused]] thrust::device_vector vec(1); static_assert(is_same_v); static_assert(is_same_v); [[maybe_unused]] auto zip = thrust::make_zip_iterator(vec.begin(), vec.begin()); static_assert( is_same_v>); [[maybe_unused]] auto zip2 = thrust::make_zip_iterator(zip, zip); static_assert( is_same_v, thrust::detail::tuple_of_iterator_references>>); } // proxy references { [[maybe_unused]] std::vector vb; static_assert(is_same_v::reference>); } } DECLARE_UNITTEST(TestRawReferenceCast);