Skip to content

Commit 37e0e89

Browse files
committed
fix: Multiple forwarding
1 parent 1b759ac commit 37e0e89

File tree

1 file changed

+28
-14
lines changed

1 file changed

+28
-14
lines changed

include/AutoDiff/src/internal/range_algorithm.hpp

+28-14
Original file line numberDiff line numberDiff line change
@@ -22,35 +22,43 @@ auto for_each_in_range(Range&& range, UnaryFunction fct)
2222
{
2323
using std::begin;
2424
using std::end;
25-
return std::for_each(begin(std::forward<Range>(range)),
26-
end(std::forward<Range>(range)), fct);
25+
26+
auto&& r = std::forward<Range>(range);
27+
28+
return std::for_each(begin(r), end(r), fct);
2729
}
2830

2931
template <typename Range, typename UnaryFunction>
3032
auto for_each_in_reversed_range(Range&& range, UnaryFunction fct)
3133
{
3234
using std::rbegin;
3335
using std::rend;
34-
return std::for_each(rbegin(std::forward<Range>(range)),
35-
rend(std::forward<Range>(range)), fct);
36+
37+
auto&& r = std::forward<Range>(range);
38+
39+
return std::for_each(rbegin(r), rend(r), fct);
3640
}
3741

3842
template <typename Range, typename UnaryFunction>
3943
auto all_of_range(Range&& range, UnaryFunction fct)
4044
{
4145
using std::begin;
4246
using std::end;
43-
return std::all_of(begin(std::forward<Range>(range)),
44-
end(std::forward<Range>(range)), fct);
47+
48+
auto&& r = std::forward<Range>(range);
49+
50+
return std::all_of(begin(r), end(r), fct);
4551
}
4652

4753
template <typename Range, typename UnaryFunction>
4854
auto any_of_range(Range&& range, UnaryFunction fct)
4955
{
5056
using std::begin;
5157
using std::end;
52-
return std::any_of(begin(std::forward<Range>(range)),
53-
end(std::forward<Range>(range)), fct);
58+
59+
auto&& r = std::forward<Range>(range);
60+
61+
return std::any_of(begin(r), end(r), fct);
5462
}
5563

5664
template <typename Range, typename OutputIterator, typename UnaryOperation>
@@ -59,17 +67,21 @@ auto transform_range(
5967
{
6068
using std::begin;
6169
using std::end;
62-
return std::transform(begin(std::forward<Range>(range)),
63-
end(std::forward<Range>(range)), firstOutput, op_);
70+
71+
auto&& r = std::forward<Range>(range);
72+
73+
return std::transform(begin(r), end(r), firstOutput, op_);
6474
}
6575

6676
template <typename Range, typename OutputIterator>
6777
auto copy_range(Range&& range, OutputIterator firstOutput)
6878
{
6979
using std::begin;
7080
using std::end;
71-
return std::copy(begin(std::forward<Range>(range)),
72-
end(std::forward<Range>(range)), firstOutput);
81+
82+
auto&& r = std::forward<Range>(range);
83+
84+
return std::copy(begin(r), end(r), firstOutput);
7385
}
7486

7587
template <typename Range, typename OutputIterator, typename UnaryPredicate>
@@ -78,8 +90,10 @@ auto copy_range_if(
7890
{
7991
using std::begin;
8092
using std::end;
81-
return std::copy_if(begin(std::forward<Range>(range)),
82-
end(std::forward<Range>(range)), firstOutput, pred);
93+
94+
auto&& r = std::forward<Range>(range);
95+
96+
return std::copy_if(begin(r), end(r), firstOutput, pred);
8397
}
8498

8599
} // namespace AutoDiff::internal

0 commit comments

Comments
 (0)