@@ -195,6 +195,15 @@ class _CCCL_DECLSPEC_EMPTY_BASES zip_iterator : public detail::make_zip_iterator
195
195
: m_iterator_tuple(iterator_tuple)
196
196
{}
197
197
198
+ // ! This constructor creates a new \p zip_iterator from a pack of iterators.
199
+ // !
200
+ // ! \param iterators A pack of iterators to zip.
201
+ template <typename ... Iterators,
202
+ ::cuda::std::enable_if_t <(::cuda::std::input_or_output_iterator<Iterators> && ...), int > = 0 >
203
+ _CCCL_HOST_DEVICE zip_iterator (Iterators... iterators)
204
+ : m_iterator_tuple(::cuda::std::move(iterators)...)
205
+ {}
206
+
198
207
// ! This copy constructor creates a new \p zip_iterator from another \p zip_iterator.
199
208
// !
200
209
// ! \param other The \p zip_iterator to copy.
@@ -296,6 +305,13 @@ class _CCCL_DECLSPEC_EMPTY_BASES zip_iterator : public detail::make_zip_iterator
296
305
// ! \endcond
297
306
};
298
307
308
+ template <typename ... Iterators>
309
+ _CCCL_HOST_DEVICE zip_iterator (_CUDA_VSTD::tuple<Iterators...>) -> zip_iterator<_CUDA_VSTD::tuple<Iterators...>>;
310
+
311
+ template <typename ... Iterators,
312
+ ::cuda::std::enable_if_t <(::cuda::std::input_or_output_iterator<Iterators> && ...), int > = 0 >
313
+ _CCCL_HOST_DEVICE zip_iterator (Iterators...) -> zip_iterator<_CUDA_VSTD::tuple<Iterators...>>;
314
+
299
315
// ! \p make_zip_iterator creates a \p zip_iterator from a \p tuple of iterators.
300
316
// !
301
317
// ! \param t The \p tuple of iterators to copy.
@@ -308,17 +324,17 @@ make_zip_iterator(_CUDA_VSTD::tuple<Iterators...> t)
308
324
return zip_iterator<_CUDA_VSTD::tuple<Iterators...>>(t);
309
325
}
310
326
311
- // ! \p make_zip_iterator creates a \p zip_iterator from
312
- // ! iterators.
327
+ // ! \p make_zip_iterator creates a \p zip_iterator from iterators.
313
328
// !
314
329
// ! \param its The iterators to copy.
315
330
// ! \return A newly created \p zip_iterator which zips the iterators.
316
331
// !
317
332
// ! \see zip_iterator
318
- template <typename ... Iterators>
333
+ template <typename ... Iterators,
334
+ ::cuda::std::enable_if_t <(::cuda::std::input_or_output_iterator<Iterators> && ...), int > = 0 >
319
335
inline _CCCL_HOST_DEVICE zip_iterator<_CUDA_VSTD::tuple<Iterators...>> make_zip_iterator (Iterators... its)
320
336
{
321
- return make_zip_iterator ( _CUDA_VSTD::make_tuple ( its...) );
337
+ return zip_iterator< _CUDA_VSTD::tuple<Iterators...>>(:: cuda::std::move ( its) ...);
322
338
}
323
339
324
340
// ! \} // end fancyiterators
0 commit comments