Header file range/v3/view/counted.hpp

#include <range/v3/range_fwd.hpp>

#include <range/v3/view_facade.hpp>

#include <range/v3/iterator_range.hpp>

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

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

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

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

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

namespace ranges
{
    inline namespace v3
    {
        template <typename I, typename D>
        struct counted_view;
        
        namespace view
        {
            struct counted_fn
            {
                template <typename I, int _concept_requires_64 = 42, typename std::enable_if<(_concept_requires_64==43)||(Iterator<I>()), int>::type=0>
                counted_view<I> operator()(I it, iterator_difference_t<I> n) const;
                
                template <typename T>
                iterator_range<T*> operator()(T* t, std::ptrdiff_t n) const;
            };
            
            inline namespace 
            {
                constexpr auto& counted = static_const<counted_fn>::value;
            }
        }
    }
}

Class template ranges::v3::counted_view<I, D>

template <typename I, typename D>
struct counted_view
: view_facade<counted_view<I, D>, finite>
{
    counted_view() = default;
    
    counted_view(I it, D n);
    
    size_type_ size() const;
};

@{