Header file range/v3/view/delimit.hpp

#include <meta/meta.hpp>

#include <range/v3/range_fwd.hpp>

#include <range/v3/range_concepts.hpp>

#include <range/v3/view_adaptor.hpp>

#include <range/v3/iterator_range.hpp>

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

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

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

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

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

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

namespace ranges
{
    inline namespace v3
    {
        template <typename Rng, typename Val>
        struct delimit_view;
        
        namespace view
        {
            struct delimit_impl_fn
            {
                template <typename Rng, typename Val>
                using Concept = meta::and_<Range<Rng>, EqualityComparable<Val, range_common_reference_t<Rng>>>;
                
                template <typename Rng, typename Val, int _concept_requires_87 = 42, typename std::enable_if<(_concept_requires_87==43)||(Concept<Rng, Val>()), int>::type=0>
                delimit_view<all_t<Rng>, Val> operator()(Rng&& rng, Val value) const;
                
                template <typename Rng, typename Val, int _concept_requires_95 = 42, typename std::enable_if<(_concept_requires_95==43)||(!Concept<Rng, Val>()), int>::type=0>
                void operator()(Rng&&, Val) const;
            };
            
            struct delimit_fn
            : view<struct ranges::v3::view::delimit_impl_fn>
            {
                using view<delimit_impl_fn>::operator();
                
                template <typename I, typename Val, int _concept_requires_113 = 42, typename std::enable_if<(_concept_requires_113==43)||(InputIterator<I>()), int>::type=0>
                delimit_view<iterator_range<I, unreachable>, Val> operator()(I begin, Val value) const;
            };
            
            inline namespace 
            {
                constexpr auto& delimit = static_const<delimit_fn>::value;
            }
        }
    }
}

Class template ranges::v3::delimit_view<Rng, Val>

template <typename Rng, typename Val>
struct delimit_view
: view_adaptor<delimit_view<Rng, Val>, Rng, is_finite<Rng>::value ? finite : unknown>
{
    delimit_view() = default;
    
    delimit_view(Rng rng, Val value);
};

@{