Header file range/v3/algorithm/equal_range.hpp

#include <range/v3/range_fwd.hpp>

#include <range/v3/begin_end.hpp>

#include <range/v3/distance.hpp>

#include <range/v3/range_concepts.hpp>

#include <range/v3/range_traits.hpp>

#include <range/v3/iterator_range.hpp>

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

#include <range/v3/algorithm/aux_/equal_range_n.hpp>

#include <range/v3/algorithm/aux_/lower_bound_n.hpp>

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

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

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

namespace ranges
{
    inline namespace v3
    {
        struct equal_range_fn;
        
        inline namespace 
        {
            constexpr auto& equal_range = static_const<with_braced_init_args<equal_range_fn>>::value;
        }
    }
}

Class ranges::v3::equal_range_fn

struct equal_range_fn
{
    template <typename I, typename S, typename V, typename C = ordered_less, typename P = ident, int _concept_requires_40 = 42, typename std::enable_if<(_concept_requires_40==43)||(Sentinel<S, I>()&&!SizedSentinel<S, I>()&&BinarySearchable<I, V, C, P>()), int>::type=0>
    iterator_range<I> operator()(I begin, S end, V const& val, C pred_ = C{}, P proj_ = P{}) const;
    
    template <typename I, typename S, typename V, typename C = ordered_less, typename P = ident, int _concept_requires_91 = 42, typename std::enable_if<(_concept_requires_91==43)||(SizedSentinel<S, I>()&&BinarySearchable<I, V, C, P>()), int>::type=0>
    iterator_range<I> operator()(I begin, S end, V const& val, C pred = C{}, P proj = P{}) const;
    
    template <typename Rng, typename V, typename C = ordered_less, typename P = ident, typename I = range_iterator_t<Rng>, int _concept_requires_102 = 42, typename std::enable_if<(_concept_requires_102==43)||(Range<Rng>()&&!SizedRange<Rng>()&&BinarySearchable<I, V, C, P>()), int>::type=0>
    meta::if_<std::is_lvalue_reference<Rng>, iterator_range<I>, dangling<iterator_range<I>>> operator()(Rng&& rng, V const& val, C pred = C{}, P proj = P{}) const;
    
    template <typename Rng, typename V, typename C = ordered_less, typename P = ident, typename I = range_iterator_t<Rng>, int _concept_requires_112 = 42, typename std::enable_if<(_concept_requires_112==43)||(SizedRange<Rng>()&&BinarySearchable<I, V, C, P>()), int>::type=0>
    meta::if_<std::is_lvalue_reference<Rng>, iterator_range<I>, dangling<iterator_range<I>>> operator()(Rng&& rng, V const& val, C pred = C{}, P proj = P{}) const;
};

@{


Variable ranges::v3::equal_range

constexpr auto& equal_range = static_const<with_braced_init_args<equal_range_fn>>::value;

equal_range_fn