template <typename T> \
class fun##_ : public elt_function_cl<fun##_<T>, bool, T> { \
using base = elt_function_cl<fun##_<T>, bool, T>; \
using base::arguments_; \
\
public: \
using base::rows; \
using base::cols; \
static constexpr auto view_transitivness = std::make_tuple(true); \
static const std::vector<const char*> includes; \
explicit fun##_(T&& a) : base(#fun,
std::forward<T>(a)) {} \
inline auto deep_copy() const { \
auto&& arg_copy = this->template get_arg<0>().deep_copy(); \
return fun##_<std::remove_reference_t<decltype(arg_copy)>>{ \
std::move(arg_copy)}; \
} \
inline std::pair<int, int> extreme_diagonals() const { \
return __VA_ARGS__; \
} \
}; \
\
template <typename T, typename Cond \
= require_all_kernel_expressions_and_none_scalar_t<T>> \
inline fun##_<as_operation_cl_t<T>> fun(T&& a) { \
return fun##_<as_operation_cl_t<T>>(
as_operation_cl(std::forward<T>(a))); \
} \
template <typename T> \
const std::vector<const char*> fun##_<T>::includes{};
T_operation && as_operation_cl(T_operation &&a)
Converts any valid kernel generator expression into an operation.
Generates a class and function for a classification function, defined by OpenCL.