@@ -220,7 +220,32 @@ class __SYCL_EBO
220
220
properties>;
221
221
}
222
222
223
- template <typename property_key_t > constexpr auto get_property () {
223
+ // Two methods below do the following (pseudocode):
224
+ //
225
+ // template <property_key_t>
226
+ // using ret_t = decltype(this->get_property(key_tag<property_key_t>{}));
227
+ // static constexpr auto get_property() requires(is_empty_v<ret_t>) {
228
+ // return ret_t{};
229
+ // }
230
+ // constexpr auto get_property() requires(!is_empty_v<ret_t>) {
231
+ // return get_property(key_tag<property_key_t>{});
232
+ // }
233
+ template <typename property_key_t >
234
+ static constexpr auto get_property () -> std::enable_if_t<
235
+ std::is_empty_v<decltype(std::declval<properties>().get_property(
236
+ detail::property_key_tag<property_key_t >{}))>,
237
+ decltype(std::declval<properties>().get_property(
238
+ detail::property_key_tag<property_key_t >{}))> {
239
+ return decltype (std::declval<properties>().get_property (
240
+ detail::property_key_tag<property_key_t >{})){};
241
+ }
242
+
243
+ template <typename property_key_t >
244
+ constexpr auto get_property () const -> std::enable_if_t<
245
+ !std::is_empty_v<decltype(std::declval<properties>().get_property(
246
+ detail::property_key_tag<property_key_t >{}))>,
247
+ decltype(std::declval<properties>().get_property(
248
+ detail::property_key_tag<property_key_t >{}))> {
224
249
return get_property (detail::property_key_tag<property_key_t >{});
225
250
}
226
251
0 commit comments