@@ -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
2931template <typename Range, typename UnaryFunction>
3032auto 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
3842template <typename Range, typename UnaryFunction>
3943auto 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
4753template <typename Range, typename UnaryFunction>
4854auto 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
5664template <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
6676template <typename Range, typename OutputIterator>
6777auto 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
7587template <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