Hi Mark, An alternative to Niebler's range-v3 and cppitertools you might want to try is boost.range (it is a part of the default boost package, I don't know whether it has everything you'd need for this).
I haven't seen where you used struct-bindings - the code compiles fine with gcc -std=c++14. Cool you've started playing with things like these :) Cheers, Ivan