@@ -22,35 +22,43 @@ auto for_each_in_range(Range&& range, UnaryFunction fct)
22
22
{
23
23
using std::begin;
24
24
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);
27
29
}
28
30
29
31
template <typename Range, typename UnaryFunction>
30
32
auto for_each_in_reversed_range (Range&& range, UnaryFunction fct)
31
33
{
32
34
using std::rbegin;
33
35
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);
36
40
}
37
41
38
42
template <typename Range, typename UnaryFunction>
39
43
auto all_of_range (Range&& range, UnaryFunction fct)
40
44
{
41
45
using std::begin;
42
46
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);
45
51
}
46
52
47
53
template <typename Range, typename UnaryFunction>
48
54
auto any_of_range (Range&& range, UnaryFunction fct)
49
55
{
50
56
using std::begin;
51
57
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);
54
62
}
55
63
56
64
template <typename Range, typename OutputIterator, typename UnaryOperation>
@@ -59,17 +67,21 @@ auto transform_range(
59
67
{
60
68
using std::begin;
61
69
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_);
64
74
}
65
75
66
76
template <typename Range, typename OutputIterator>
67
77
auto copy_range (Range&& range, OutputIterator firstOutput)
68
78
{
69
79
using std::begin;
70
80
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);
73
85
}
74
86
75
87
template <typename Range, typename OutputIterator, typename UnaryPredicate>
@@ -78,8 +90,10 @@ auto copy_range_if(
78
90
{
79
91
using std::begin;
80
92
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);
83
97
}
84
98
85
99
} // namespace AutoDiff::internal
0 commit comments