24 template <
typename...
R>
27 std::tuple<decltype(
r.begin())...> iterators;
28 static_assert(std::tuple_size_v<decltype(iterators)> > 0);
30 using reference = std::tuple<decltype(*
r.begin())...>;
33 std::apply([](
auto &...
args) { (++
args, ...); }, iterators);
38 return std::get<0>(iterators) != std::get<0>(other.iterators);
42 return std::apply([](
auto &...
args) {
return reference{*
args...}; },
51 auto end() {
return e; }