#pragma once #include namespace stream { namespace detail { template class source_stream { public: explicit source_stream(C && cont) : source_(std::forward(cont)) {} auto begin() { return iterator(source_.begin()); } auto end() { return iterator(source_.end()); } private: C source_; }; template class range_stream { public: explicit range_stream(It b, It e) : begin_(b), end_(e) {} auto begin() { return iterator(begin_); } auto end() { return iterator(end_); } private: It begin_, end_; }; }}