@@ -102,7 +102,12 @@ class __SYCL_EXPORT UnsampledImageAccessorBaseHost {
102102 detail::getSyclObjImpl(const Obj &SyclObject);
103103
104104 template <class T >
105- friend T detail::createSyclObjFromImpl (decltype (T::impl) ImplObj);
105+ friend T detail::createSyclObjFromImpl (
106+ std::add_rvalue_reference_t <decltype (T::impl)> ImplObj);
107+
108+ template <class T >
109+ friend T detail::createSyclObjFromImpl (
110+ std::add_lvalue_reference_t <const decltype (T::impl)> ImplObj);
106111
107112 UnsampledImageAccessorImplPtr impl;
108113
@@ -173,7 +178,12 @@ class __SYCL_EXPORT SampledImageAccessorBaseHost {
173178 detail::getSyclObjImpl(const Obj &SyclObject);
174179
175180 template <class T >
176- friend T detail::createSyclObjFromImpl (decltype (T::impl) ImplObj);
181+ friend T detail::createSyclObjFromImpl (
182+ std::add_rvalue_reference_t <decltype (T::impl)> ImplObj);
183+
184+ template <class T >
185+ friend T detail::createSyclObjFromImpl (
186+ std::add_lvalue_reference_t <const decltype (T::impl)> ImplObj);
177187
178188 SampledImageAccessorImplPtr impl;
179189
@@ -936,7 +946,12 @@ class __SYCL_EBO unsampled_image_accessor :
936946 detail::getSyclObjImpl(const Obj &SyclObject);
937947
938948 template <class T >
939- friend T detail::createSyclObjFromImpl (decltype (T::impl) ImplObj);
949+ friend T detail::createSyclObjFromImpl (
950+ std::add_rvalue_reference_t <decltype (T::impl)> ImplObj);
951+
952+ template <class T >
953+ friend T detail::createSyclObjFromImpl (
954+ std::add_lvalue_reference_t <const decltype (T::impl)> ImplObj);
940955};
941956
942957template <typename DataT, int Dimensions = 1 ,
@@ -1073,7 +1088,12 @@ class __SYCL_EBO host_unsampled_image_accessor
10731088 detail::getSyclObjImpl (const Obj &SyclObject);
10741089
10751090 template <class T >
1076- friend T detail::createSyclObjFromImpl (decltype (T::impl) ImplObj);
1091+ friend T detail::createSyclObjFromImpl (
1092+ std::add_rvalue_reference_t <decltype (T::impl)> ImplObj);
1093+
1094+ template <class T >
1095+ friend T detail::createSyclObjFromImpl (
1096+ std::add_lvalue_reference_t <const decltype (T::impl)> ImplObj);
10771097};
10781098
10791099template <typename DataT, int Dimensions,
@@ -1217,7 +1237,12 @@ class __SYCL_EBO sampled_image_accessor :
12171237 detail::getSyclObjImpl(const Obj &SyclObject);
12181238
12191239 template <class T >
1220- friend T detail::createSyclObjFromImpl (decltype (T::impl) ImplObj);
1240+ friend T detail::createSyclObjFromImpl (
1241+ std::add_rvalue_reference_t <decltype (T::impl)> ImplObj);
1242+
1243+ template <class T >
1244+ friend T detail::createSyclObjFromImpl (
1245+ std::add_lvalue_reference_t <const decltype (T::impl)> ImplObj);
12211246};
12221247
12231248template <typename DataT, int Dimensions>
@@ -1321,7 +1346,12 @@ class __SYCL_EBO host_sampled_image_accessor
13211346 detail::getSyclObjImpl(const Obj &SyclObject);
13221347
13231348 template <class T >
1324- friend T detail::createSyclObjFromImpl (decltype (T::impl) ImplObj);
1349+ friend T detail::createSyclObjFromImpl (
1350+ std::add_rvalue_reference_t <decltype (T::impl)> ImplObj);
1351+
1352+ template <class T >
1353+ friend T detail::createSyclObjFromImpl (
1354+ std::add_lvalue_reference_t <const decltype (T::impl)> ImplObj);
13251355};
13261356
13271357} // namespace _V1
0 commit comments