#pragma once #include #include #include #include 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; } SFINAE(detail::has_empty_v, bool) empty() const { return stream_.empty(); } }; template join_view(S &&) -> join_view; } namespace stream::ranges::views { struct join { template friend auto operator|(Stream && stream, join) { return join_view(FWD(stream)); } }; } #include