#pragma once #include #include #define FWD(x) std::forward(x) namespace stream::ranges { template struct join_view { private: using iterator = ::iterator::joining_iterator>; private: S stream_; public: join_view(S && stream) : stream_(FWD(stream)) {} auto begin() const { return iterator(stream_); } auto end() const { return sentinal; } bool empty() const { return begin() == end(); } }; } namespace stream::ranges::views { struct join { template friend auto operator|(Stream && stream, join) { return join_view(FWD(stream)); } }; } #undef FWD