16 #define SYCL_EXT_ONEAPI_UNIFORM 1
18 #include <type_traits>
22 inline namespace _V1 {
25 template <
int,
bool>
class item;
26 template <
int>
class id;
27 template <
int>
class nd_item;
28 template <
int>
class h_item;
29 template <
int>
class group;
33 namespace ext::oneapi::experimental {
36 template <
class T,
template <
int>
class Tmpl>
38 template <
int N,
template <
int>
class T,
template <
int>
class Tmpl>
40 : std::conditional<std::is_same_v<T<N>, Tmpl<N>>, std::true_type,
42 template <
class T,
template <
int>
class Tmpl>
46 template <
class T,
template <
int,
bool>
class Tmpl>
48 template <
int N,
bool X,
template <
int,
bool>
class T,
49 template <
int,
bool>
class Tmpl>
51 : std::conditional<std::is_same_v<T<N, X>, Tmpl<N, X>>, std::true_type,
53 template <
class T,
template <
int,
bool>
class Tmpl>
59 template <
class U>
static constexpr
bool can_be_uniform() {
60 return !detail::is_instance_of_tmpl_int_bool_v<U, sycl::item> &&
61 !detail::is_instance_of_tmpl_int_v<U, sycl::nd_item> &&
62 !detail::is_instance_of_tmpl_int_v<U, sycl::h_item> &&
63 !detail::is_instance_of_tmpl_int_v<U, sycl::group> &&
64 !detail::is_instance_of_tmpl_int_v<U, sycl::nd_range> &&
65 !std::is_same_v<U, sycl::sub_group>;
67 static_assert(can_be_uniform<T>() &&
"type not allowed to be `uniform`");
70 explicit uniform(T x) noexcept : Val(x) {}
77 operator const T()
const {
return Val; }