Header file range/v3/algorithm/find_end.hpp

#include <meta/meta.hpp>

#include <range/v3/range_fwd.hpp>

#include <range/v3/begin_end.hpp>

#include <range/v3/range_concepts.hpp>

#include <range/v3/range_traits.hpp>

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

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

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

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

namespace ranges
{
    inline namespace v3
    {
        namespace detail
        {
            template <typename I, typename S, int _concept_requires_35 = 42, typename std::enable_if<(_concept_requires_35==43)||(InputIterator<I>()&&Sentinel<S, I>()), int>::type=0>
            I next_to_if(I i, S s, std::true_type);
            
            template <typename I, typename S, int _concept_requires_42 = 42, typename std::enable_if<(_concept_requires_42==43)||(InputIterator<I>()&&Sentinel<S, I>()), int>::type=0>
            S next_to_if(I, S s, std::false_type);
            
            template <bool B, typename I, typename S, int _concept_requires_49 = 42, typename std::enable_if<(_concept_requires_49==43)||(InputIterator<I>()&&Sentinel<S, I>()), int>::type=0>
            meta::if_c<B, I, S> next_to_if(I i, S s);
        }
        
        struct find_end_fn;
        
        inline namespace 
        {
            constexpr auto& find_end = static_const<with_braced_init_args<find_end_fn>>::value;
        }
    }
}

Class ranges::v3::find_end_fn

struct find_end_fn
{
    template <typename I1, typename S1, typename I2, typename S2, typename R = equal_to, typename P = ident, int _concept_requires_169 = 42, typename std::enable_if<(_concept_requires_169==43)||(ForwardIterator<I1>()&&Sentinel<S1, I1>()&&ForwardIterator<I2>()&&Sentinel<S2, I2>()&&IndirectCallableRelation<R, projected<I1, P>, I2>()), int>::type=0>
    I1 operator()(I1 begin1, S1 end1, I2 begin2, S2 end2, R pred = R{}, P proj = P{}) const;
    
    template <typename Rng1, typename Rng2, typename R = equal_to, typename P = ident, typename I1 = range_iterator_t<Rng1>, typename I2 = range_iterator_t<Rng2>, int _concept_requires_185 = 42, typename std::enable_if<(_concept_requires_185==43)||(ForwardRange<Rng1>()&&ForwardRange<Rng2>()&&IndirectCallableRelation<R, projected<I1, P>, I2>()), int>::type=0>
    range_safe_iterator_t<Rng1> operator()(Rng1&& rng1, Rng2&& rng2, R pred = R{}, P proj = P{}) const;
};

@{


Variable ranges::v3::find_end

constexpr auto& find_end = static_const<with_braced_init_args<find_end_fn>>::value;

find_end_fn