Header file range/v3/algorithm/nth_element.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.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/swap.hpp>

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

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

namespace ranges
{
    inline namespace v3
    {
        namespace detail
        {
            template <typename I, typename C, typename P, typename V = iterator_common_reference_t<I>, typename X = concepts::Function::result_t<P, V>, int _concept_requires_51 = 42, typename std::enable_if<(_concept_requires_51==43)||(ForwardIterator<I>()&&Function<P, V>()&&Relation<C, X>()), int>::type=0>
            unsigned sort3(I x, I y, I z, C& pred, P& proj);
            
            template <typename I, typename C, typename P, typename V = iterator_common_reference_t<I>, typename X = concepts::Function::result_t<P, V>, int _concept_requires_89 = 42, typename std::enable_if<(_concept_requires_89==43)||(BidirectionalIterator<I>()&&Function<P, V>()&&Relation<C, X>()), int>::type=0>
            void selection_sort(I begin, I end, C& pred, P& proj);
        }
        
        struct nth_element_fn;
        
        inline namespace 
        {
            constexpr auto& nth_element = static_const<with_braced_init_args<nth_element_fn>>::value;
        }
    }
}

Class ranges::v3::nth_element_fn

struct nth_element_fn
{
    template <typename I, typename S, typename C = ordered_less, typename P = ident, int _concept_requires_108 = 42, typename std::enable_if<(_concept_requires_108==43)||(RandomAccessIterator<I>()&&Sortable<I, C, P>()), int>::type=0>
    I operator()(I begin, I nth, S end_, C pred_ = C{}, P proj_ = P{}) const;
    
    template <typename Rng, typename C = ordered_less, typename P = ident, typename I = range_iterator_t<Rng>, int _concept_requires_300 = 42, typename std::enable_if<(_concept_requires_300==43)||(RandomAccessRange<Rng>()&&Sortable<I, C, P>()), int>::type=0>
    range_safe_iterator_t<Rng> operator()(Rng&& rng, I nth, C pred = C{}, P proj = P{}) const;
};

@{


Variable ranges::v3::nth_element

constexpr auto& nth_element = static_const<with_braced_init_args<nth_element_fn>>::value;

nth_element_fn