Skip to content

Commit cb388aa

Browse files
authored
[SYCL] Fix underlying type for std::byte when multi_ptr is used (#4705)
Signed-off-by: mdimakov <[email protected]>
1 parent 2c58fd4 commit cb388aa

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

sycl/include/CL/sycl/detail/generic_type_traits.hpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -429,13 +429,23 @@ struct select_cl_vector_or_scalar<
429429
template <typename T, typename Enable = void>
430430
struct select_cl_mptr_or_vector_or_scalar;
431431

432+
// this struct helps to use std::uint8_t instead of std::byte,
433+
// which is not supported on device
434+
template <typename T> struct TypeHelper { using RetType = T; };
435+
436+
#if __cplusplus >= 201703L
437+
template <> struct TypeHelper<std::byte> { using RetType = std::uint8_t; };
438+
#endif
439+
440+
template <typename T> using type_helper = typename TypeHelper<T>::RetType;
441+
432442
template <typename T>
433443
struct select_cl_mptr_or_vector_or_scalar<
434444
T, typename detail::enable_if_t<is_genptr<T>::value &&
435445
!std::is_pointer<T>::value>> {
436-
using type = multi_ptr<
437-
typename select_cl_vector_or_scalar<typename T::element_type>::type,
438-
T::address_space>;
446+
using type = multi_ptr<typename select_cl_vector_or_scalar<
447+
type_helper<typename T::element_type>>::type,
448+
T::address_space>;
439449
};
440450

441451
template <typename T>

0 commit comments

Comments
 (0)