@@ -1079,6 +1079,8 @@ public:
10791079 using OffsetT = detail::common_iterator_value_t <BeginOffsetIteratorT, EndOffsetIteratorT>;
10801080 using InputT = detail::it_value_t <InputIteratorT>;
10811081 using init_t = InputT;
1082+ static_assert (::cuda::std::numeric_limits<init_t >::is_specialized,
1083+ " numeric_limits must be specialized for the input value type" );
10821084 static_assert (::cuda::std::is_integral_v<OffsetT>, " Offset iterator value type should be integral." );
10831085 if constexpr (::cuda::std::is_integral_v<OffsetT>)
10841086 {
@@ -1194,6 +1196,9 @@ public:
11941196 using op_t = ::cuda::minimum<>;
11951197 using AccumT = ::cuda::std::__accumulator_t <op_t , cub::detail::it_value_t <InputIteratorT>, init_t >;
11961198
1199+ static_assert (::cuda::std::numeric_limits<init_t >::is_specialized,
1200+ " numeric_limits must be specialized for the input value type" );
1201+
11971202 return segmented_reduce_impl<AccumT, OffsetT>(
11981203 d_in, d_out, num_segments, d_begin_offsets, d_end_offsets, op_t {}, ::cuda::std::numeric_limits<init_t >::max (), env);
11991204 }
@@ -1271,6 +1276,9 @@ public:
12711276 using offset_t = int ;
12721277 using input_t = detail::it_value_t <InputIteratorT>;
12731278
1279+ static_assert (::cuda::std::numeric_limits<input_t >::is_specialized,
1280+ " numeric_limits must be specialized for the input value type" );
1281+
12741282 return detail::reduce::
12751283 DispatchFixedSizeSegmentedReduce<InputIteratorT, OutputIteratorT, offset_t , ::cuda::minimum<>, input_t >::Dispatch (
12761284 d_temp_storage,
@@ -1349,6 +1357,9 @@ public:
13491357 static_assert (!::cuda::std::is_same_v<requested_determinism_t , ::cuda::execution::determinism::gpu_to_gpu_t >,
13501358 " gpu_to_gpu determinism is not supported for device segmented reductions " );
13511359
1360+ static_assert (::cuda::std::numeric_limits<input_t >::is_specialized,
1361+ " numeric_limits must be specialized for the input value type" );
1362+
13521363 return detail::dispatch_with_env (
13531364 env, [&]([[maybe_unused]] auto tuning, void * d_temp_storage, size_t & temp_storage_bytes, cudaStream_t stream) {
13541365 return detail::reduce::
@@ -1484,6 +1495,8 @@ public:
14841495 using InitT = detail::reduce::empty_problem_init_t <OverrideAccumT>;
14851496
14861497 static_assert (::cuda::std::is_same_v<int , OutputKeyT>, " Output key type must be int." );
1498+ static_assert (::cuda::std::numeric_limits<InputValueT>::is_specialized,
1499+ " numeric_limits must be specialized for the input value type" );
14871500
14881501 // Wrapped input iterator to produce index-value <OverrideOffsetT, InputT> tuples
14891502 using ArgIndexInputIteratorT = ArgIndexInputIterator<InputIteratorT, OverrideOffsetT, OutputValueT>;
@@ -1620,6 +1633,8 @@ public:
16201633 using InitT = detail::reduce::empty_problem_init_t <OverrideAccumT>;
16211634
16221635 static_assert (::cuda::std::is_same_v<int , OutputKeyT>, " Output key type must be int." );
1636+ static_assert (::cuda::std::numeric_limits<InputValueT>::is_specialized,
1637+ " numeric_limits must be specialized for the input value type" );
16231638
16241639 // Wrapped input iterator to produce index-value <OverrideOffsetT, InputT> tuples
16251640 using ArgIndexInputIteratorT = ArgIndexInputIterator<InputIteratorT, OverrideOffsetT, OutputValueT>;
@@ -1718,6 +1733,8 @@ public:
17181733 using output_value_t = typename output_tuple_t ::second_type;
17191734
17201735 static_assert (::cuda::std::is_same_v<int , output_key_t >, " Output key type must be int." );
1736+ static_assert (::cuda::std::numeric_limits<input_value_t >::is_specialized,
1737+ " numeric_limits must be specialized for the input value type" );
17211738
17221739 // Wrapped input iterator to produce index-value <offset_t, InputT> tuples
17231740 auto d_indexed_in = THRUST_NS_QUALIFIER::make_transform_iterator (
@@ -1821,6 +1838,8 @@ public:
18211838 " gpu_to_gpu determinism is not supported for device segmented reductions " );
18221839
18231840 static_assert (::cuda::std::is_same_v<int , output_key_t >, " Output key type must be int." );
1841+ static_assert (::cuda::std::numeric_limits<input_value_t >::is_specialized,
1842+ " numeric_limits must be specialized for the input value type" );
18241843
18251844 using arg_index_input_iterator_t =
18261845 THRUST_NS_QUALIFIER::transform_iterator<detail::reduce::generate_idx_value<InputIteratorT, output_value_t >,
@@ -1953,6 +1972,8 @@ public:
19531972 using InputT = cub::detail::it_value_t <InputIteratorT>;
19541973 using init_t = InputT;
19551974
1975+ static_assert (::cuda::std::numeric_limits<init_t >::is_specialized,
1976+ " numeric_limits must be specialized for the input value type" );
19561977 static_assert (::cuda::std::is_integral_v<OffsetT>, " Offset iterator value type should be integral." );
19571978 if constexpr (::cuda::std::is_integral_v<OffsetT>)
19581979 {
@@ -2068,6 +2089,9 @@ public:
20682089 using op_t = ::cuda::maximum<>;
20692090 using AccumT = ::cuda::std::__accumulator_t <op_t , cub::detail::it_value_t <InputIteratorT>, init_t >;
20702091
2092+ static_assert (::cuda::std::numeric_limits<init_t >::is_specialized,
2093+ " numeric_limits must be specialized for the input value type" );
2094+
20712095 return segmented_reduce_impl<AccumT, OffsetT>(
20722096 d_in,
20732097 d_out,
@@ -2146,6 +2170,9 @@ public:
21462170 using offset_t = int ;
21472171 using input_t = detail::it_value_t <InputIteratorT>;
21482172
2173+ static_assert (::cuda::std::numeric_limits<input_t >::is_specialized,
2174+ " numeric_limits must be specialized for the input value type" );
2175+
21492176 return detail::reduce::
21502177 DispatchFixedSizeSegmentedReduce<InputIteratorT, OutputIteratorT, offset_t , ::cuda::maximum<>, input_t >::Dispatch (
21512178 d_temp_storage,
@@ -2223,6 +2250,8 @@ public:
22232250
22242251 static_assert (!::cuda::std::is_same_v<requested_determinism_t , ::cuda::execution::determinism::gpu_to_gpu_t >,
22252252 " gpu_to_gpu determinism is not supported for device segmented reductions " );
2253+ static_assert (::cuda::std::numeric_limits<input_t >::is_specialized,
2254+ " numeric_limits must be specialized for the input value type" );
22262255
22272256 return detail::dispatch_with_env (
22282257 env, [&]([[maybe_unused]] auto tuning, void * d_temp_storage, size_t & temp_storage_bytes, cudaStream_t stream) {
@@ -2362,6 +2391,8 @@ public:
23622391 using OutputValueT = typename OutputTupleT::Value;
23632392
23642393 static_assert (::cuda::std::is_same_v<int , OutputKeyT>, " Output key type must be int." );
2394+ static_assert (::cuda::std::numeric_limits<InputValueT>::is_specialized,
2395+ " numeric_limits must be specialized for the input value type" );
23652396
23662397 // Wrapped input iterator to produce index-value <OverrideOffsetT, InputT> tuples
23672398 using ArgIndexInputIteratorT = ArgIndexInputIterator<InputIteratorT, OverrideOffsetT, OutputValueT>;
@@ -2498,6 +2529,8 @@ public:
24982529 using OutputValueT = typename OutputTupleT::Value;
24992530
25002531 static_assert (::cuda::std::is_same_v<int , OutputKeyT>, " Output key type must be int." );
2532+ static_assert (::cuda::std::numeric_limits<InputValueT>::is_specialized,
2533+ " numeric_limits must be specialized for the input value type" );
25012534
25022535 // Wrapped input iterator to produce index-value <OverrideOffsetT, InputT> tuples
25032536 using ArgIndexInputIteratorT = ArgIndexInputIterator<InputIteratorT, OverrideOffsetT, OutputValueT>;
@@ -2593,6 +2626,8 @@ public:
25932626 using output_value_t = typename output_tuple_t ::second_type;
25942627
25952628 static_assert (::cuda::std::is_same_v<int , output_key_t >, " Output key type must be int." );
2629+ static_assert (::cuda::std::numeric_limits<input_value_t >::is_specialized,
2630+ " numeric_limits must be specialized for the input value type" );
25962631
25972632 // Wrapped input iterator to produce index-value <input_t, InputT> tuples
25982633 auto d_indexed_in = THRUST_NS_QUALIFIER::make_transform_iterator (
@@ -2694,6 +2729,8 @@ public:
26942729 " gpu_to_gpu determinism is not supported for device segmented reductions " );
26952730
26962731 static_assert (::cuda::std::is_same_v<int , output_key_t >, " Output key type must be int." );
2732+ static_assert (::cuda::std::numeric_limits<input_value_t >::is_specialized,
2733+ " numeric_limits must be specialized for the input value type" );
26972734
26982735 using arg_index_input_iterator_t =
26992736 THRUST_NS_QUALIFIER::transform_iterator<detail::reduce::generate_idx_value<InputIteratorT, output_value_t >,
0 commit comments