Skip to content

Commit f4fc927

Browse files
[NFC][SYCL] Switch to std:: equivalents for utilities in stl_type_traits.hpp (#7668)
1 parent 7e37406 commit f4fc927

34 files changed

+328
-349
lines changed

sycl/include/sycl/atomic_ref.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ template <sycl::access::address_space AS> struct IsValidAtomicRefAddressSpace {
4949

5050
// DefaultOrder parameter is limited to read-modify-write orders
5151
template <memory_order Order>
52-
using IsValidDefaultOrder = bool_constant<Order == memory_order::relaxed ||
53-
Order == memory_order::acq_rel ||
54-
Order == memory_order::seq_cst>;
52+
using IsValidDefaultOrder = std::bool_constant<Order == memory_order::relaxed ||
53+
Order == memory_order::acq_rel ||
54+
Order == memory_order::seq_cst>;
5555

5656
template <memory_order ReadModifyWriteOrder> struct memory_order_traits;
5757

sycl/include/sycl/buffer.hpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,11 @@ class buffer : public detail::buffer_plain,
159159
// using same requirement for contiguous container as std::span
160160
template <class Container>
161161
using EnableIfContiguous =
162-
detail::void_t<std::enable_if_t<std::is_convertible<
163-
detail::remove_pointer_t<
164-
decltype(std::declval<Container>().data())> (*)[],
165-
const T (*)[]>::value>,
166-
decltype(std::declval<Container>().size())>;
162+
std::void_t<std::enable_if_t<std::is_convertible<
163+
detail::remove_pointer_t<
164+
decltype(std::declval<Container>().data())> (*)[],
165+
const T (*)[]>::value>,
166+
decltype(std::declval<Container>().size())>;
167167
template <class It>
168168
using EnableIfItInputIterator = std::enable_if_t<
169169
std::is_convertible<typename std::iterator_traits<It>::iterator_category,
@@ -344,9 +344,9 @@ class buffer : public detail::buffer_plain,
344344
using IteratorValueType =
345345
detail::iterator_value_type_t<InputIterator>;
346346
using IteratorNonConstValueType =
347-
detail::remove_const_t<IteratorValueType>;
347+
std::remove_const_t<IteratorValueType>;
348348
using IteratorPointerToNonConstValueType =
349-
detail::add_pointer_t<IteratorNonConstValueType>;
349+
std::add_pointer_t<IteratorNonConstValueType>;
350350
std::copy(first, last,
351351
static_cast<IteratorPointerToNonConstValueType>(ToPtr));
352352
},
@@ -377,9 +377,9 @@ class buffer : public detail::buffer_plain,
377377
using IteratorValueType =
378378
detail::iterator_value_type_t<InputIterator>;
379379
using IteratorNonConstValueType =
380-
detail::remove_const_t<IteratorValueType>;
380+
std::remove_const_t<IteratorValueType>;
381381
using IteratorPointerToNonConstValueType =
382-
detail::add_pointer_t<IteratorNonConstValueType>;
382+
std::add_pointer_t<IteratorNonConstValueType>;
383383
std::copy(first, last,
384384
static_cast<IteratorPointerToNonConstValueType>(ToPtr));
385385
},

sycl/include/sycl/context.hpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,9 +236,8 @@ class __SYCL_EXPORT context : public detail::OwnerLessBase<context> {
236236
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
237237

238238
template <class T>
239-
friend
240-
typename detail::add_pointer_t<typename decltype(T::impl)::element_type>
241-
detail::getRawSyclObjImpl(const T &SyclObject);
239+
friend typename std::add_pointer_t<typename decltype(T::impl)::element_type>
240+
detail::getRawSyclObjImpl(const T &SyclObject);
242241

243242
template <class T>
244243
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);

sycl/include/sycl/detail/common.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ template <class Obj> decltype(Obj::impl) getSyclObjImpl(const Obj &SyclObject) {
254254
// must make sure the returned pointer is not captured in a field or otherwise
255255
// stored - i.e. must live only as on-stack value.
256256
template <class T>
257-
typename detail::add_pointer_t<typename decltype(T::impl)::element_type>
257+
typename std::add_pointer_t<typename decltype(T::impl)::element_type>
258258
getRawSyclObjImpl(const T &SyclObject) {
259259
return SyclObject.impl.get();
260260
}

sycl/include/sycl/detail/generic_type_lists.hpp

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -425,36 +425,39 @@ using marray_byte_list = type_list<marray<std::byte, 1>, marray<std::byte, 2>,
425425
#endif
426426

427427
// integer types
428-
using scalar_signed_integer_list = type_list<
429-
conditional_t<std::is_signed<char>::value,
428+
using scalar_signed_integer_list =
429+
type_list<std::conditional_t<
430+
std::is_signed<char>::value,
430431
type_list<scalar_default_char_list, scalar_signed_char_list>,
431432
scalar_signed_char_list>,
432-
scalar_signed_short_list, scalar_signed_int_list, scalar_signed_long_list,
433-
scalar_signed_longlong_list>;
433+
scalar_signed_short_list, scalar_signed_int_list,
434+
scalar_signed_long_list, scalar_signed_longlong_list>;
434435

435-
using vector_signed_integer_list = type_list<
436-
conditional_t<std::is_signed<char>::value,
436+
using vector_signed_integer_list =
437+
type_list<std::conditional_t<
438+
std::is_signed<char>::value,
437439
type_list<vector_default_char_list, vector_signed_char_list>,
438440
vector_signed_char_list>,
439-
vector_signed_short_list, vector_signed_int_list, vector_signed_long_list,
440-
vector_signed_longlong_list>;
441+
vector_signed_short_list, vector_signed_int_list,
442+
vector_signed_long_list, vector_signed_longlong_list>;
441443

442-
using marray_signed_integer_list = type_list<
443-
conditional_t<std::is_signed<char>::value,
444+
using marray_signed_integer_list =
445+
type_list<std::conditional_t<
446+
std::is_signed<char>::value,
444447
type_list<marray_default_char_list, marray_signed_char_list>,
445448
marray_signed_char_list>,
446-
marray_signed_short_list, marray_signed_int_list, marray_signed_long_list,
447-
marray_signed_longlong_list>;
449+
marray_signed_short_list, marray_signed_int_list,
450+
marray_signed_long_list, marray_signed_longlong_list>;
448451

449452
using signed_integer_list =
450453
type_list<scalar_signed_integer_list, vector_signed_integer_list,
451454
marray_signed_integer_list>;
452455

453456
using scalar_unsigned_integer_list =
454-
type_list<conditional_t<std::is_unsigned<char>::value,
455-
type_list<scalar_default_char_list,
456-
scalar_unsigned_char_list>,
457-
scalar_unsigned_char_list>,
457+
type_list<std::conditional_t<std::is_unsigned<char>::value,
458+
type_list<scalar_default_char_list,
459+
scalar_unsigned_char_list>,
460+
scalar_unsigned_char_list>,
458461
scalar_unsigned_short_list, scalar_unsigned_int_list,
459462
scalar_unsigned_long_list, scalar_unsigned_longlong_list
460463
#if __cplusplus >= 201703L && (!defined(_HAS_STD_BYTE) || _HAS_STD_BYTE != 0)
@@ -464,10 +467,10 @@ using scalar_unsigned_integer_list =
464467
>;
465468

466469
using vector_unsigned_integer_list =
467-
type_list<conditional_t<std::is_unsigned<char>::value,
468-
type_list<vector_default_char_list,
469-
vector_unsigned_char_list>,
470-
vector_unsigned_char_list>,
470+
type_list<std::conditional_t<std::is_unsigned<char>::value,
471+
type_list<vector_default_char_list,
472+
vector_unsigned_char_list>,
473+
vector_unsigned_char_list>,
471474
vector_unsigned_short_list, vector_unsigned_int_list,
472475
vector_unsigned_long_list, vector_unsigned_longlong_list
473476
#if __cplusplus >= 201703L && (!defined(_HAS_STD_BYTE) || _HAS_STD_BYTE != 0)
@@ -477,10 +480,10 @@ using vector_unsigned_integer_list =
477480
>;
478481

479482
using marray_unsigned_integer_list =
480-
type_list<conditional_t<std::is_unsigned<char>::value,
481-
type_list<marray_default_char_list,
482-
marray_unsigned_char_list>,
483-
marray_unsigned_char_list>,
483+
type_list<std::conditional_t<std::is_unsigned<char>::value,
484+
type_list<marray_default_char_list,
485+
marray_unsigned_char_list>,
486+
marray_unsigned_char_list>,
484487
marray_unsigned_short_list, marray_unsigned_int_list,
485488
marray_unsigned_long_list, marray_unsigned_longlong_list
486489
#if __cplusplus >= 201703L && (!defined(_HAS_STD_BYTE) || _HAS_STD_BYTE != 0)

sycl/include/sycl/detail/generic_type_traits.hpp

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -228,17 +228,17 @@ template <typename T>
228228
using is_geninteger64bit = is_gen_based_on_type_sizeof<T, 8, is_geninteger>;
229229

230230
template <typename T>
231-
using is_genintptr = bool_constant<
231+
using is_genintptr = std::bool_constant<
232232
is_pointer<T>::value && is_genint<remove_pointer_t<T>>::value &&
233233
is_address_space_compliant<T, gvl::nonconst_address_space_list>::value>;
234234

235235
template <typename T>
236-
using is_genfloatptr = bool_constant<
236+
using is_genfloatptr = std::bool_constant<
237237
is_pointer<T>::value && is_genfloat<remove_pointer_t<T>>::value &&
238238
is_address_space_compliant<T, gvl::nonconst_address_space_list>::value>;
239239

240240
template <typename T>
241-
using is_genptr = bool_constant<
241+
using is_genptr = std::bool_constant<
242242
is_pointer<T>::value && is_gentype<remove_pointer_t<T>>::value &&
243243
is_address_space_compliant<T, gvl::nonconst_address_space_list>::value>;
244244

@@ -424,10 +424,10 @@ using mptr_or_vec_elem_type_t = typename mptr_or_vec_elem_type<T>::type;
424424
// select_apply_cl_scalar_t selects from T8/T16/T32/T64 basing on
425425
// sizeof(IN). expected to handle scalar types.
426426
template <typename T, typename T8, typename T16, typename T32, typename T64>
427-
using select_apply_cl_scalar_t =
428-
conditional_t<sizeof(T) == 1, T8,
429-
conditional_t<sizeof(T) == 2, T16,
430-
conditional_t<sizeof(T) == 4, T32, T64>>>;
427+
using select_apply_cl_scalar_t = std::conditional_t<
428+
sizeof(T) == 1, T8,
429+
std::conditional_t<sizeof(T) == 2, T16,
430+
std::conditional_t<sizeof(T) == 4, T32, T64>>>;
431431

432432
// Shortcuts for selecting scalar int/unsigned int/fp type.
433433
template <typename T>
@@ -447,21 +447,21 @@ using select_cl_scalar_float_t =
447447

448448
template <typename T>
449449
using select_cl_scalar_integral_t =
450-
conditional_t<std::is_signed<T>::value,
451-
select_cl_scalar_integral_signed_t<T>,
452-
select_cl_scalar_integral_unsigned_t<T>>;
450+
std::conditional_t<std::is_signed<T>::value,
451+
select_cl_scalar_integral_signed_t<T>,
452+
select_cl_scalar_integral_unsigned_t<T>>;
453453

454454
// select_cl_scalar_t picks corresponding cl_* type for input
455455
// scalar T or returns T if T is not scalar.
456456
template <typename T>
457-
using select_cl_scalar_t = conditional_t<
457+
using select_cl_scalar_t = std::conditional_t<
458458
std::is_integral<T>::value, select_cl_scalar_integral_t<T>,
459-
conditional_t<
459+
std::conditional_t<
460460
std::is_floating_point<T>::value, select_cl_scalar_float_t<T>,
461461
// half is a special case: it is implemented differently on host and
462462
// device and therefore, might lower to different types
463-
conditional_t<std::is_same<T, half>::value,
464-
sycl::detail::half_impl::BIsRepresentationT, T>>>;
463+
std::conditional_t<std::is_same<T, half>::value,
464+
sycl::detail::half_impl::BIsRepresentationT, T>>>;
465465

466466
// select_cl_vector_or_scalar_or_ptr does cl_* type selection for element type
467467
// of a vector type T, pointer type substitution, and scalar type substitution.
@@ -476,9 +476,10 @@ struct select_cl_vector_or_scalar_or_ptr<
476476
// select_cl_scalar_t returns _Float16, so, we try to instantiate vec
477477
// class with _Float16 DataType, which is not expected there
478478
// So, leave vector<half, N> as-is
479-
vec<conditional_t<std::is_same<mptr_or_vec_elem_type_t<T>, half>::value,
480-
mptr_or_vec_elem_type_t<T>,
481-
select_cl_scalar_t<mptr_or_vec_elem_type_t<T>>>,
479+
vec<std::conditional_t<
480+
std::is_same<mptr_or_vec_elem_type_t<T>, half>::value,
481+
mptr_or_vec_elem_type_t<T>,
482+
select_cl_scalar_t<mptr_or_vec_elem_type_t<T>>>,
482483
T::size()>;
483484
};
484485

@@ -547,10 +548,10 @@ using SelectMatchingOpenCLType_t =
547548
// Converts T to OpenCL friendly
548549
//
549550
template <typename T>
550-
using ConvertToOpenCLType_t = conditional_t<
551+
using ConvertToOpenCLType_t = std::conditional_t<
551552
TryToGetVectorT<SelectMatchingOpenCLType_t<T>>::value,
552553
typename TryToGetVectorT<SelectMatchingOpenCLType_t<T>>::type,
553-
conditional_t<
554+
std::conditional_t<
554555
TryToGetPointerT<SelectMatchingOpenCLType_t<T>>::value,
555556
typename TryToGetPointerVecT<SelectMatchingOpenCLType_t<T>>::type,
556557
SelectMatchingOpenCLType_t<T>>>;
@@ -593,12 +594,12 @@ template <typename T> inline constexpr bool msbIsSet(const T x) {
593594
// TODO: marray support isn't implemented yet.
594595
template <typename T>
595596
using common_rel_ret_t =
596-
conditional_t<is_vgentype<T>::value, make_singed_integer_t<T>, bool>;
597+
std::conditional_t<is_vgentype<T>::value, make_singed_integer_t<T>, bool>;
597598

598599
// TODO: Remove this when common_rel_ret_t is promoted.
599600
template <typename T>
600601
using internal_host_rel_ret_t =
601-
conditional_t<is_vgentype<T>::value, make_singed_integer_t<T>, int>;
602+
std::conditional_t<is_vgentype<T>::value, make_singed_integer_t<T>, int>;
602603
#else
603604
// SYCL 1.2.1 4.13.7 (Relation functions), e.g.
604605
//
@@ -612,7 +613,7 @@ using internal_host_rel_ret_t =
612613
// Fixing it would be an ABI-breaking change so isn't done.
613614
template <typename T>
614615
using common_rel_ret_t =
615-
conditional_t<is_vgentype<T>::value, make_singed_integer_t<T>, int>;
616+
std::conditional_t<is_vgentype<T>::value, make_singed_integer_t<T>, int>;
616617
template <typename T> using internal_host_rel_ret_t = common_rel_ret_t<T>;
617618
#endif
618619

sycl/include/sycl/detail/spirv.hpp

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,9 @@ template <typename Group> bool GroupAny(bool pred) {
105105
// Native broadcasts map directly to a SPIR-V GroupBroadcast intrinsic
106106
// FIXME: Do not special-case for half once all backends support all data types.
107107
template <typename T>
108-
using is_native_broadcast = bool_constant<detail::is_arithmetic<T>::value &&
109-
!std::is_same<T, half>::value>;
108+
using is_native_broadcast =
109+
std::bool_constant<detail::is_arithmetic<T>::value &&
110+
!std::is_same<T, half>::value>;
110111

111112
template <typename T, typename IdT = size_t>
112113
using EnableIfNativeBroadcast = std::enable_if_t<
@@ -115,7 +116,7 @@ using EnableIfNativeBroadcast = std::enable_if_t<
115116
// Bitcast broadcasts can be implemented using a single SPIR-V GroupBroadcast
116117
// intrinsic, but require type-punning via an appropriate integer type
117118
template <typename T>
118-
using is_bitcast_broadcast = bool_constant<
119+
using is_bitcast_broadcast = std::bool_constant<
119120
!is_native_broadcast<T>::value && std::is_trivially_copyable<T>::value &&
120121
(sizeof(T) == 1 || sizeof(T) == 2 || sizeof(T) == 4 || sizeof(T) == 8)>;
121122

@@ -132,20 +133,21 @@ using ConvertToNativeBroadcastType_t = select_cl_scalar_integral_unsigned_t<T>;
132133
// - At most one 32-bit, 16-bit and 8-bit chunk left over
133134
template <typename T>
134135
using is_generic_broadcast =
135-
bool_constant<!is_native_broadcast<T>::value &&
136-
!is_bitcast_broadcast<T>::value &&
137-
std::is_trivially_copyable<T>::value>;
136+
std::bool_constant<!is_native_broadcast<T>::value &&
137+
!is_bitcast_broadcast<T>::value &&
138+
std::is_trivially_copyable<T>::value>;
138139

139140
template <typename T, typename IdT = size_t>
140141
using EnableIfGenericBroadcast = std::enable_if_t<
141142
is_generic_broadcast<T>::value && std::is_integral<IdT>::value, T>;
142143

143144
// FIXME: Disable widening once all backends support all data types.
144145
template <typename T>
145-
using WidenOpenCLTypeTo32_t = conditional_t<
146+
using WidenOpenCLTypeTo32_t = std::conditional_t<
146147
std::is_same<T, cl_char>() || std::is_same<T, cl_short>(), cl_int,
147-
conditional_t<std::is_same<T, cl_uchar>() || std::is_same<T, cl_ushort>(),
148-
cl_uint, T>>;
148+
std::conditional_t<std::is_same<T, cl_uchar>() ||
149+
std::is_same<T, cl_ushort>(),
150+
cl_uint, T>>;
149151

150152
// Broadcast with scalar local index
151153
// Work-group supports any integral type

sycl/include/sycl/detail/stl_type_traits.hpp

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -17,34 +17,9 @@ namespace sycl {
1717
__SYCL_INLINE_VER_NAMESPACE(_V1) {
1818
namespace detail {
1919

20-
// Type traits identical to those in std in newer versions. Can be removed when
21-
// SYCL requires a newer version of the C++ standard.
22-
// C++14
23-
template <bool B, class T, class F>
24-
using conditional_t = typename std::conditional<B, T, F>::type;
25-
26-
template <typename T>
27-
using remove_const_t = typename std::remove_const<T>::type;
28-
29-
template <typename T> using remove_cv_t = typename std::remove_cv<T>::type;
30-
31-
template <typename T>
32-
using remove_reference_t = typename std::remove_reference<T>::type;
33-
34-
template <typename T> using add_pointer_t = typename std::add_pointer<T>::type;
35-
36-
// C++17
37-
template <bool V> using bool_constant = std::integral_constant<bool, V>;
38-
39-
template <class...> using void_t = void;
40-
41-
// Custom type traits
42-
template <typename T>
43-
using allocator_value_type_t = typename std::allocator_traits<T>::value_type;
44-
45-
template <typename T>
46-
using allocator_pointer_t = typename std::allocator_traits<T>::pointer;
47-
20+
// Custom type traits.
21+
// FIXME: Those doesn't seem to be a part of any published/future C++ standard
22+
// so should probably be moved to a different place.
4823
template <typename T>
4924
using iterator_category_t = typename std::iterator_traits<T>::iterator_category;
5025

@@ -62,9 +37,9 @@ using iterator_to_const_type_t =
6237
// https://en.cppreference.com/w/cpp/named_req/OutputIterator
6338
template <typename T>
6439
using output_iterator_requirements =
65-
void_t<iterator_category_t<T>,
66-
decltype(*std::declval<T>() =
67-
std::declval<iterator_value_type_t<T>>())>;
40+
std::void_t<iterator_category_t<T>,
41+
decltype(*std::declval<T>() =
42+
std::declval<iterator_value_type_t<T>>())>;
6843

6944
template <typename, typename = void> struct is_output_iterator {
7045
static constexpr bool value = false;

0 commit comments

Comments
 (0)