#pragma once #include "traits.hpp" namespace stream { namespace detail { template class stream_base; template class iterator_impl; }} namespace stream { template class iterator; template struct map_t; template struct filter_t; template struct flatmap_t; template using stream = detail::stream_base; // Should I override instead? }