#ifndef PFOR_PFOR_TUPLE_VIEW_H #define PFOR_PFOR_TUPLE_VIEW_H #include #include #include "mp/meta.h" #include "mp/pack.h" namespace pfor { template class TupleView; template class TupleView, Pack...>> { public: using Tuple = std::tuple; using View = Pack...>; private: Tuple& _tuple; public: TupleView(Tuple& tuple): _tuple{tuple} {} template decltype(auto) get() { return std::get::value>(_tuple); } template decltype(auto) get() const { return std::get::value>(_tuple); } }; template auto makeTupleView(std::tuple& tuple, Pack...>) { return TupleView, Pack...>>{tuple}; } } namespace std { template constexpr decltype(auto) get(pfor::TupleView& tupleView) { return tupleView.template get(); } template constexpr decltype(auto) get(pfor::TupleView const& tupleView) { return tupleView.template get(); } } #endif