|
|
|
|
|
by gpderetta
703 days ago
|
|
template<range R, regular X, invocable<range_value<R>, X> F>
requires same_as<invoke_result_t<F, R, X>, X>
auto fold(R&& range, F f, X accumulator) {
for(auto x: range)
accumulator = f(x, accumulator);
return accumulator;
}
I can call that with a function returning a custom unit type: enum class void_t { Void };
fold(my_range, [](auto&& elem, void_t) { return Void; }, Void);
But not with void: fold(my_range, [](auto&& elem, void) { return; }, void{});
which is very annoying and requires fold to special case 'void' via metaprogramming. |
|