Header file range/v3/view/generate_n.hpp

#include <meta/meta.hpp>

#include <range/v3/range_fwd.hpp>

#include <range/v3/range_traits.hpp>

#include <range/v3/size.hpp>

#include <range/v3/view_facade.hpp>

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

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

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

namespace ranges
{
    inline namespace v3
    {
        template <typename G>
        struct generate_n_view;
        
        namespace view
        {
            struct generate_n_fn
            {
                template <typename G>
                using Concept = meta::and_<Function<G>, meta::not_<Same<void, concepts::Function::result_t<G>>>>;
                
                template <typename G, int _concept_requires_106 = 42, typename std::enable_if<(_concept_requires_106==43)||(Concept<G>()), int>::type=0>
                generate_n_view<G> operator()(G g, std::size_t n) const;
                
                template <typename G, int _concept_requires_113 = 42, typename std::enable_if<(_concept_requires_113==43)||(!Concept<G>()), int>::type=0>
                void operator()(G, std::size_t) const;
            };
            
            inline namespace 
            {
                constexpr auto& generate_n = static_const<generate_n_fn>::value;
            }
        }
    }
}

Class template ranges::v3::generate_n_view<G>

template <typename G>
struct generate_n_view
: view_facade<generate_n_view<G>, finite>
{
    generate_n_view() = default;
    
    explicit generate_n_view(G g, std::size_t n);
    
    result_t& cached();
    
    std::size_t size() const;
};

@{