std::visit should have been called transform and should have worked with tuples
std::reduce as it is now should have just been an std::accumulate overload (barring the default init, which is evil, and should be instead inferred from the operator when possible, through some standard interface)
a function called reduce should support partial reductions