#pragma once #include #include #include "detail/arrow_proxy.h" namespace iterator { template class zip_iterator { public: using value_type = std::tuple; using reference = std::tuple; using pointer = void; // tuple cannot be accessed by member using difference_type = std::common_type_t; using iterator_category = std::common_type_t; private: std::tuple iterators_; public: zip_iterator() = default; zip_iterator(Iterators &&... iters) : iterators_(iters...) {} reference operator*() const { return reference(*std::get(iterators_)...); } }; } template iterator::zip_iterator make_zip_iterator(Iterators &&... iters) { return {std::forward(iters)...}; }