diff --git a/ostd/algorithm.hh b/ostd/algorithm.hh index cefe929..6da06eb 100644 --- a/ostd/algorithm.hh +++ b/ostd/algorithm.hh @@ -553,7 +553,7 @@ inline T foldl(R range, T init) { } template -inline T foldl(R range, T init, F func) { +inline T foldl_f(R range, T init, F func) { for (; !range.empty(); range.pop_front()) init = func(init, range.front()); return init; @@ -562,6 +562,11 @@ inline T foldl(R range, T init, F func) { template inline auto foldl(T init) { return [&init](auto &obj) { return foldl(obj, move(init)); }; } +template inline auto foldl_f(T init, F func) { + return [&init, &func](auto &obj) { + return foldl_f(obj, move(init), move(func)); + }; +} template inline T foldr(R range, T init) { @@ -571,7 +576,7 @@ inline T foldr(R range, T init) { } template -inline T foldr(R range, T init, F func) { +inline T foldr_f(R range, T init, F func) { for (; !range.empty(); range.pop_back()) init = func(init, range.back()); return init; @@ -580,6 +585,11 @@ inline T foldr(R range, T init, F func) { template inline auto foldr(T init) { return [&init](auto &obj) { return foldr(obj, move(init)); }; } +template inline auto foldr_f(T init, F func) { + return [&init, &func](auto &obj) { + return foldr_f(obj, move(init), move(func)); + }; +} template struct MapRange: InputRange<