@@ -654,10 +654,7 @@ __pattern_mismatch(_Tag __tag, _ExecutionPolicy&& __exec, _R1&& __r1, _R2&& __r2
654
654
{
655
655
static_assert (__is_parallel_tag_v<_Tag> || typename _Tag::__is_vector{});
656
656
657
- auto __bin_pred = [__pred, __proj1, __proj2](auto && __val1, auto && __val2) {
658
- return std::invoke (__pred, std::invoke (__proj1, std::forward<decltype (__val1)>(__val1)),
659
- std::invoke (__proj2, std::forward<decltype (__val2)>(__val2)));
660
- };
657
+ oneapi::dpl::__internal::__binary_op __bin_pred{__pred, __proj1, __proj2};
661
658
662
659
return oneapi::dpl::__internal::__pattern_mismatch (
663
660
__tag, std::forward<_ExecutionPolicy>(__exec), std::ranges::begin (__r1),
@@ -681,9 +678,9 @@ template <typename _Tag, typename _ExecutionPolicy, typename _R, typename _Proj,
681
678
auto
682
679
__pattern_remove_if (_Tag __tag, _ExecutionPolicy&& __exec, _R&& __r, _Pred __pred, _Proj __proj)
683
680
{
684
- auto __pred_1 = [__pred, __proj]( auto && __val) {
685
- return std::invoke (__pred, std::invoke (__proj, std::forward< decltype (__val)>(__val)));
686
- };
681
+ static_assert (__is_parallel_tag_v<_Tag> || typename _Tag::__is_vector{});
682
+
683
+ oneapi::dpl::__internal::__predicate __pred_1{__pred, __proj };
687
684
688
685
auto __end = std::ranges::begin (__r) + std::ranges::size (__r);
689
686
@@ -722,6 +719,8 @@ template <typename _Tag, typename _ExecutionPolicy, typename _R1, typename _R2>
722
719
void
723
720
__pattern_swap_ranges (_Tag __tag, _ExecutionPolicy&& __exec, _R1&& __r1, _R2&& __r2)
724
721
{
722
+ static_assert (__is_parallel_tag_v<_Tag> || typename _Tag::__is_vector{});
723
+
725
724
auto __end = std::ranges::begin (__r1) + std::ranges::size (__r1);
726
725
oneapi::dpl::__internal::__pattern_swap (__tag, std::forward<_ExecutionPolicy>(__exec), std::ranges::begin (__r1),
727
726
__end, std::ranges::begin (__r2));
@@ -738,6 +737,8 @@ template <typename _Tag, typename _ExecutionPolicy, typename _R, typename _Comp,
738
737
std::ranges::borrowed_subrange_t <_R>
739
738
__pattern_unique (_Tag __tag, _ExecutionPolicy&& __exec, _R&& __r, _Comp __comp, _Proj __proj)
740
739
{
740
+ static_assert (__is_parallel_tag_v<_Tag> || typename _Tag::__is_vector{});
741
+
741
742
oneapi::dpl::__internal::__compare __pred_2{__comp, __proj};
742
743
743
744
auto __beg = std::ranges::begin (__r);
@@ -759,6 +760,8 @@ template <typename _Tag, typename _ExecutionPolicy, typename _R>
759
760
std::ranges::borrowed_subrange_t <_R>
760
761
__pattern_reverse (_Tag __tag, _ExecutionPolicy&& __exec, _R&& __r)
761
762
{
763
+ static_assert (__is_parallel_tag_v<_Tag> || typename _Tag::__is_vector{});
764
+
762
765
auto __beg = std::ranges::begin (__r);
763
766
const auto __n = std::ranges::size (__r);
764
767
const auto __n_2 = __n / 2 ;
@@ -780,6 +783,8 @@ template <typename _Tag, typename _ExecutionPolicy, typename _R, typename _OutRa
780
783
std::ranges::unique_copy_result<std::ranges::borrowed_iterator_t <_R>, std::ranges::borrowed_iterator_t <_OutRange>>
781
784
__pattern_unique_copy (_Tag __tag, _ExecutionPolicy&& __exec, _R&& __r, _OutRange&& __out_r, _Comp __comp, _Proj __proj)
782
785
{
786
+ static_assert (__is_parallel_tag_v<_Tag> || typename _Tag::__is_vector{});
787
+
783
788
oneapi::dpl::__internal::__compare __pred_2{__comp, __proj};
784
789
785
790
auto __beg = std::ranges::begin (__r);
0 commit comments