@@ -2196,58 +2196,42 @@ class __SYCL_EXPORT handler {
21962196 std::forward<RestT>(Rest)...);
21972197 }
21982198
2199- template <typename KernelName = detail::auto_name, typename ... RestT>
2200- std::enable_if_t <detail::AreAllButLastReductions<RestT...>::value &&
2201- (sizeof ...(RestT) > 1 )>
2202- parallel_for (range<1 > Range, RestT &&...Rest) {
2203- const auto &KernelObj = (Rest, ...);
2199+ template <typename ... RestT> auto property_deduction_helper (RestT &&...Rest) {
2200+ const auto &KernelObj = (std::forward<RestT>(Rest), ...);
22042201 if constexpr (ext::oneapi::experimental::detail::
22052202 HasKernelPropertiesGetMethod<
22062203 decltype (KernelObj)>::value) {
2207- parallel_for<KernelName>(
2208- Range, KernelObj.get (ext::oneapi::experimental::properties_tag{}),
2209- std::forward<RestT>(Rest)...);
2204+ return KernelObj.get (ext::oneapi::experimental::properties_tag{});
22102205 } else {
2211- parallel_for<KernelName>(Range,
2212- ext::oneapi::experimental::empty_properties_t {},
2213- std::forward<RestT>(Rest)...);
2206+ return ext::oneapi::experimental::empty_properties_t {};
22142207 }
22152208 }
22162209
2210+ template <typename KernelName = detail::auto_name, typename ... RestT>
2211+ std::enable_if_t <detail::AreAllButLastReductions<RestT...>::value &&
2212+ (sizeof ...(RestT) > 1 )>
2213+ parallel_for (range<1 > Range, RestT &&...Rest) {
2214+ parallel_for<KernelName>(
2215+ Range, property_deduction_helper (std::forward<RestT>(Rest)...),
2216+ std::forward<RestT>(Rest)...);
2217+ }
2218+
22172219 template <typename KernelName = detail::auto_name, typename ... RestT>
22182220 std::enable_if_t <detail::AreAllButLastReductions<RestT...>::value &&
22192221 (sizeof ...(RestT) > 1 )>
22202222 parallel_for (range<2 > Range, RestT &&...Rest) {
2221- const auto &KernelObj = (Rest, ...);
2222- if constexpr (ext::oneapi::experimental::detail::
2223- HasKernelPropertiesGetMethod<
2224- decltype (KernelObj)>::value) {
2225- parallel_for<KernelName>(
2226- Range, KernelObj.get (ext::oneapi::experimental::properties_tag{}),
2227- std::forward<RestT>(Rest)...);
2228- } else {
2229- parallel_for<KernelName>(Range,
2230- ext::oneapi::experimental::empty_properties_t {},
2231- std::forward<RestT>(Rest)...);
2232- }
2223+ parallel_for<KernelName>(
2224+ Range, property_deduction_helper (std::forward<RestT>(Rest)...),
2225+ std::forward<RestT>(Rest)...);
22332226 }
22342227
22352228 template <typename KernelName = detail::auto_name, typename ... RestT>
22362229 std::enable_if_t <detail::AreAllButLastReductions<RestT...>::value &&
22372230 (sizeof ...(RestT) > 1 )>
22382231 parallel_for (range<3 > Range, RestT &&...Rest) {
2239- const auto &KernelObj = (Rest, ...);
2240- if constexpr (ext::oneapi::experimental::detail::
2241- HasKernelPropertiesGetMethod<
2242- decltype (KernelObj)>::value) {
2243- parallel_for<KernelName>(
2244- Range, KernelObj.get (ext::oneapi::experimental::properties_tag{}),
2245- std::forward<RestT>(Rest)...);
2246- } else {
2247- parallel_for<KernelName>(Range,
2248- ext::oneapi::experimental::empty_properties_t {},
2249- std::forward<RestT>(Rest)...);
2250- }
2232+ parallel_for<KernelName>(
2233+ Range, property_deduction_helper (std::forward<RestT>(Rest)...),
2234+ std::forward<RestT>(Rest)...);
22512235 }
22522236
22532237 template <typename KernelName = detail::auto_name, int Dims,
@@ -2275,18 +2259,9 @@ class __SYCL_EXPORT handler {
22752259 std::enable_if_t <detail::AreAllButLastReductions<RestT...>::value &&
22762260 (sizeof ...(RestT) > 1 )> // variant with reductions
22772261 parallel_for (nd_range<Dims> Range, RestT &&...Rest) {
2278- const auto &KernelObj = (Rest, ...);
2279- if constexpr (ext::oneapi::experimental::detail::
2280- HasKernelPropertiesGetMethod<
2281- decltype (KernelObj)>::value) {
2282- parallel_for<KernelName>(
2283- Range, KernelObj.get (ext::oneapi::experimental::properties_tag{}),
2284- std::forward<RestT>(Rest)...);
2285- } else {
2286- parallel_for<KernelName>(Range,
2287- ext::oneapi::experimental::empty_properties_t {},
2288- std::forward<RestT>(Rest)...);
2289- }
2262+ parallel_for<KernelName>(
2263+ Range, property_deduction_helper (std::forward<RestT>(Rest)...),
2264+ std::forward<RestT>(Rest)...);
22902265 }
22912266
22922267 template <typename KernelName = detail::auto_name, int Dims,
0 commit comments