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

#include <range/v3/range_fwd.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
    {
        template <typename I, typename C, typename P = ident, typename V = iterator_common_reference_t<I>, typename = concepts::Callable::result_t<P, V>>
        using PartitionPointable = meta::strict_and<ForwardIterator<I>, IndirectCallablePredicate<C, projected<I, P>>>;
        
        namespace aux
        {
            struct partition_point_n_fn
            {
                template <typename I, typename C, typename P = ident, int _concept_requires_39 = 42, typename std::enable_if<(_concept_requires_39==43)||(PartitionPointable<I, C, P>()), int>::type=0>
                I operator()(I begin, iterator_difference_t<I> d, C pred_, P proj_ = P{}) const;
            };
            
            inline namespace 
            {
                constexpr auto& partition_point_n = static_const<partition_point_n_fn>::value;
            }
        }
    }
}