// // Copyright Eric Niebler 2014-present // // Use, modification and distribution is subject to the // Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // Project home: https://github.com/ericniebler/range-v3 // #ifndef RANGES_V3_VIEW_UNBOUNDED_HPP #define RANGES_V3_VIEW_UNBOUNDED_HPP #include #include #include #include namespace ranges { /// \addtogroup group-views /// @{ template struct unbounded_view : view_interface, infinite> { private: I it_; public: unbounded_view() = default; constexpr explicit unbounded_view(I it) : it_(detail::move(it)) {} constexpr I begin() const { return it_; } constexpr unreachable_sentinel_t end() const { return {}; } }; namespace views { struct unbounded_fn { template constexpr auto operator()(I it) const -> CPP_ret(unbounded_view)( // requires input_iterator) { return unbounded_view{detail::move(it)}; } }; /// \relates unbounded_fn /// \ingroup group-views RANGES_INLINE_VARIABLE(unbounded_fn, unbounded) } // namespace views /// @} } // namespace ranges #include RANGES_SATISFY_BOOST_RANGE(::ranges::unbounded_view) #endif