28 namespace experimental {
30 class spec_const_error :
public compile_program_error {
31 using compile_program_error::compile_program_error;
34 template <
typename T,
typename ID = T>
36 "Specialization constats extension is deprecated, use SYCL 2020"
37 " specialization constants instead") spec_constant {
42 #ifndef __SYCL_DEVICE_ONLY__
44 spec_constant(T Cst) : Val(Cst) {}
48 char padding[
sizeof(T)];
49 #endif // __SYCL_DEVICE_ONLY__
50 friend class sycl::program;
53 template <
typename V = T>
54 typename sycl::detail::enable_if_t<std::is_arithmetic<V>::value, V>
56 #ifdef __SYCL_DEVICE_ONLY__
57 const char *TName = __builtin_sycl_unique_stable_name(ID);
58 return __sycl_getScalarSpecConstantValue<T>(TName);
61 #endif // __SYCL_DEVICE_ONLY__
64 template <
typename V = T>
65 typename sycl::detail::enable_if_t<std::is_class<V>::value &&
66 std::is_pod<V>::value,
69 #ifdef __SYCL_DEVICE_ONLY__
70 const char *TName = __builtin_sycl_unique_stable_name(ID);
71 return __sycl_getCompositeSpecConstantValue<T>(TName);
74 #endif // __SYCL_DEVICE_ONLY__