These are part of C++17. Later, we'll get the parallel versions.
https://gist.github.com/brycelelbach/137f1e45b737d615134e228ec0c84f3a <- some crude tests I wrote based on slides/notes of mine.
EDIT: Okay, looks good, your implementation passes my little tests.
This implementation works, but performs unnecessary operations.
The "next" result is calculated in each iteration; this means one unnecessary application of the binary op (the "next" result on the final iteration).
EDIT: I don't think we can avoid this for the case of InputIterators (and ForwardIterators?), because we can't decrement last.