diff options
-rw-r--r-- | libcxx/include/numeric | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/libcxx/include/numeric b/libcxx/include/numeric index 5c10dd3c1e67..ed06fcc49d5b 100644 --- a/libcxx/include/numeric +++ b/libcxx/include/numeric @@ -335,14 +335,17 @@ exclusive_scan(_InputIterator __first, _InputIterator __last, { if (__first != __last) { - _Tp __saved = __init; - do + _Tp __tmp(__b(__init, *__first)); + while (true) { - __init = __b(__init, *__first); - *__result = __saved; - __saved = __init; + *__result = _VSTD::move(__init); ++__result; - } while (++__first != __last); + ++__first; + if (__first == __last) + break; + __init = _VSTD::move(__tmp); + __tmp = __b(__init, *__first); + } } return __result; } |