Header file range/v3/view/take.hpp

#include <range/v3/range_fwd.hpp>

#include <range/v3/range_traits.hpp>

#include <range/v3/range_concepts.hpp>

#include <range/v3/view_interface.hpp>

#include <range/v3/algorithm/min.hpp>

#include <range/v3/utility/static_const.hpp>

#include <range/v3/utility/functional.hpp>

#include <range/v3/view/take_exactly.hpp>

#include <range/v3/view/view.hpp>

namespace ranges
{
    inline namespace v3
    {
        template <typename Rng>
        struct take_view
        : view_facade<take_view<Rng>, finite>
        {
            take_view() = default;
            
            take_view(Rng rng, difference_type_ n);
            
            Rng& base();
            
            Rng const& base() const;
        };
        
        namespace view
        {
            struct take_fn
            {
                template <typename Rng, int _concept_requires_140 = 42, typename std::enable_if<(_concept_requires_140==43)||(InputRange<Rng>()), int>::type=0>
                decltype(take_fn::invoke_(std::forward<Rng>(rng), n)) operator()(Rng&& rng, range_difference_t<Rng> n) const;
                
                template <typename Rng, typename T, int _concept_requires_148 = 42, typename std::enable_if<(_concept_requires_148==43)||(!InputRange<Rng>()), int>::type=0>
                void operator()(Rng&&, T&&) const;
            };
            
            inline namespace 
            {
                constexpr auto& take = static_const<view<take_fn>>::value;
            }
        }
    }
}