DPC++ Runtime
Runtime libraries for oneAPI DPC++
type_traits.hpp
Go to the documentation of this file.
1 //==----------------- type_traits.hpp - SYCL type traits -------------------==//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #pragma once
10 
11 #include <sycl/access/access.hpp>
16 
17 #include <array>
18 #include <tuple>
19 #include <type_traits>
20 
21 namespace sycl {
23 template <int Dimensions> class group;
24 namespace ext::oneapi {
25 struct sub_group;
26 
27 namespace experimental {
28 template <typename Group, std::size_t Extent> class group_with_scratchpad;
29 
30 namespace detail {
31 template <typename T> struct is_group_helper : std::false_type {};
32 
33 template <typename Group, std::size_t Extent>
34 struct is_group_helper<group_with_scratchpad<Group, Extent>> : std::true_type {
35 };
36 } // namespace detail
37 } // namespace experimental
38 } // namespace ext::oneapi
39 
40 namespace detail {
41 
42 template <typename T> struct is_group : std::false_type {};
43 
44 template <int Dimensions>
45 struct is_group<group<Dimensions>> : std::true_type {};
46 
47 template <typename T> struct is_sub_group : std::false_type {};
48 
49 template <> struct is_sub_group<ext::oneapi::sub_group> : std::true_type {};
50 
51 template <typename T>
53  : std::integral_constant<bool,
54  is_group<T>::value || is_sub_group<T>::value> {};
55 
56 namespace half_impl {
57 class half;
58 }
59 } // namespace detail
61 
62 // Forward declaration
63 template <typename ElementType, access::address_space Space,
64  access::decorated DecorateAddress>
65 class multi_ptr;
66 
67 template <class T>
68 struct is_group : std::bool_constant<detail::is_group<T>::value ||
69  detail::is_sub_group<T>::value> {};
70 
71 template <class T> inline constexpr bool is_group_v = is_group<T>::value;
72 
73 namespace ext::oneapi::experimental {
74 template <class T>
75 inline constexpr bool is_group_helper_v =
77 } // namespace ext::oneapi::experimental
78 
79 namespace detail {
80 // Type for Intel device UUID extension.
81 // For details about this extension, see
82 // sycl/doc/extensions/supported/sycl_ext_intel_device_info.md
83 using uuid_type = std::array<unsigned char, 16>;
84 
85 template <typename T, typename R> struct copy_cv_qualifiers;
86 
87 template <typename T, typename R>
89 
90 template <int V> using int_constant = std::integral_constant<int, V>;
91 // vector_size
92 // scalars are interpreted as a vector of 1 length.
93 template <typename T> struct vector_size_impl : int_constant<1> {};
94 template <typename T, int N>
95 struct vector_size_impl<vec<T, N>> : int_constant<N> {};
96 template <typename T>
97 struct vector_size : vector_size_impl<remove_cv_t<remove_reference_t<T>>> {};
98 
99 // vector_element
100 template <typename T> struct vector_element_impl;
101 template <typename T>
103 template <typename T> struct vector_element_impl {
104  using type = T;
105 };
106 template <typename T, int N> struct vector_element_impl<vec<T, N>> {
107  using type = T;
108 };
109 template <typename T> struct vector_element {
111 };
112 template <class T> using vector_element_t = typename vector_element<T>::type;
113 
114 // change_base_type_t
115 template <typename T, typename B> struct change_base_type {
116  using type = B;
117 };
118 
119 template <typename T, int N, typename B> struct change_base_type<vec<T, N>, B> {
120  using type = vec<B, N>;
121 };
122 
123 template <typename T, typename B>
125 
126 // Applies the same the cv-qualifiers from T type to R type
127 template <typename T, typename R> struct copy_cv_qualifiers_impl {
128  using type = R;
129 };
130 
131 template <typename T, typename R> struct copy_cv_qualifiers_impl<const T, R> {
132  using type = const R;
133 };
134 
135 template <typename T, typename R>
136 struct copy_cv_qualifiers_impl<volatile T, R> {
137  using type = volatile R;
138 };
139 
140 template <typename T, typename R>
141 struct copy_cv_qualifiers_impl<const volatile T, R> {
142  using type = const volatile R;
143 };
144 
145 template <typename T, typename R> struct copy_cv_qualifiers {
147 };
148 
149 // make_signed with support SYCL vec class
150 template <typename T, typename Enable = void> struct make_signed_impl;
151 
152 template <typename T>
154 
155 template <typename T>
157  T, enable_if_t<is_contained<T, gtl::scalar_integer_list>::value, T>> {
158  using type = typename std::make_signed<T>::type;
159 };
160 
161 template <typename T>
163  T, enable_if_t<is_contained<T, gtl::vector_integer_list>::value, T>> {
166 };
167 
168 // TODO Delete this specialization after solving the problems in the test
169 // infrastructure.
170 template <typename T>
172  T, enable_if_t<!is_contained<T, gtl::integer_list>::value, T>> {
173  using type = T;
174 };
175 
176 template <typename T> struct make_signed {
179 };
180 
181 template <typename T> using make_signed_t = typename make_signed<T>::type;
182 
183 // make_unsigned with support SYCL vec class
184 template <typename T, typename Enable = void> struct make_unsigned_impl;
185 
186 template <typename T>
188 
189 template <typename T>
191  T, enable_if_t<is_contained<T, gtl::scalar_integer_list>::value, T>> {
192  using type = typename std::make_unsigned<T>::type;
193 };
194 
195 template <typename T>
197  T, enable_if_t<is_contained<T, gtl::vector_integer_list>::value, T>> {
200 };
201 
202 // TODO Delete this specialization after solving the problems in the test
203 // infrastructure.
204 template <typename T>
206  T, enable_if_t<!is_contained<T, gtl::integer_list>::value, T>> {
207  using type = T;
208 };
209 
210 template <typename T> struct make_unsigned {
213 };
214 
215 template <typename T> using make_unsigned_t = typename make_unsigned<T>::type;
216 
217 // Checks that sizeof base type of T equal N and T satisfies S<T>::value
218 template <typename T, int N, template <typename> class S>
221 
222 template <typename> struct is_vec : std::false_type {};
223 template <typename T, std::size_t N>
224 struct is_vec<sycl::vec<T, N>> : std::true_type {};
225 
226 template <typename> struct get_vec_size {
227  static constexpr std::size_t size = 1;
228 };
229 
230 template <typename T, std::size_t N> struct get_vec_size<sycl::vec<T, N>> {
231  static constexpr std::size_t size = N;
232 };
233 
234 // is_integral
235 template <typename T>
236 struct is_integral : std::is_integral<vector_element_t<T>> {};
237 
238 // is_floating_point
239 template <typename T>
240 struct is_floating_point_impl : std::is_floating_point<T> {};
241 
242 template <> struct is_floating_point_impl<half> : std::true_type {};
243 
244 template <typename T>
246  : is_floating_point_impl<remove_cv_t<vector_element_t<T>>> {};
247 
248 // is_arithmetic
249 template <typename T>
251  : bool_constant<is_integral<T>::value || is_floating_point<T>::value> {};
252 
253 template <typename T>
255  : bool_constant<!is_vec<T>::value && is_arithmetic<T>::value> {};
256 
257 template <typename T>
259  : bool_constant<is_vec<T>::value && is_arithmetic<T>::value> {};
260 
261 // is_bool
262 template <typename T>
264  : bool_constant<std::is_same<remove_cv_t<T>, bool>::value> {};
265 
266 template <typename T>
268  : bool_constant<is_vec<T>::value &&
269  is_scalar_bool<vector_element_t<T>>::value> {};
270 
271 template <typename T>
272 struct is_bool : bool_constant<is_scalar_bool<vector_element_t<T>>::value> {};
273 
274 // is_pointer
275 template <typename T> struct is_pointer_impl : std::false_type {};
276 
277 template <typename T> struct is_pointer_impl<T *> : std::true_type {};
278 
279 template <typename T, access::address_space Space,
280  access::decorated DecorateAddress>
281 struct is_pointer_impl<multi_ptr<T, Space, DecorateAddress>> : std::true_type {
282 };
283 
284 template <typename T> struct is_pointer : is_pointer_impl<remove_cv_t<T>> {};
285 
286 // remove_pointer_t
287 template <typename T> struct remove_pointer_impl {
288  using type = T;
289 };
290 
291 template <typename T> struct remove_pointer_impl<T *> {
292  using type = T;
293 };
294 
295 template <typename T, access::address_space Space,
296  access::decorated DecorateAddress>
297 struct remove_pointer_impl<multi_ptr<T, Space, DecorateAddress>> {
298  using type = T;
299 };
300 
301 template <typename T>
302 struct remove_pointer : remove_pointer_impl<remove_cv_t<T>> {};
303 
304 template <typename T> using remove_pointer_t = typename remove_pointer<T>::type;
305 
306 // is_address_space_compliant
307 template <typename T, typename SpaceList>
308 struct is_address_space_compliant_impl : std::false_type {};
309 
310 template <typename T, typename SpaceList>
311 struct is_address_space_compliant_impl<T *, SpaceList> : std::true_type {};
312 
313 template <typename T, typename SpaceList, access::address_space Space,
314  access::decorated DecorateAddress>
315 struct is_address_space_compliant_impl<multi_ptr<T, Space, DecorateAddress>,
316  SpaceList>
317  : bool_constant<is_one_of_spaces<Space, SpaceList>::value> {};
318 
319 template <typename T, typename SpaceList>
321  : is_address_space_compliant_impl<remove_cv_t<T>, SpaceList> {};
322 
323 // make_type_t
324 template <typename T, typename TL> struct make_type_impl {
326 };
327 
328 template <typename T, int N, typename TL> struct make_type_impl<vec<T, N>, TL> {
331 };
332 
333 template <typename T, typename TL>
335 
336 // make_larger_t
337 template <typename T, typename Enable = void> struct make_larger_impl;
338 template <typename T>
340  T, enable_if_t<is_contained<T, gtl::scalar_floating_list>::value, T>> {
342 };
343 
344 template <typename T>
346  T,
349 };
350 
351 template <typename T>
353  T,
356 };
357 
358 template <typename T, int N> struct make_larger_impl<vec<T, N>, vec<T, N>> {
362  static constexpr bool found = !std::is_same<upper_type, void>::value;
364 };
365 
366 template <typename T> struct make_larger {
368 };
369 
370 template <typename T> using make_larger_t = typename make_larger<T>::type;
371 
372 #if defined(RESTRICT_WRITE_ACCESS_TO_CONSTANT_PTR)
373 template <access::address_space AS, class DataT>
374 using const_if_const_AS =
375  typename std::conditional<AS == access::address_space::constant_space,
376  const DataT, DataT>::type;
377 #else
378 template <access::address_space AS, class DataT>
379 using const_if_const_AS = DataT;
380 #endif
381 
382 template <typename T> struct function_traits {};
383 
384 template <typename Ret, typename... Args> struct function_traits<Ret(Args...)> {
385  using ret_type = Ret;
386  using args_type = std::tuple<Args...>;
387 };
388 
389 } // namespace detail
390 } // __SYCL_INLINE_VER_NAMESPACE(_V1)
391 } // namespace sycl
sycl::_V1::detail::vector_element_impl
Definition: type_traits.hpp:100
sycl::_V1::detail::make_signed_impl< T, enable_if_t< is_contained< T, gtl::vector_integer_list >::value, T > >::base_type
make_signed_impl_t< vector_element_t< T > > base_type
Definition: type_traits.hpp:164
sycl::_V1::detail::gtl::scalar_signed_integer_list
type_list< conditional_t< std::is_signed< char >::value, type_list< scalar_default_char_list, scalar_signed_char_list >, scalar_signed_char_list >, scalar_signed_short_list, scalar_signed_int_list, scalar_signed_long_list, scalar_signed_longlong_list > scalar_signed_integer_list
Definition: generic_type_lists.hpp:428
sycl::_V1::detail::is_pointer
Definition: type_traits.hpp:284
sycl::_V1::detail::make_larger_impl< vec< T, N >, vec< T, N > >::upper_type
typename make_larger_impl< base_type, base_type >::type upper_type
Definition: type_traits.hpp:360
sycl::_V1::detail::is_vec
Definition: type_traits.hpp:222
sycl::_V1::detail::make_larger_impl< T, enable_if_t< is_contained< T, gtl::scalar_signed_integer_list >::value, T > >::type
find_twice_as_large_type_t< gtl::scalar_signed_integer_list, T > type
Definition: type_traits.hpp:348
sycl::_V1::ext::oneapi::experimental::detail::is_group_helper
Definition: type_traits.hpp:31
sycl::_V1::detail::is_vector_bool
Definition: type_traits.hpp:267
sycl::_V1::detail::copy_cv_qualifiers_t
typename copy_cv_qualifiers< T, R >::type copy_cv_qualifiers_t
Definition: type_traits.hpp:88
sycl::_V1::detail::make_signed_impl< T, enable_if_t<!is_contained< T, gtl::integer_list >::value, T > >::type
T type
Definition: type_traits.hpp:173
sycl::_V1::detail::make_signed
Definition: type_traits.hpp:176
sycl::_V1::ext::oneapi::experimental::group_with_scratchpad
Definition: type_traits.hpp:28
sycl::_V1::detail::bool_constant
std::integral_constant< bool, V > bool_constant
Definition: stl_type_traits.hpp:40
sycl::_V1::detail::copy_cv_qualifiers_impl< const volatile T, R >::type
const volatile R type
Definition: type_traits.hpp:142
sycl::_V1::detail::is_sub_group
Definition: type_traits.hpp:47
sycl::_V1::ext::intel::experimental::esimd::lsc_scope::group
@ group
__SYCL_INLINE_VER_NAMESPACE
#define __SYCL_INLINE_VER_NAMESPACE(X)
Definition: defines_elementary.hpp:11
sycl::_V1::detail::make_signed_impl_t
typename make_signed_impl< T, T >::type make_signed_impl_t
Definition: type_traits.hpp:153
sycl::_V1::detail::make_larger_impl< T, enable_if_t< is_contained< T, gtl::scalar_floating_list >::value, T > >::type
find_twice_as_large_type_t< gtl::scalar_floating_list, T > type
Definition: type_traits.hpp:341
sycl::_V1::detail::make_larger_impl< T, enable_if_t< is_contained< T, gtl::scalar_unsigned_integer_list >::value, T > >::type
find_twice_as_large_type_t< gtl::scalar_unsigned_integer_list, T > type
Definition: type_traits.hpp:355
sycl::_V1::detail::make_unsigned_impl< T, enable_if_t< is_contained< T, gtl::vector_integer_list >::value, T > >::type
change_base_type_t< T, base_type > type
Definition: type_traits.hpp:199
sycl::_V1::detail::is_gen_based_on_type_sizeof
bool_constant< S< T >::value &&(sizeof(vector_element_t< T >)==N)> is_gen_based_on_type_sizeof
Definition: type_traits.hpp:220
sycl::_V1::detail::copy_cv_qualifiers_impl
Definition: type_traits.hpp:127
sycl::_V1::detail::is_group
Definition: type_traits.hpp:42
sycl::_V1::detail::make_larger::type
typename make_larger_impl< T, T >::type type
Definition: type_traits.hpp:367
sycl::_V1::detail::vector_element_impl_t
typename vector_element_impl< T >::type vector_element_impl_t
Definition: type_traits.hpp:102
sycl::_V1::detail::make_signed_t
typename make_signed< T >::type make_signed_t
Definition: type_traits.hpp:181
sycl::_V1::detail::function_traits
Definition: type_traits.hpp:382
sycl::_V1::Dimensions
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS Dimensions
Definition: accessor.hpp:2854
sycl::_V1::detail::change_base_type
Definition: type_traits.hpp:115
sycl
---— Error handling, matching OpenCL plugin semantics.
Definition: access.hpp:14
bool_constant
sycl::_V1::detail::copy_cv_qualifiers_impl< volatile T, R >::type
volatile R type
Definition: type_traits.hpp:137
sycl::_V1::detail::make_signed::new_type_wo_cv_qualifiers
make_signed_impl_t< remove_cv_t< T > > new_type_wo_cv_qualifiers
Definition: type_traits.hpp:177
access.hpp
sycl::_V1::detail::make_unsigned
Definition: type_traits.hpp:210
sycl::_V1::detail::copy_cv_qualifiers_impl::type
R type
Definition: type_traits.hpp:128
sycl::_V1::detail::is_floating_point
Definition: type_traits.hpp:245
sycl::_V1::detail::make_signed_impl< T, enable_if_t< is_contained< T, gtl::vector_integer_list >::value, T > >::type
change_base_type_t< T, base_type > type
Definition: type_traits.hpp:165
sycl::_V1::detail::make_unsigned_impl< T, enable_if_t<!is_contained< T, gtl::integer_list >::value, T > >::type
T type
Definition: type_traits.hpp:207
sycl::_V1::detail::make_larger_impl< vec< T, N >, vec< T, N > >::base_type
vector_element_t< vec< T, N > > base_type
Definition: type_traits.hpp:359
generic_type_lists.hpp
sycl::_V1::detail::vector_element::type
copy_cv_qualifiers_t< T, vector_element_impl_t< remove_cv_t< T > >> type
Definition: type_traits.hpp:110
sycl::_V1::detail::is_scalar_bool
Definition: type_traits.hpp:263
sycl::_V1::detail::enable_if_t
typename std::enable_if< B, T >::type enable_if_t
Definition: stl_type_traits.hpp:24
stl_type_traits.hpp
sycl::_V1::detail::make_larger_t
typename make_larger< T >::type make_larger_t
Definition: type_traits.hpp:370
sycl::_V1::detail::make_type_t
typename make_type_impl< T, TL >::type make_type_t
Definition: type_traits.hpp:334
sycl::_V1::detail::copy_cv_qualifiers::type
typename copy_cv_qualifiers_impl< T, remove_cv_t< R > >::type type
Definition: type_traits.hpp:146
sycl::_V1::detail::make_unsigned_t
typename make_unsigned< T >::type make_unsigned_t
Definition: type_traits.hpp:215
sycl::_V1::detail::remove_pointer_t
typename remove_pointer< T >::type remove_pointer_t
Definition: type_traits.hpp:304
sycl::_V1::multi_ptr
Provides constructors for address space qualified and non address space qualified pointers to allow i...
Definition: atomic.hpp:34
sycl::_V1::detail::make_unsigned::type
copy_cv_qualifiers_t< T, new_type_wo_cv_qualifiers > type
Definition: type_traits.hpp:212
sycl::_V1::detail::copy_cv_qualifiers
Definition: type_traits.hpp:85
sycl::_V1::detail::vector_element_impl< vec< T, N > >::type
T type
Definition: type_traits.hpp:107
sycl::_V1::detail::change_base_type_t
typename change_base_type< T, B >::type change_base_type_t
Definition: type_traits.hpp:124
sycl::_V1::detail::int_constant
std::integral_constant< int, V > int_constant
Definition: type_traits.hpp:90
sycl::_V1::detail::is_pointer_impl
Definition: type_traits.hpp:275
sycl::_V1::detail::make_larger_impl< vec< T, N >, vec< T, N > >::type
conditional_t< found, new_type, void > type
Definition: type_traits.hpp:363
sycl::_V1::detail::make_larger_impl
Definition: type_traits.hpp:337
sycl::_V1::detail::gtl::scalar_integer_list
type_list< scalar_signed_integer_list, scalar_unsigned_integer_list > scalar_integer_list
Definition: generic_type_lists.hpp:492
sycl::_V1::detail::gtl::vector_integer_list
type_list< vector_signed_integer_list, vector_unsigned_integer_list > vector_integer_list
Definition: generic_type_lists.hpp:495
sycl::_V1::detail::uuid_type
std::array< unsigned char, 16 > uuid_type
Definition: type_traits.hpp:83
sycl::_V1::detail::remove_pointer_impl< remove_cv_t< T > >::type
remove_cv_t< T > type
Definition: type_traits.hpp:288
sycl::_V1::detail::is_bool
Definition: type_traits.hpp:272
sycl::_V1::detail::find_same_size_type_t
find_type_t< TypeList, is_type_size_equal, T > find_same_size_type_t
Definition: type_list.hpp:125
sycl::_V1::detail::make_unsigned::new_type_wo_cv_qualifiers
make_unsigned_impl_t< remove_cv_t< T > > new_type_wo_cv_qualifiers
Definition: type_traits.hpp:211
sycl::_V1::detail::make_signed_impl
Definition: type_traits.hpp:150
sycl::_V1::detail::make_unsigned_impl< T, enable_if_t< is_contained< T, gtl::scalar_integer_list >::value, T > >::type
typename std::make_unsigned< T >::type type
Definition: type_traits.hpp:192
sycl::_V1::half
sycl::detail::half_impl::half half
Definition: aliases.hpp:103
sycl::_V1::is_group_v
constexpr bool is_group_v
Definition: type_traits.hpp:71
sycl::_V1::ext::oneapi::experimental::is_group_helper_v
constexpr bool is_group_helper_v
Definition: type_traits.hpp:75
sycl::_V1::detail::copy_cv_qualifiers_impl< const T, R >::type
const R type
Definition: type_traits.hpp:132
sycl::_V1::detail::make_type_impl::type
find_same_size_type_t< TL, T > type
Definition: type_traits.hpp:325
sycl::_V1::access::decorated
decorated
Definition: access.hpp:59
sycl::_V1::is_group
Definition: type_traits.hpp:68
sycl::_V1::detail::vector_element_t
typename vector_element< T >::type vector_element_t
Definition: type_traits.hpp:112
sycl::_V1::detail::vector_size_impl
Definition: type_traits.hpp:93
sycl::_V1::detail::remove_pointer_impl< T * >::type
T type
Definition: type_traits.hpp:292
sycl::_V1::detail::is_floating_point_impl
Definition: type_traits.hpp:240
sycl::_V1::detail::find_twice_as_large_type_t
find_type_t< TypeList, is_type_size_double_of, T > find_twice_as_large_type_t
Definition: type_list.hpp:139
sycl::_V1::detail::function_traits< Ret(Args...)>::args_type
std::tuple< Args... > args_type
Definition: type_traits.hpp:386
sycl::_V1::detail::make_unsigned_impl< T, enable_if_t< is_contained< T, gtl::vector_integer_list >::value, T > >::base_type
make_unsigned_impl_t< vector_element_t< T > > base_type
Definition: type_traits.hpp:198
sycl::_V1::detail::is_address_space_compliant
Definition: type_traits.hpp:320
sycl::_V1::detail::remove_pointer_impl< multi_ptr< T, Space, DecorateAddress > >::type
T type
Definition: type_traits.hpp:298
sycl::_V1::vec
Provides a cross-patform vector class template that works efficiently on SYCL devices as well as in h...
Definition: aliases.hpp:20
sycl::_V1::detail::gtl::scalar_unsigned_integer_list
type_list< conditional_t< std::is_unsigned< char >::value, type_list< scalar_default_char_list, scalar_unsigned_char_list >, scalar_unsigned_char_list >, scalar_unsigned_short_list, scalar_unsigned_int_list, scalar_unsigned_long_list, scalar_unsigned_longlong_list, scalar_byte_list > scalar_unsigned_integer_list
Definition: generic_type_lists.hpp:459
sycl::_V1::detail::change_base_type::type
B type
Definition: type_traits.hpp:116
sycl::_V1::detail::is_vector_arithmetic
Definition: type_traits.hpp:258
sycl::_V1::detail::is_scalar_arithmetic
Definition: type_traits.hpp:254
sycl::_V1::detail::is_contained
Definition: type_list.hpp:54
sycl::_V1::detail::remove_pointer_impl
Definition: type_traits.hpp:287
sycl::_V1::detail::is_address_space_compliant_impl
Definition: type_traits.hpp:308
sycl::_V1::detail::is_arithmetic
Definition: type_traits.hpp:250
sycl::_V1::detail::make_type_impl
Definition: type_traits.hpp:324
sycl::_V1::detail::make_unsigned_impl
Definition: type_traits.hpp:184
sycl::_V1::detail::make_signed_impl< T, enable_if_t< is_contained< T, gtl::scalar_integer_list >::value, T > >::type
typename std::make_signed< T >::type type
Definition: type_traits.hpp:158
sycl::_V1::detail::get_vec_size
Definition: type_traits.hpp:226
sycl::_V1::detail::remove_pointer
Definition: type_traits.hpp:302
sycl::_V1::detail::vector_size
Definition: type_traits.hpp:97
sycl::_V1::detail::is_integral
Definition: type_traits.hpp:236
sycl::_V1::detail::conditional_t
typename std::conditional< B, T, F >::type conditional_t
Definition: stl_type_traits.hpp:27
vector_traits.hpp
sycl::_V1::detail::make_larger
Definition: type_traits.hpp:366
sycl::_V1::detail::make_unsigned_impl_t
typename make_unsigned_impl< T, T >::type make_unsigned_impl_t
Definition: type_traits.hpp:187
sycl::_V1::detail::function_traits< Ret(Args...)>::ret_type
Ret ret_type
Definition: type_traits.hpp:385
sycl::_V1::detail::vector_element_impl::type
T type
Definition: type_traits.hpp:104
sycl::_V1::detail::vector_element
Definition: type_traits.hpp:109
sycl::_V1::detail::gtl::scalar_floating_list
type_list< scalar_float_list, scalar_double_list, scalar_half_list > scalar_floating_list
Definition: generic_type_lists.hpp:81
sycl::_V1::detail::make_type_impl< vec< T, N >, TL >::scalar_type
typename make_type_impl< T, TL >::type scalar_type
Definition: type_traits.hpp:329
sycl::_V1::group
Definition: helpers.hpp:30
sycl::_V1::Space
Space
Definition: multi_ptr.hpp:1316
sycl::_V1::ext::oneapi::experimental::matrix::scope_t::sub_group
@ sub_group
sycl::_V1::detail::is_generic_group
Definition: type_traits.hpp:52
sycl::_V1::detail::const_if_const_AS
DataT const_if_const_AS
Definition: type_traits.hpp:379
type_list.hpp
sycl::_V1::detail::gtl::integer_list
type_list< scalar_integer_list, vector_integer_list, marray_integer_list > integer_list
Definition: generic_type_lists.hpp:501
sycl::_V1::detail::make_signed::type
copy_cv_qualifiers_t< T, new_type_wo_cv_qualifiers > type
Definition: type_traits.hpp:178
sycl::_V1::access::address_space
address_space
Definition: access.hpp:47