21 #ifndef ROCPRIM_DETAIL_MATCH_RESULT_TYPE_HPP_ 22 #define ROCPRIM_DETAIL_MATCH_RESULT_TYPE_HPP_ 24 #include <type_traits> 26 #include "../config.hpp" 28 BEGIN_ROCPRIM_NAMESPACE
44 template<
class F,
class... Args>
46 static auto call(F&& f, Args&&... args)
47 -> decltype(std::forward<F>(f)(std::forward<Args>(args)...));
50 template<
class B,
class MT>
53 template<class T, class Td = typename std::decay<T>::type,
54 class = typename std::enable_if<std::is_base_of<B, Td>::value>::type
57 static auto get(T&& t) -> T&&;
59 template<class T, class Td = typename std::decay<T>::type,
60 class = typename std::enable_if<is_reference_wrapper<Td>::value>::type
63 static auto get(T&& t) -> decltype(t.get());
65 template<class T, class Td = typename std::decay<T>::type,
66 class = typename std::enable_if<!std::is_base_of<B, Td>::value>::type,
67 class = typename std::enable_if<!is_reference_wrapper<Td>::value>::type
70 static auto get(T&& t) -> decltype(*std::forward<T>(t));
72 template<class T, class... Args, class MT1,
73 class = typename std::enable_if<std::is_function<MT1>::value>::type
76 static auto call(MT1 B::*pmf, T&& t, Args&&... args)
77 -> decltype((invoke_impl::get(std::forward<T>(t)).*pmf)(std::forward<Args>(args)...));
81 static auto call(MT B::*pmd, T&& t)
82 -> decltype(invoke_impl::get(std::forward<T>(t)).*pmd);
85 template<class F, class... Args, class Fd = typename std::decay<F>::type>
87 auto INVOKE(F&& f, Args&&... args)
88 -> decltype(invoke_impl<Fd>::call(std::forward<F>(f), std::forward<Args>(args)...));
91 template <typename AlwaysVoid, typename, typename...>
93 template <
typename F,
typename...Args>
94 struct invoke_result_impl<decltype(void(INVOKE(std::declval<F>(), std::declval<Args>()...))), F, Args...>
96 using type = decltype(INVOKE(std::declval<F>(), std::declval<Args>()...));
99 template <
class F,
class... ArgTypes>
102 template<
class InputType,
class BinaryFunction>
109 END_ROCPRIM_NAMESPACE
111 #endif // ROCPRIM_DETAIL_MATCH_RESULT_TYPE_HPP_ Definition: match_result_type.hpp:38
Deprecated: Configuration of device-level scan primitives.
Definition: block_histogram.hpp:62
Definition: match_result_type.hpp:100
Definition: match_result_type.hpp:92
Definition: match_result_type.hpp:43
Definition: match_result_type.hpp:103