diff --git a/testing/iterator_categories.cu b/testing/iterator_categories.cu new file mode 100644 index 000000000..2d249dba4 --- /dev/null +++ b/testing/iterator_categories.cu @@ -0,0 +1,22 @@ +#include +#include +#include + +template +using _category_to_system_t = + typename thrust::detail::iterator_category_to_system::type; + +static_assert(std::is_same>::value, ""); +static_assert(std::is_same>::value, ""); +// static_assert(std::is_same>::value, ""); // Still broken +// static_assert(std::is_same>::value, ""); // Still broken +// static_assert(std::is_same>::value, ""); // Still broken + +static_assert(std::is_same>::value, ""); +static_assert(std::is_same>::value, ""); +static_assert(std::is_same>::value, ""); +static_assert(std::is_same>::value, ""); +static_assert(std::is_same>::value, ""); + +// static_assert(!std::is_convertible::value, ""); // Still broken +static_assert(!std::is_convertible::value, ""); diff --git a/thrust/iterator/detail/iterator_category_to_system.h b/thrust/iterator/detail/iterator_category_to_system.h index e6103b539..cbb9b4380 100644 --- a/thrust/iterator/detail/iterator_category_to_system.h +++ b/thrust/iterator/detail/iterator_category_to_system.h @@ -38,23 +38,23 @@ template struct device_iterator_category_to_backend_system; // we should just specialize this metafunction for iterator_category_with_system_and_traversal template struct iterator_category_to_system - // convertible to host iterator? + // convertible to device iterator? : eval_if< or_< - is_convertible, - is_convertible + is_convertible, + is_convertible >::value, - detail::identity_, - - // convertible to device iterator? + detail::identity_, + + // convertible to host iterator? eval_if< or_< - is_convertible, - is_convertible + is_convertible, + is_convertible >::value, - detail::identity_, + detail::identity_, // unknown system detail::identity_ diff --git a/thrust/iterator/detail/iterator_category_to_traversal.h b/thrust/iterator/detail/iterator_category_to_traversal.h index d8c736c50..e3675163c 100644 --- a/thrust/iterator/detail/iterator_category_to_traversal.h +++ b/thrust/iterator/detail/iterator_category_to_traversal.h @@ -88,23 +88,23 @@ template template struct category_to_traversal - // check for host system + // check for device system : eval_if< or_< - is_convertible, - is_convertible + is_convertible, + is_convertible >::value, - host_system_category_to_traversal, + device_system_category_to_traversal, - // check for device system + // check for host system eval_if< or_< - is_convertible, - is_convertible + is_convertible, + is_convertible >::value, - device_system_category_to_traversal, + host_system_category_to_traversal, // unknown category detail::identity_