Header file range/v3/algorithm/aux_/lower_bound_n.hpp

#include <range/v3/range_fwd.hpp>

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

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

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

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

namespace ranges
{
    inline namespace v3
    {
        namespace detail
        {
            template <typename Pred, typename Val>
            struct lower_bound_predicate
            {
                Pred& pred_;
                
                Val& val_;
                
                template <typename T>
                bool operator()(T&& t) const;
            };
            
            template <typename Pred, typename Val>
            lower_bound_predicate<Pred, Val> make_lower_bound_predicate(Pred& pred, Val& val);
        }
        
        namespace aux
        {
            struct lower_bound_n_fn
            {
                template <typename I, typename V2, typename C = ordered_less, typename P = ident, int _concept_requires_58 = 42, typename std::enable_if<(_concept_requires_58==43)||(BinarySearchable<I, V2, C, P>()), int>::type=0>
                I operator()(I begin, iterator_difference_t<I> d, V2 const& val, C pred_ = C{}, P proj = P{}) const;
            };
            
            inline namespace 
            {
                constexpr auto& lower_bound_n = static_const<lower_bound_n_fn>::value;
            }
        }
    }
}