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