14 #include <type_traits>
18 inline namespace _V1 {
21 namespace experimental {
23 template <
typename T,
typename PropertyListT>
class annotated_arg;
24 template <
typename T,
typename PropertyListT>
class annotated_ptr;
29 template <
typename T,
typename PropertyValueT>
40 template <
typename... Args>
46 template <
typename T,
typename... Props>
49 template <
typename T,
typename Prop,
typename... Props>
51 : std::conditional_t<is_valid_property<T, Prop>::value,
52 check_property_list<T, Props...>, std::false_type> {
53 static constexpr
bool is_valid_property_for_given_type =
55 static_assert(is_valid_property_for_given_type,
56 "Property is invalid for the given type.");
62 template <
typename PropKeyT,
typename... PropValuesTs>
77 template <
typename T,
int W>
79 : std::bool_constant<std::is_pointer<T>::value> {};
81 template <
typename T,
typename PropertyListT>
85 template <
typename T,
typename PropertyListT>
93 static constexpr
const char *
name =
"sycl-alignment";
friend class annotated_arg
constexpr alignment_key::value_t< K > alignment
friend class annotated_ptr
decltype(properties{std::declval< Args >()...}) type