146035553Spatrick// -*- C++ -*- 2*dc37c87aSrobert//===----------------------------------------------------------------------===// 346035553Spatrick// 446035553Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 546035553Spatrick// See https://llvm.org/LICENSE.txt for license information. 646035553Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 746035553Spatrick// 846035553Spatrick//===----------------------------------------------------------------------===// 946035553Spatrick 1046035553Spatrick#ifndef _LIBCPP_ALGORITHM 1146035553Spatrick#define _LIBCPP_ALGORITHM 1246035553Spatrick 1346035553Spatrick/* 1446035553Spatrick algorithm synopsis 1546035553Spatrick 1646035553Spatrick#include <initializer_list> 1746035553Spatrick 1846035553Spatricknamespace std 1946035553Spatrick{ 2046035553Spatrick 21dcb03dacSrobertnamespace ranges { 22*dc37c87aSrobert 23*dc37c87aSrobert // [algorithms.results], algorithm result types 24*dc37c87aSrobert template <class I, class F> 25*dc37c87aSrobert struct in_fun_result; // since C++20 26*dc37c87aSrobert 27*dc37c87aSrobert template <class I1, class I2> 28*dc37c87aSrobert struct in_in_result; // since C++20 29*dc37c87aSrobert 30*dc37c87aSrobert template <class I, class O> 31*dc37c87aSrobert struct in_out_result; // since C++20 32*dc37c87aSrobert 33*dc37c87aSrobert template <class I1, class I2, class O> 34*dc37c87aSrobert struct in_in_out_result; // since C++20 35*dc37c87aSrobert 36*dc37c87aSrobert template <class I, class O1, class O2> 37*dc37c87aSrobert struct in_out_out_result; // since C++20 38*dc37c87aSrobert 39*dc37c87aSrobert template <class I1, class I2> 40*dc37c87aSrobert struct min_max_result; // since C++20 41*dc37c87aSrobert 42*dc37c87aSrobert template <class I> 43*dc37c87aSrobert struct in_found_result; // since C++20 44*dc37c87aSrobert 45*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 46*dc37c87aSrobert indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> // since C++20 47*dc37c87aSrobert constexpr I min_element(I first, S last, Comp comp = {}, Proj proj = {}); 48*dc37c87aSrobert 49*dc37c87aSrobert template<forward_range R, class Proj = identity, 50*dc37c87aSrobert indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> // since C++20 51*dc37c87aSrobert constexpr borrowed_iterator_t<R> min_element(R&& r, Comp comp = {}, Proj proj = {}); 52*dc37c87aSrobert 53*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 54*dc37c87aSrobert indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 55*dc37c87aSrobert constexpr I ranges::max_element(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 56*dc37c87aSrobert 57*dc37c87aSrobert template<forward_range R, class Proj = identity, 58*dc37c87aSrobert indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 59*dc37c87aSrobert constexpr borrowed_iterator_t<R> ranges::max_element(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 60*dc37c87aSrobert 61*dc37c87aSrobert template<class I1, class I2> 62*dc37c87aSrobert using mismatch_result = in_in_result<I1, I2>; 63*dc37c87aSrobert 64*dc37c87aSrobert template <input_iterator I1, sentinel_for<_I1> S1, input_iterator I2, sentinel_for<_I2> S2, 65*dc37c87aSrobert class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 66*dc37c87aSrobert requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 67*dc37c87aSrobert constexpr mismatch_result<_I1, _I2> 68*dc37c87aSrobert mismatch()(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {}) // since C++20 69*dc37c87aSrobert 70*dc37c87aSrobert template <input_range R1, input_range R2, 71*dc37c87aSrobert class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 72*dc37c87aSrobert requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 73*dc37c87aSrobert constexpr mismatch_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>> 74*dc37c87aSrobert mismatch(R1&& r1, R2&& r2, Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {}) // since C++20 75*dc37c87aSrobert 76dcb03dacSrobert requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 77dcb03dacSrobert constexpr I find(I first, S last, const T& value, Proj proj = {}); // since C++20 78dcb03dacSrobert 79dcb03dacSrobert template<input_range R, class T, class Proj = identity> 80dcb03dacSrobert requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> 81dcb03dacSrobert constexpr borrowed_iterator_t<R> 82dcb03dacSrobert find(R&& r, const T& value, Proj proj = {}); // since C++20 83dcb03dacSrobert 84dcb03dacSrobert template<input_iterator I, sentinel_for<I> S, class Proj = identity, 85dcb03dacSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 86dcb03dacSrobert constexpr I find_if(I first, S last, Pred pred, Proj proj = {}); // since C++20 87dcb03dacSrobert 88dcb03dacSrobert template<input_range R, class Proj = identity, 89dcb03dacSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 90dcb03dacSrobert constexpr borrowed_iterator_t<R> 91dcb03dacSrobert find_if(R&& r, Pred pred, Proj proj = {}); // since C++20 92dcb03dacSrobert 93dcb03dacSrobert template<input_iterator I, sentinel_for<I> S, class Proj = identity, 94dcb03dacSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 95dcb03dacSrobert constexpr I find_if_not(I first, S last, Pred pred, Proj proj = {}); // since C++20 96dcb03dacSrobert 97dcb03dacSrobert template<input_range R, class Proj = identity, 98dcb03dacSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 99dcb03dacSrobert constexpr borrowed_iterator_t<R> 100dcb03dacSrobert find_if_not(R&& r, Pred pred, Proj proj = {}); // since C++20 101*dc37c87aSrobert 102*dc37c87aSrobert template<class T, class Proj = identity, 103*dc37c87aSrobert indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 104*dc37c87aSrobert constexpr const T& min(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 105*dc37c87aSrobert 106*dc37c87aSrobert template<copyable T, class Proj = identity, 107*dc37c87aSrobert indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 108*dc37c87aSrobert constexpr T min(initializer_list<T> r, Comp comp = {}, Proj proj = {}); // since C++20 109*dc37c87aSrobert 110*dc37c87aSrobert template<input_range R, class Proj = identity, 111*dc37c87aSrobert indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 112*dc37c87aSrobert requires indirectly_copyable_storable<iterator_t<R>, range_value_t<R>*> 113*dc37c87aSrobert constexpr range_value_t<R> 114*dc37c87aSrobert min(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 115*dc37c87aSrobert 116*dc37c87aSrobert template<class T, class Proj = identity, 117*dc37c87aSrobert indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 118*dc37c87aSrobert constexpr const T& max(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 119*dc37c87aSrobert 120*dc37c87aSrobert template<copyable T, class Proj = identity, 121*dc37c87aSrobert indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 122*dc37c87aSrobert constexpr T max(initializer_list<T> r, Comp comp = {}, Proj proj = {}); // since C++20 123*dc37c87aSrobert 124*dc37c87aSrobert template<input_range R, class Proj = identity, 125*dc37c87aSrobert indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 126*dc37c87aSrobert requires indirectly_copyable_storable<iterator_t<R>, range_value_t<R>*> 127*dc37c87aSrobert constexpr range_value_t<R> 128*dc37c87aSrobert max(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 129*dc37c87aSrobert 130*dc37c87aSrobert template<class I, class O> 131*dc37c87aSrobert using unary_transform_result = in_out_result<I, O>; // since C++20 132*dc37c87aSrobert 133*dc37c87aSrobert template<class I1, class I2, class O> 134*dc37c87aSrobert using binary_transform_result = in_in_out_result<I1, I2, O>; // since C++20 135*dc37c87aSrobert 136*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, 137*dc37c87aSrobert copy_constructible F, class Proj = identity> 138*dc37c87aSrobert requires indirectly_writable<O, indirect_result_t<F&, projected<I, Proj>>> 139*dc37c87aSrobert constexpr ranges::unary_transform_result<I, O> 140*dc37c87aSrobert transform(I first1, S last1, O result, F op, Proj proj = {}); // since C++20 141*dc37c87aSrobert 142*dc37c87aSrobert template<input_range R, weakly_incrementable O, copy_constructible F, 143*dc37c87aSrobert class Proj = identity> 144*dc37c87aSrobert requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R>, Proj>>> 145*dc37c87aSrobert constexpr ranges::unary_transform_result<borrowed_iterator_t<R>, O> 146*dc37c87aSrobert transform(R&& r, O result, F op, Proj proj = {}); // since C++20 147*dc37c87aSrobert 148*dc37c87aSrobert template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 149*dc37c87aSrobert weakly_incrementable O, copy_constructible F, class Proj1 = identity, 150*dc37c87aSrobert class Proj2 = identity> 151*dc37c87aSrobert requires indirectly_writable<O, indirect_result_t<F&, projected<I1, Proj1>, 152*dc37c87aSrobert projected<I2, Proj2>>> 153*dc37c87aSrobert constexpr ranges::binary_transform_result<I1, I2, O> 154*dc37c87aSrobert transform(I1 first1, S1 last1, I2 first2, S2 last2, O result, 155*dc37c87aSrobert F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 156*dc37c87aSrobert 157*dc37c87aSrobert template<input_range R1, input_range R2, weakly_incrementable O, 158*dc37c87aSrobert copy_constructible F, class Proj1 = identity, class Proj2 = identity> 159*dc37c87aSrobert requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>, 160*dc37c87aSrobert projected<iterator_t<R2>, Proj2>>> 161*dc37c87aSrobert constexpr ranges::binary_transform_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>, O> 162*dc37c87aSrobert transform(R1&& r1, R2&& r2, O result, 163*dc37c87aSrobert F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 164*dc37c87aSrobert 165*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, class T, class Proj = identity> 166*dc37c87aSrobert requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 167*dc37c87aSrobert constexpr iter_difference_t<I> 168*dc37c87aSrobert count(I first, S last, const T& value, Proj proj = {}); // since C++20 169*dc37c87aSrobert 170*dc37c87aSrobert template<input_range R, class T, class Proj = identity> 171*dc37c87aSrobert requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> 172*dc37c87aSrobert constexpr range_difference_t<R> 173*dc37c87aSrobert count(R&& r, const T& value, Proj proj = {}); // since C++20 174*dc37c87aSrobert 175*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, class Proj = identity, 176*dc37c87aSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 177*dc37c87aSrobert constexpr iter_difference_t<I> 178*dc37c87aSrobert count_if(I first, S last, Pred pred, Proj proj = {}); // since C++20 179*dc37c87aSrobert 180*dc37c87aSrobert template<input_range R, class Proj = identity, 181*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 182*dc37c87aSrobert constexpr range_difference_t<R> 183*dc37c87aSrobert count_if(R&& r, Pred pred, Proj proj = {}); // since C++20 184*dc37c87aSrobert 185*dc37c87aSrobert template<class T> 186*dc37c87aSrobert using minmax_result = min_max_result<T>; 187*dc37c87aSrobert 188*dc37c87aSrobert template<class T, class Proj = identity, 189*dc37c87aSrobert indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 190*dc37c87aSrobert constexpr ranges::minmax_result<const T&> 191*dc37c87aSrobert minmax(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 192*dc37c87aSrobert 193*dc37c87aSrobert template<copyable T, class Proj = identity, 194*dc37c87aSrobert indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 195*dc37c87aSrobert constexpr ranges::minmax_result<T> 196*dc37c87aSrobert minmax(initializer_list<T> r, Comp comp = {}, Proj proj = {}); // since C++20 197*dc37c87aSrobert 198*dc37c87aSrobert template<input_range R, class Proj = identity, 199*dc37c87aSrobert indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 200*dc37c87aSrobert requires indirectly_copyable_storable<iterator_t<R>, range_value_t<R>*> 201*dc37c87aSrobert constexpr ranges::minmax_result<range_value_t<R>> 202*dc37c87aSrobert minmax(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 203*dc37c87aSrobert 204*dc37c87aSrobert template<class I> 205*dc37c87aSrobert using minmax_element_result = min_max_result<I>; 206*dc37c87aSrobert 207*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 208*dc37c87aSrobert indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 209*dc37c87aSrobert constexpr ranges::minmax_element_result<I> 210*dc37c87aSrobert minmax_element(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 211*dc37c87aSrobert 212*dc37c87aSrobert template<forward_range R, class Proj = identity, 213*dc37c87aSrobert indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 214*dc37c87aSrobert constexpr ranges::minmax_element_result<borrowed_iterator_t<R>> 215*dc37c87aSrobert minmax_element(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 216*dc37c87aSrobert 217*dc37c87aSrobert template<class I, class O> 218*dc37c87aSrobert using copy_result = in_out_result<I, O>; // since C++20 219*dc37c87aSrobert 220*dc37c87aSrobert template<class I, class O> 221*dc37c87aSrobert using copy_n_result = in_out_result<I, O>; // since C++20 222*dc37c87aSrobert 223*dc37c87aSrobert template<class I, class O> 224*dc37c87aSrobert using copy_if_result = in_out_result<I, O>; // since C++20 225*dc37c87aSrobert 226*dc37c87aSrobert template<class I1, class I2> 227*dc37c87aSrobert using copy_backward_result = in_out_result<I1, I2>; // since C++20 228*dc37c87aSrobert 229*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, weakly_incrementable O> 230*dc37c87aSrobert requires indirectly_copyable<I, O> 231*dc37c87aSrobert constexpr ranges::copy_result<I, O> ranges::copy(I first, S last, O result); // since C++20 232*dc37c87aSrobert 233*dc37c87aSrobert template<input_range R, weakly_incrementable O> 234*dc37c87aSrobert requires indirectly_copyable<iterator_t<R>, O> 235*dc37c87aSrobert constexpr ranges::copy_result<borrowed_iterator_t<R>, O> ranges::copy(R&& r, O result); // since C++20 236*dc37c87aSrobert 237*dc37c87aSrobert template<input_iterator I, weakly_incrementable O> 238*dc37c87aSrobert requires indirectly_copyable<I, O> 239*dc37c87aSrobert constexpr ranges::copy_n_result<I, O> 240*dc37c87aSrobert ranges::copy_n(I first, iter_difference_t<I> n, O result); // since C++20 241*dc37c87aSrobert 242*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity, 243*dc37c87aSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 244*dc37c87aSrobert requires indirectly_copyable<I, O> 245*dc37c87aSrobert constexpr ranges::copy_if_result<I, O> 246*dc37c87aSrobert ranges::copy_if(I first, S last, O result, Pred pred, Proj proj = {}); // since C++20 247*dc37c87aSrobert 248*dc37c87aSrobert template<input_range R, weakly_incrementable O, class Proj = identity, 249*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 250*dc37c87aSrobert requires indirectly_copyable<iterator_t<R>, O> 251*dc37c87aSrobert constexpr ranges::copy_if_result<borrowed_iterator_t<R>, O> 252*dc37c87aSrobert ranges::copy_if(R&& r, O result, Pred pred, Proj proj = {}); // since C++20 253*dc37c87aSrobert 254*dc37c87aSrobert template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2> 255*dc37c87aSrobert requires indirectly_copyable<I1, I2> 256*dc37c87aSrobert constexpr ranges::copy_backward_result<I1, I2> 257*dc37c87aSrobert ranges::copy_backward(I1 first, S1 last, I2 result); // since C++20 258*dc37c87aSrobert 259*dc37c87aSrobert template<bidirectional_range R, bidirectional_iterator I> 260*dc37c87aSrobert requires indirectly_copyable<iterator_t<R>, I> 261*dc37c87aSrobert constexpr ranges::copy_backward_result<borrowed_iterator_t<R>, I> 262*dc37c87aSrobert ranges::copy_backward(R&& r, I result); // since C++20 263*dc37c87aSrobert 264*dc37c87aSrobert template<class I, class F> 265*dc37c87aSrobert using for_each_result = in_fun_result<I, F>; // since C++20 266*dc37c87aSrobert 267*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, class Proj = identity, 268*dc37c87aSrobert indirectly_unary_invocable<projected<I, Proj>> Fun> 269*dc37c87aSrobert constexpr ranges::for_each_result<I, Fun> 270*dc37c87aSrobert ranges::for_each(I first, S last, Fun f, Proj proj = {}); // since C++20 271*dc37c87aSrobert 272*dc37c87aSrobert template<input_range R, class Proj = identity, 273*dc37c87aSrobert indirectly_unary_invocable<projected<iterator_t<R>, Proj>> Fun> 274*dc37c87aSrobert constexpr ranges::for_each_result<borrowed_iterator_t<R>, Fun> 275*dc37c87aSrobert ranges::for_each(R&& r, Fun f, Proj proj = {}); // since C++20 276*dc37c87aSrobert 277*dc37c87aSrobert template<input_iterator I, class Proj = identity, 278*dc37c87aSrobert indirectly_unary_invocable<projected<I, Proj>> Fun> 279*dc37c87aSrobert constexpr ranges::for_each_n_result<I, Fun> 280*dc37c87aSrobert ranges::for_each_n(I first, iter_difference_t<I> n, Fun f, Proj proj = {}); // since C++20 281*dc37c87aSrobert 282*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, class Proj = identity, 283*dc37c87aSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 284*dc37c87aSrobert constexpr bool ranges::is_partitioned(I first, S last, Pred pred, Proj proj = {}); // since C++20 285*dc37c87aSrobert 286*dc37c87aSrobert template<input_range R, class Proj = identity, 287*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 288*dc37c87aSrobert constexpr bool ranges::is_partitioned(R&& r, Pred pred, Proj proj = {}); // since C++20 289*dc37c87aSrobert 290*dc37c87aSrobert template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 291*dc37c87aSrobert class Proj = identity> 292*dc37c87aSrobert requires sortable<I, Comp, Proj> 293*dc37c87aSrobert constexpr I 294*dc37c87aSrobert ranges::push_heap(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 295*dc37c87aSrobert 296*dc37c87aSrobert template<random_access_range R, class Comp = ranges::less, class Proj = identity> 297*dc37c87aSrobert requires sortable<iterator_t<R>, Comp, Proj> 298*dc37c87aSrobert constexpr borrowed_iterator_t<R> 299*dc37c87aSrobert ranges::push_heap(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 300*dc37c87aSrobert 301*dc37c87aSrobert template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 302*dc37c87aSrobert class Proj = identity> 303*dc37c87aSrobert requires sortable<I, Comp, Proj> 304*dc37c87aSrobert constexpr I 305*dc37c87aSrobert ranges::pop_heap(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 306*dc37c87aSrobert 307*dc37c87aSrobert template<random_access_range R, class Comp = ranges::less, class Proj = identity> 308*dc37c87aSrobert requires sortable<iterator_t<R>, Comp, Proj> 309*dc37c87aSrobert constexpr borrowed_iterator_t<R> 310*dc37c87aSrobert ranges::pop_heap(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 311*dc37c87aSrobert 312*dc37c87aSrobert template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 313*dc37c87aSrobert class Proj = identity> 314*dc37c87aSrobert requires sortable<I, Comp, Proj> 315*dc37c87aSrobert constexpr I 316*dc37c87aSrobert ranges::make_heap(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 317*dc37c87aSrobert 318*dc37c87aSrobert template<random_access_range R, class Comp = ranges::less, class Proj = identity> 319*dc37c87aSrobert requires sortable<iterator_t<R>, Comp, Proj> 320*dc37c87aSrobert constexpr borrowed_iterator_t<R> 321*dc37c87aSrobert ranges::make_heap(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 322*dc37c87aSrobert 323*dc37c87aSrobert template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 324*dc37c87aSrobert class Proj = identity> 325*dc37c87aSrobert requires sortable<I, Comp, Proj> 326*dc37c87aSrobert constexpr I 327*dc37c87aSrobert ranges::sort_heap(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 328*dc37c87aSrobert 329*dc37c87aSrobert template<random_access_range R, class Comp = ranges::less, class Proj = identity> 330*dc37c87aSrobert requires sortable<iterator_t<R>, Comp, Proj> 331*dc37c87aSrobert constexpr borrowed_iterator_t<R> 332*dc37c87aSrobert ranges::sort_heap(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 333*dc37c87aSrobert 334*dc37c87aSrobert template<random_access_iterator I, sentinel_for<I> S, class Proj = identity, 335*dc37c87aSrobert indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 336*dc37c87aSrobert constexpr bool is_heap(I first, S last, Comp comp = {}, Proj proj = {}); // Since C++20 337*dc37c87aSrobert 338*dc37c87aSrobert template<random_access_range R, class Proj = identity, 339*dc37c87aSrobert indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 340*dc37c87aSrobert constexpr bool is_heap(R&& r, Comp comp = {}, Proj proj = {}); // Since C++20 341*dc37c87aSrobert 342*dc37c87aSrobert template<random_access_iterator I, sentinel_for<I> S, class Proj = identity, 343*dc37c87aSrobert indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 344*dc37c87aSrobert constexpr I is_heap_until(I first, S last, Comp comp = {}, Proj proj = {}); // Since C++20 345*dc37c87aSrobert 346*dc37c87aSrobert template<random_access_range R, class Proj = identity, 347*dc37c87aSrobert indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 348*dc37c87aSrobert constexpr borrowed_iterator_t<R> 349*dc37c87aSrobert is_heap_until(R&& r, Comp comp = {}, Proj proj = {}); // Since C++20 350*dc37c87aSrobert 351*dc37c87aSrobert template<bidirectional_iterator I, sentinel_for<I> S> 352*dc37c87aSrobert requires permutable<I> 353*dc37c87aSrobert constexpr I ranges::reverse(I first, S last); // since C++20 354*dc37c87aSrobert 355*dc37c87aSrobert template<bidirectional_range R> 356*dc37c87aSrobert requires permutable<iterator_t<R>> 357*dc37c87aSrobert constexpr borrowed_iterator_t<R> ranges::reverse(R&& r); // since C++20 358*dc37c87aSrobert 359*dc37c87aSrobert template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 360*dc37c87aSrobert class Proj = identity> 361*dc37c87aSrobert requires sortable<I, Comp, Proj> 362*dc37c87aSrobert constexpr I 363*dc37c87aSrobert ranges::sort(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 364*dc37c87aSrobert 365*dc37c87aSrobert template<random_access_range R, class Comp = ranges::less, class Proj = identity> 366*dc37c87aSrobert requires sortable<iterator_t<R>, Comp, Proj> 367*dc37c87aSrobert constexpr borrowed_iterator_t<R> 368*dc37c87aSrobert ranges::sort(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 369*dc37c87aSrobert 370*dc37c87aSrobert template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 371*dc37c87aSrobert class Proj = identity> 372*dc37c87aSrobert requires sortable<I, Comp, Proj> 373*dc37c87aSrobert I ranges::stable_sort(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 374*dc37c87aSrobert 375*dc37c87aSrobert template<random_access_range R, class Comp = ranges::less, class Proj = identity> 376*dc37c87aSrobert requires sortable<iterator_t<R>, Comp, Proj> 377*dc37c87aSrobert borrowed_iterator_t<R> 378*dc37c87aSrobert ranges::stable_sort(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 379*dc37c87aSrobert 380*dc37c87aSrobert template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 381*dc37c87aSrobert class Proj = identity> 382*dc37c87aSrobert requires sortable<I, Comp, Proj> 383*dc37c87aSrobert constexpr I 384*dc37c87aSrobert ranges::partial_sort(I first, I middle, S last, Comp comp = {}, Proj proj = {}); // since C++20 385*dc37c87aSrobert 386*dc37c87aSrobert template<random_access_range R, class Comp = ranges::less, class Proj = identity> 387*dc37c87aSrobert requires sortable<iterator_t<R>, Comp, Proj> 388*dc37c87aSrobert constexpr borrowed_iterator_t<R> 389*dc37c87aSrobert ranges::partial_sort(R&& r, iterator_t<R> middle, Comp comp = {}, Proj proj = {}); // since C++20 390*dc37c87aSrobert 391*dc37c87aSrobert template<class T, output_iterator<const T&> O, sentinel_for<O> S> 392*dc37c87aSrobert constexpr O ranges::fill(O first, S last, const T& value); // since C++20 393*dc37c87aSrobert 394*dc37c87aSrobert template<class T, output_range<const T&> R> 395*dc37c87aSrobert constexpr borrowed_iterator_t<R> ranges::fill(R&& r, const T& value); // since C++20 396*dc37c87aSrobert 397*dc37c87aSrobert template<class T, output_iterator<const T&> O> 398*dc37c87aSrobert constexpr O ranges::fill_n(O first, iter_difference_t<O> n, const T& value); // since C++20 399*dc37c87aSrobert 400*dc37c87aSrobert template<input_or_output_iterator O, sentinel_for<O> S, copy_constructible F> 401*dc37c87aSrobert requires invocable<F&> && indirectly_writable<O, invoke_result_t<F&>> 402*dc37c87aSrobert constexpr O generate(O first, S last, F gen); // Since C++20 403*dc37c87aSrobert 404*dc37c87aSrobert template<class R, copy_constructible F> 405*dc37c87aSrobert requires invocable<F&> && output_range<R, invoke_result_t<F&>> 406*dc37c87aSrobert constexpr borrowed_iterator_t<R> generate(R&& r, F gen); // Since C++20 407*dc37c87aSrobert 408*dc37c87aSrobert template<input_or_output_iterator O, copy_constructible F> 409*dc37c87aSrobert requires invocable<F&> && indirectly_writable<O, invoke_result_t<F&>> 410*dc37c87aSrobert constexpr O generate_n(O first, iter_difference_t<O> n, F gen); // Since C++20 411*dc37c87aSrobert 412*dc37c87aSrobert template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 413*dc37c87aSrobert class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 414*dc37c87aSrobert requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 415*dc37c87aSrobert constexpr bool ranges::equal(I1 first1, S1 last1, I2 first2, S2 last2, 416*dc37c87aSrobert Pred pred = {}, 417*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 418*dc37c87aSrobert 419*dc37c87aSrobert template<input_range R1, input_range R2, class Pred = ranges::equal_to, 420*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity> 421*dc37c87aSrobert requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 422*dc37c87aSrobert constexpr bool ranges::equal(R1&& r1, R2&& r2, Pred pred = {}, 423*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 424*dc37c87aSrobert 425*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, class Proj = identity, 426*dc37c87aSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 427*dc37c87aSrobert constexpr bool ranges::all_of(I first, S last, Pred pred, Proj proj = {}); // since C++20 428*dc37c87aSrobert 429*dc37c87aSrobert template<input_range R, class Proj = identity, 430*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 431*dc37c87aSrobert constexpr bool ranges::all_of(R&& r, Pred pred, Proj proj = {}); // since C++20 432*dc37c87aSrobert 433*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, class Proj = identity, 434*dc37c87aSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 435*dc37c87aSrobert constexpr bool ranges::any_of(I first, S last, Pred pred, Proj proj = {}); // since C++20 436*dc37c87aSrobert 437*dc37c87aSrobert template<input_range R, class Proj = identity, 438*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 439*dc37c87aSrobert constexpr bool ranges::any_of(R&& r, Pred pred, Proj proj = {}); // since C++20 440*dc37c87aSrobert 441*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, class Proj = identity, 442*dc37c87aSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 443*dc37c87aSrobert constexpr bool ranges::none_of(I first, S last, Pred pred, Proj proj = {}); // since C++20 444*dc37c87aSrobert 445*dc37c87aSrobert template<input_range R, class Proj = identity, 446*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 447*dc37c87aSrobert constexpr bool ranges::none_of(R&& r, Pred pred, Proj proj = {}); // since C++20 448*dc37c87aSrobert 449*dc37c87aSrobert template<input_iterator I1, sentinel_for<I1> S1, 450*dc37c87aSrobert random_access_iterator I2, sentinel_for<I2> S2, 451*dc37c87aSrobert class Comp = ranges::less, class Proj1 = identity, class Proj2 = identity> 452*dc37c87aSrobert requires indirectly_copyable<I1, I2> && sortable<I2, Comp, Proj2> && 453*dc37c87aSrobert indirect_strict_weak_order<Comp, projected<I1, Proj1>, projected<I2, Proj2>> 454*dc37c87aSrobert constexpr partial_sort_copy_result<I1, I2> 455*dc37c87aSrobert partial_sort_copy(I1 first, S1 last, I2 result_first, S2 result_last, 456*dc37c87aSrobert Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // Since C++20 457*dc37c87aSrobert 458*dc37c87aSrobert template<input_range R1, random_access_range R2, class Comp = ranges::less, 459*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity> 460*dc37c87aSrobert requires indirectly_copyable<iterator_t<R1>, iterator_t<R2>> && 461*dc37c87aSrobert sortable<iterator_t<R2>, Comp, Proj2> && 462*dc37c87aSrobert indirect_strict_weak_order<Comp, projected<iterator_t<R1>, Proj1>, 463*dc37c87aSrobert projected<iterator_t<R2>, Proj2>> 464*dc37c87aSrobert constexpr partial_sort_copy_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>> 465*dc37c87aSrobert partial_sort_copy(R1&& r, R2&& result_r, Comp comp = {}, 466*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // Since C++20 467*dc37c87aSrobert 468*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 469*dc37c87aSrobert indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 470*dc37c87aSrobert constexpr bool ranges::is_sorted(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 471*dc37c87aSrobert 472*dc37c87aSrobert template<forward_range R, class Proj = identity, 473*dc37c87aSrobert indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 474*dc37c87aSrobert constexpr bool ranges::is_sorted(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 475*dc37c87aSrobert 476*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 477*dc37c87aSrobert indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 478*dc37c87aSrobert constexpr I ranges::is_sorted_until(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 479*dc37c87aSrobert 480*dc37c87aSrobert template<forward_range R, class Proj = identity, 481*dc37c87aSrobert indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 482*dc37c87aSrobert constexpr borrowed_iterator_t<R> 483*dc37c87aSrobert ranges::is_sorted_until(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 484*dc37c87aSrobert 485*dc37c87aSrobert template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 486*dc37c87aSrobert class Proj = identity> 487*dc37c87aSrobert requires sortable<I, Comp, Proj> 488*dc37c87aSrobert constexpr I 489*dc37c87aSrobert ranges::nth_element(I first, I nth, S last, Comp comp = {}, Proj proj = {}); // since C++20 490*dc37c87aSrobert 491*dc37c87aSrobert template<random_access_range R, class Comp = ranges::less, class Proj = identity> 492*dc37c87aSrobert requires sortable<iterator_t<R>, Comp, Proj> 493*dc37c87aSrobert constexpr borrowed_iterator_t<R> 494*dc37c87aSrobert ranges::nth_element(R&& r, iterator_t<R> nth, Comp comp = {}, Proj proj = {}); // since C++20 495*dc37c87aSrobert 496*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity, 497*dc37c87aSrobert indirect_strict_weak_order<const T*, projected<I, Proj>> Comp = ranges::less> 498*dc37c87aSrobert constexpr I upper_bound(I first, S last, const T& value, Comp comp = {}, Proj proj = {}); // since C++20 499*dc37c87aSrobert 500*dc37c87aSrobert template<forward_range R, class T, class Proj = identity, 501*dc37c87aSrobert indirect_strict_weak_order<const T*, projected<iterator_t<R>, Proj>> Comp = 502*dc37c87aSrobert ranges::less> 503*dc37c87aSrobert constexpr borrowed_iterator_t<R> 504*dc37c87aSrobert upper_bound(R&& r, const T& value, Comp comp = {}, Proj proj = {}); // since C++20 505*dc37c87aSrobert 506*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity, 507*dc37c87aSrobert indirect_strict_weak_order<const T*, projected<I, Proj>> Comp = ranges::less> 508*dc37c87aSrobert constexpr I lower_bound(I first, S last, const T& value, Comp comp = {}, 509*dc37c87aSrobert Proj proj = {}); // since C++20 510*dc37c87aSrobert template<forward_range R, class T, class Proj = identity, 511*dc37c87aSrobert indirect_strict_weak_order<const T*, projected<iterator_t<R>, Proj>> Comp = 512*dc37c87aSrobert ranges::less> 513*dc37c87aSrobert constexpr borrowed_iterator_t<R> 514*dc37c87aSrobert lower_bound(R&& r, const T& value, Comp comp = {}, Proj proj = {}); // since C++20 515*dc37c87aSrobert 516*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity, 517*dc37c87aSrobert indirect_strict_weak_order<const T*, projected<I, Proj>> Comp = ranges::less> 518*dc37c87aSrobert constexpr bool binary_search(I first, S last, const T& value, Comp comp = {}, 519*dc37c87aSrobert Proj proj = {}); // since C++20 520*dc37c87aSrobert 521*dc37c87aSrobert template<forward_range R, class T, class Proj = identity, 522*dc37c87aSrobert indirect_strict_weak_order<const T*, projected<iterator_t<R>, Proj>> Comp = 523*dc37c87aSrobert ranges::less> 524*dc37c87aSrobert constexpr bool binary_search(R&& r, const T& value, Comp comp = {}, 525*dc37c87aSrobert Proj proj = {}); // since C++20 526*dc37c87aSrobert 527*dc37c87aSrobert template<permutable I, sentinel_for<I> S, class Proj = identity, 528*dc37c87aSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 529*dc37c87aSrobert constexpr subrange<I> 530*dc37c87aSrobert partition(I first, S last, Pred pred, Proj proj = {}); // Since C++20 531*dc37c87aSrobert 532*dc37c87aSrobert template<forward_range R, class Proj = identity, 533*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 534*dc37c87aSrobert requires permutable<iterator_t<R>> 535*dc37c87aSrobert constexpr borrowed_subrange_t<R> 536*dc37c87aSrobert partition(R&& r, Pred pred, Proj proj = {}); // Since C++20 537*dc37c87aSrobert 538*dc37c87aSrobert template<bidirectional_iterator I, sentinel_for<I> S, class Proj = identity, 539*dc37c87aSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 540*dc37c87aSrobert requires permutable<I> 541*dc37c87aSrobert subrange<I> stable_partition(I first, S last, Pred pred, Proj proj = {}); // Since C++20 542*dc37c87aSrobert 543*dc37c87aSrobert template<bidirectional_range R, class Proj = identity, 544*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 545*dc37c87aSrobert requires permutable<iterator_t<R>> 546*dc37c87aSrobert borrowed_subrange_t<R> stable_partition(R&& r, Pred pred, Proj proj = {}); // Since C++20 547*dc37c87aSrobert 548*dc37c87aSrobert template<input_iterator I1, sentinel_for<I1> S1, forward_iterator I2, sentinel_for<I2> S2, 549*dc37c87aSrobert class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 550*dc37c87aSrobert requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 551*dc37c87aSrobert constexpr I1 ranges::find_first_of(I1 first1, S1 last1, I2 first2, S2 last2, 552*dc37c87aSrobert Pred pred = {}, 553*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 554*dc37c87aSrobert 555*dc37c87aSrobert template<input_range R1, forward_range R2, 556*dc37c87aSrobert class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 557*dc37c87aSrobert requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 558*dc37c87aSrobert constexpr borrowed_iterator_t<R1> 559*dc37c87aSrobert ranges::find_first_of(R1&& r1, R2&& r2, 560*dc37c87aSrobert Pred pred = {}, 561*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 562*dc37c87aSrobert 563*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 564*dc37c87aSrobert indirect_binary_predicate<projected<I, Proj>, 565*dc37c87aSrobert projected<I, Proj>> Pred = ranges::equal_to> 566*dc37c87aSrobert constexpr I ranges::adjacent_find(I first, S last, Pred pred = {}, Proj proj = {}); // since C+20 567*dc37c87aSrobert 568*dc37c87aSrobert template<forward_range R, class Proj = identity, 569*dc37c87aSrobert indirect_binary_predicate<projected<iterator_t<R>, Proj>, 570*dc37c87aSrobert projected<iterator_t<R>, Proj>> Pred = ranges::equal_to> 571*dc37c87aSrobert constexpr borrowed_iterator_t<R> ranges::adjacent_find(R&& r, Pred pred = {}, Proj proj = {}); // since C++20 572*dc37c87aSrobert 573*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, class T1, class T2, class Proj = identity> 574*dc37c87aSrobert requires indirectly_writable<I, const T2&> && 575*dc37c87aSrobert indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T1*> 576*dc37c87aSrobert constexpr I 577*dc37c87aSrobert ranges::replace(I first, S last, const T1& old_value, const T2& new_value, Proj proj = {}); // since C++20 578*dc37c87aSrobert 579*dc37c87aSrobert template<input_range R, class T1, class T2, class Proj = identity> 580*dc37c87aSrobert requires indirectly_writable<iterator_t<R>, const T2&> && 581*dc37c87aSrobert indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T1*> 582*dc37c87aSrobert constexpr borrowed_iterator_t<R> 583*dc37c87aSrobert ranges::replace(R&& r, const T1& old_value, const T2& new_value, Proj proj = {}); // since C++20 584*dc37c87aSrobert 585*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, class T, class Proj = identity, 586*dc37c87aSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 587*dc37c87aSrobert requires indirectly_writable<I, const T&> 588*dc37c87aSrobert constexpr I ranges::replace_if(I first, S last, Pred pred, const T& new_value, Proj proj = {}); // since C++20 589*dc37c87aSrobert 590*dc37c87aSrobert template<input_range R, class T, class Proj = identity, 591*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 592*dc37c87aSrobert requires indirectly_writable<iterator_t<R>, const T&> 593*dc37c87aSrobert constexpr borrowed_iterator_t<R> 594*dc37c87aSrobert ranges::replace_if(R&& r, Pred pred, const T& new_value, Proj proj = {}); // since C++20 595*dc37c87aSrobert 596*dc37c87aSrobert template<class T, class Proj = identity, 597*dc37c87aSrobert indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 598*dc37c87aSrobert constexpr const T& 599*dc37c87aSrobert ranges::clamp(const T& v, const T& lo, const T& hi, Comp comp = {}, Proj proj = {}); // since C++20 600*dc37c87aSrobert 601*dc37c87aSrobert template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 602*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity, 603*dc37c87aSrobert indirect_strict_weak_order<projected<I1, Proj1>, 604*dc37c87aSrobert projected<I2, Proj2>> Comp = ranges::less> 605*dc37c87aSrobert constexpr bool 606*dc37c87aSrobert ranges::lexicographical_compare(I1 first1, S1 last1, I2 first2, S2 last2, 607*dc37c87aSrobert Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 608*dc37c87aSrobert 609*dc37c87aSrobert template<input_range R1, input_range R2, class Proj1 = identity, 610*dc37c87aSrobert class Proj2 = identity, 611*dc37c87aSrobert indirect_strict_weak_order<projected<iterator_t<R1>, Proj1>, 612*dc37c87aSrobert projected<iterator_t<R2>, Proj2>> Comp = ranges::less> 613*dc37c87aSrobert constexpr bool 614*dc37c87aSrobert ranges::lexicographical_compare(R1&& r1, R2&& r2, Comp comp = {}, 615*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 616*dc37c87aSrobert 617*dc37c87aSrobert template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2> 618*dc37c87aSrobert requires indirectly_movable<I1, I2> 619*dc37c87aSrobert constexpr ranges::move_backward_result<I1, I2> 620*dc37c87aSrobert ranges::move_backward(I1 first, S1 last, I2 result); // since C++20 621*dc37c87aSrobert 622*dc37c87aSrobert template<bidirectional_range R, bidirectional_iterator I> 623*dc37c87aSrobert requires indirectly_movable<iterator_t<R>, I> 624*dc37c87aSrobert constexpr ranges::move_backward_result<borrowed_iterator_t<R>, I> 625*dc37c87aSrobert ranges::move_backward(R&& r, I result); // since C++20 626*dc37c87aSrobert 627*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, weakly_incrementable O> 628*dc37c87aSrobert requires indirectly_movable<I, O> 629*dc37c87aSrobert constexpr ranges::move_result<I, O> 630*dc37c87aSrobert ranges::move(I first, S last, O result); // since C++20 631*dc37c87aSrobert 632*dc37c87aSrobert template<input_range R, weakly_incrementable O> 633*dc37c87aSrobert requires indirectly_movable<iterator_t<R>, O> 634*dc37c87aSrobert constexpr ranges::move_result<borrowed_iterator_t<R>, O> 635*dc37c87aSrobert ranges::move(R&& r, O result); // since C++20 636*dc37c87aSrobert 637*dc37c87aSrobert template<class I, class O1, class O2> 638*dc37c87aSrobert using partition_copy_result = in_out_out_result<I, O1, O2>; // since C++20 639*dc37c87aSrobert 640*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, 641*dc37c87aSrobert weakly_incrementable O1, weakly_incrementable O2, 642*dc37c87aSrobert class Proj = identity, indirect_unary_predicate<projected<I, Proj>> Pred> 643*dc37c87aSrobert requires indirectly_copyable<I, O1> && indirectly_copyable<I, O2> 644*dc37c87aSrobert constexpr partition_copy_result<I, O1, O2> 645*dc37c87aSrobert partition_copy(I first, S last, O1 out_true, O2 out_false, Pred pred, 646*dc37c87aSrobert Proj proj = {}); // Since C++20 647*dc37c87aSrobert 648*dc37c87aSrobert template<input_range R, weakly_incrementable O1, weakly_incrementable O2, 649*dc37c87aSrobert class Proj = identity, 650*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 651*dc37c87aSrobert requires indirectly_copyable<iterator_t<R>, O1> && 652*dc37c87aSrobert indirectly_copyable<iterator_t<R>, O2> 653*dc37c87aSrobert constexpr partition_copy_result<borrowed_iterator_t<R>, O1, O2> 654*dc37c87aSrobert partition_copy(R&& r, O1 out_true, O2 out_false, Pred pred, Proj proj = {}); // Since C++20 655*dc37c87aSrobert 656*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 657*dc37c87aSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 658*dc37c87aSrobert constexpr I partition_point(I first, S last, Pred pred, Proj proj = {}); // Since C++20 659*dc37c87aSrobert 660*dc37c87aSrobert template<forward_range R, class Proj = identity, 661*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 662*dc37c87aSrobert constexpr borrowed_iterator_t<R> 663*dc37c87aSrobert partition_point(R&& r, Pred pred, Proj proj = {}); // Since C++20 664*dc37c87aSrobert 665*dc37c87aSrobert template<class I1, class I2, class O> 666*dc37c87aSrobert using merge_result = in_in_out_result<I1, I2, O>; // since C++20 667*dc37c87aSrobert 668*dc37c87aSrobert template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 669*dc37c87aSrobert weakly_incrementable O, class Comp = ranges::less, class Proj1 = identity, 670*dc37c87aSrobert class Proj2 = identity> 671*dc37c87aSrobert requires mergeable<I1, I2, O, Comp, Proj1, Proj2> 672*dc37c87aSrobert constexpr merge_result<I1, I2, O> 673*dc37c87aSrobert merge(I1 first1, S1 last1, I2 first2, S2 last2, O result, 674*dc37c87aSrobert Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 675*dc37c87aSrobert 676*dc37c87aSrobert template<input_range R1, input_range R2, weakly_incrementable O, class Comp = ranges::less, 677*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity> 678*dc37c87aSrobert requires mergeable<iterator_t<R1>, iterator_t<R2>, O, Comp, Proj1, Proj2> 679*dc37c87aSrobert constexpr merge_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>, O> 680*dc37c87aSrobert merge(R1&& r1, R2&& r2, O result, 681*dc37c87aSrobert Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 682*dc37c87aSrobert 683*dc37c87aSrobert template<permutable I, sentinel_for<I> S, class T, class Proj = identity> 684*dc37c87aSrobert requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 685*dc37c87aSrobert constexpr subrange<I> ranges::remove(I first, S last, const T& value, Proj proj = {}); // since C++20 686*dc37c87aSrobert 687*dc37c87aSrobert template<forward_range R, class T, class Proj = identity> 688*dc37c87aSrobert requires permutable<iterator_t<R>> && 689*dc37c87aSrobert indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> 690*dc37c87aSrobert constexpr borrowed_subrange_t<R> 691*dc37c87aSrobert ranges::remove(R&& r, const T& value, Proj proj = {}); // since C++20 692*dc37c87aSrobert 693*dc37c87aSrobert template<permutable I, sentinel_for<I> S, class Proj = identity, 694*dc37c87aSrobert indirect_unary_predicate<projected<I, Proj>> Pred> 695*dc37c87aSrobert constexpr subrange<I> ranges::remove_if(I first, S last, Pred pred, Proj proj = {}); // since C++20 696*dc37c87aSrobert 697*dc37c87aSrobert template<forward_range R, class Proj = identity, 698*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 699*dc37c87aSrobert requires permutable<iterator_t<R>> 700*dc37c87aSrobert constexpr borrowed_subrange_t<R> 701*dc37c87aSrobert ranges::remove_if(R&& r, Pred pred, Proj proj = {}); // since C++20 702*dc37c87aSrobert 703*dc37c87aSrobert template<class I, class O> 704*dc37c87aSrobert using set_difference_result = in_out_result<I, O>; // since C++20 705*dc37c87aSrobert 706*dc37c87aSrobert template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 707*dc37c87aSrobert weakly_incrementable O, class Comp = ranges::less, 708*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity> 709*dc37c87aSrobert requires mergeable<I1, I2, O, Comp, Proj1, Proj2> 710*dc37c87aSrobert constexpr set_difference_result<I1, O> 711*dc37c87aSrobert set_difference(I1 first1, S1 last1, I2 first2, S2 last2, O result, 712*dc37c87aSrobert Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 713*dc37c87aSrobert 714*dc37c87aSrobert template<input_range R1, input_range R2, weakly_incrementable O, 715*dc37c87aSrobert class Comp = ranges::less, class Proj1 = identity, class Proj2 = identity> 716*dc37c87aSrobert requires mergeable<iterator_t<R1>, iterator_t<R2>, O, Comp, Proj1, Proj2> 717*dc37c87aSrobert constexpr set_difference_result<borrowed_iterator_t<R1>, O> 718*dc37c87aSrobert set_difference(R1&& r1, R2&& r2, O result, 719*dc37c87aSrobert Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 720*dc37c87aSrobert 721*dc37c87aSrobert template<class I1, class I2, class O> 722*dc37c87aSrobert using set_intersection_result = in_in_out_result<I1, I2, O>; // since C++20 723*dc37c87aSrobert 724*dc37c87aSrobert template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 725*dc37c87aSrobert weakly_incrementable O, class Comp = ranges::less, 726*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity> 727*dc37c87aSrobert requires mergeable<I1, I2, O, Comp, Proj1, Proj2> 728*dc37c87aSrobert constexpr set_intersection_result<I1, I2, O> 729*dc37c87aSrobert set_intersection(I1 first1, S1 last1, I2 first2, S2 last2, O result, 730*dc37c87aSrobert Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 731*dc37c87aSrobert 732*dc37c87aSrobert template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 733*dc37c87aSrobert weakly_incrementable O, class Comp = ranges::less, 734*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity> 735*dc37c87aSrobert requires mergeable<I1, I2, O, Comp, Proj1, Proj2> 736*dc37c87aSrobert constexpr set_intersection_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>, O> 737*dc37c87aSrobert set_intersection(R1&& r1, R2&& r2, O result, 738*dc37c87aSrobert Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 739*dc37c87aSrobert 740*dc37c87aSrobert template <class _InIter, class _OutIter> 741*dc37c87aSrobert using reverse_copy_result = in_out_result<_InIter, _OutIter>; // since C++20 742*dc37c87aSrobert 743*dc37c87aSrobert template<bidirectional_iterator I, sentinel_for<I> S, weakly_incrementable O> 744*dc37c87aSrobert requires indirectly_copyable<I, O> 745*dc37c87aSrobert constexpr ranges::reverse_copy_result<I, O> 746*dc37c87aSrobert ranges::reverse_copy(I first, S last, O result); // since C++20 747*dc37c87aSrobert 748*dc37c87aSrobert template<bidirectional_range R, weakly_incrementable O> 749*dc37c87aSrobert requires indirectly_copyable<iterator_t<R>, O> 750*dc37c87aSrobert constexpr ranges::reverse_copy_result<borrowed_iterator_t<R>, O> 751*dc37c87aSrobert ranges::reverse_copy(R&& r, O result); // since C++20 752*dc37c87aSrobert 753*dc37c87aSrobert template<permutable I, sentinel_for<I> S> 754*dc37c87aSrobert constexpr subrange<I> rotate(I first, I middle, S last); // since C++20 755*dc37c87aSrobert 756*dc37c87aSrobert template<forward_range R> 757*dc37c87aSrobert requires permutable<iterator_t<R>> 758*dc37c87aSrobert constexpr borrowed_subrange_t<R> rotate(R&& r, iterator_t<R> middle); // Since C++20 759*dc37c87aSrobert 760*dc37c87aSrobert template <class _InIter, class _OutIter> 761*dc37c87aSrobert using rotate_copy_result = in_out_result<_InIter, _OutIter>; // since C++20 762*dc37c87aSrobert 763*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, weakly_incrementable O> 764*dc37c87aSrobert requires indirectly_copyable<I, O> 765*dc37c87aSrobert constexpr ranges::rotate_copy_result<I, O> 766*dc37c87aSrobert ranges::rotate_copy(I first, I middle, S last, O result); // since C++20 767*dc37c87aSrobert 768*dc37c87aSrobert template<forward_range R, weakly_incrementable O> 769*dc37c87aSrobert requires indirectly_copyable<iterator_t<R>, O> 770*dc37c87aSrobert constexpr ranges::rotate_copy_result<borrowed_iterator_t<R>, O> 771*dc37c87aSrobert ranges::rotate_copy(R&& r, iterator_t<R> middle, O result); // since C++20 772*dc37c87aSrobert 773*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Gen> 774*dc37c87aSrobert requires (forward_iterator<I> || random_access_iterator<O>) && 775*dc37c87aSrobert indirectly_copyable<I, O> && 776*dc37c87aSrobert uniform_random_bit_generator<remove_reference_t<Gen>> 777*dc37c87aSrobert O sample(I first, S last, O out, iter_difference_t<I> n, Gen&& g); // Since C++20 778*dc37c87aSrobert 779*dc37c87aSrobert template<input_range R, weakly_incrementable O, class Gen> 780*dc37c87aSrobert requires (forward_range<R> || random_access_iterator<O>) && 781*dc37c87aSrobert indirectly_copyable<iterator_t<R>, O> && 782*dc37c87aSrobert uniform_random_bit_generator<remove_reference_t<Gen>> 783*dc37c87aSrobert O sample(R&& r, O out, range_difference_t<R> n, Gen&& g); // Since C++20 784*dc37c87aSrobert 785*dc37c87aSrobert template<random_access_iterator I, sentinel_for<I> S, class Gen> 786*dc37c87aSrobert requires permutable<I> && 787*dc37c87aSrobert uniform_random_bit_generator<remove_reference_t<Gen>> 788*dc37c87aSrobert I shuffle(I first, S last, Gen&& g); // Since C++20 789*dc37c87aSrobert 790*dc37c87aSrobert template<random_access_range R, class Gen> 791*dc37c87aSrobert requires permutable<iterator_t<R>> && 792*dc37c87aSrobert uniform_random_bit_generator<remove_reference_t<Gen>> 793*dc37c87aSrobert borrowed_iterator_t<R> shuffle(R&& r, Gen&& g); // Since C++20 794*dc37c87aSrobert 795*dc37c87aSrobert template<forward_iterator I1, sentinel_for<I1> S1, forward_iterator I2, 796*dc37c87aSrobert sentinel_for<I2> S2, class Proj1 = identity, class Proj2 = identity, 797*dc37c87aSrobert indirect_equivalence_relation<projected<I1, Proj1>, 798*dc37c87aSrobert projected<I2, Proj2>> Pred = ranges::equal_to> 799*dc37c87aSrobert constexpr bool ranges::is_permutation(I1 first1, S1 last1, I2 first2, S2 last2, 800*dc37c87aSrobert Pred pred = {}, 801*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // Since C++20 802*dc37c87aSrobert 803*dc37c87aSrobert template<forward_range R1, forward_range R2, 804*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity, 805*dc37c87aSrobert indirect_equivalence_relation<projected<iterator_t<R1>, Proj1>, 806*dc37c87aSrobert projected<iterator_t<R2>, Proj2>> Pred = ranges::equal_to> 807*dc37c87aSrobert constexpr bool ranges::is_permutation(R1&& r1, R2&& r2, Pred pred = {}, 808*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // Since C++20 809*dc37c87aSrobert 810*dc37c87aSrobert template<forward_iterator I1, sentinel_for<I1> S1, forward_iterator I2, 811*dc37c87aSrobert sentinel_for<I2> S2, class Pred = ranges::equal_to, 812*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity> 813*dc37c87aSrobert requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 814*dc37c87aSrobert constexpr subrange<I1> 815*dc37c87aSrobert ranges::search(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {}, 816*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 817*dc37c87aSrobert 818*dc37c87aSrobert template<forward_range R1, forward_range R2, class Pred = ranges::equal_to, 819*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity> 820*dc37c87aSrobert requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 821*dc37c87aSrobert constexpr borrowed_subrange_t<R1> 822*dc37c87aSrobert ranges::search(R1&& r1, R2&& r2, Pred pred = {}, 823*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 824*dc37c87aSrobert 825*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, class T, 826*dc37c87aSrobert class Pred = ranges::equal_to, class Proj = identity> 827*dc37c87aSrobert requires indirectly_comparable<I, const T*, Pred, Proj> 828*dc37c87aSrobert constexpr subrange<I> 829*dc37c87aSrobert ranges::search_n(I first, S last, iter_difference_t<I> count, 830*dc37c87aSrobert const T& value, Pred pred = {}, Proj proj = {}); // since C++20 831*dc37c87aSrobert 832*dc37c87aSrobert template<forward_range R, class T, class Pred = ranges::equal_to, 833*dc37c87aSrobert class Proj = identity> 834*dc37c87aSrobert requires indirectly_comparable<iterator_t<R>, const T*, Pred, Proj> 835*dc37c87aSrobert constexpr borrowed_subrange_t<R> 836*dc37c87aSrobert ranges::search_n(R&& r, range_difference_t<R> count, 837*dc37c87aSrobert const T& value, Pred pred = {}, Proj proj = {}); // since C++20 838*dc37c87aSrobert 839*dc37c87aSrobert template<forward_iterator I1, sentinel_for<I1> S1, forward_iterator I2, sentinel_for<I2> S2, 840*dc37c87aSrobert class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 841*dc37c87aSrobert requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 842*dc37c87aSrobert constexpr subrange<I1> 843*dc37c87aSrobert ranges::find_end(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {}, 844*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 845*dc37c87aSrobert 846*dc37c87aSrobert template<forward_range R1, forward_range R2, 847*dc37c87aSrobert class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 848*dc37c87aSrobert requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 849*dc37c87aSrobert constexpr borrowed_subrange_t<R1> 850*dc37c87aSrobert ranges::find_end(R1&& r1, R2&& r2, Pred pred = {}, 851*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 852*dc37c87aSrobert 853*dc37c87aSrobert template<class I1, class I2, class O> 854*dc37c87aSrobert using set_symmetric_difference_result = in_in_out_result<I1, I2, O>; // since C++20 855*dc37c87aSrobert 856*dc37c87aSrobert template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 857*dc37c87aSrobert weakly_incrementable O, class Comp = ranges::less, 858*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity> 859*dc37c87aSrobert requires mergeable<I1, I2, O, Comp, Proj1, Proj2> 860*dc37c87aSrobert constexpr set_symmetric_difference_result<I1, I2, O> 861*dc37c87aSrobert set_symmetric_difference(I1 first1, S1 last1, I2 first2, S2 last2, O result, 862*dc37c87aSrobert Comp comp = {}, Proj1 proj1 = {}, 863*dc37c87aSrobert Proj2 proj2 = {}); // since C++20 864*dc37c87aSrobert 865*dc37c87aSrobert template<input_range R1, input_range R2, weakly_incrementable O, 866*dc37c87aSrobert class Comp = ranges::less, class Proj1 = identity, class Proj2 = identity> 867*dc37c87aSrobert requires mergeable<iterator_t<R1>, iterator_t<R2>, O, Comp, Proj1, Proj2> 868*dc37c87aSrobert constexpr set_symmetric_difference_result<borrowed_iterator_t<R1>, 869*dc37c87aSrobert borrowed_iterator_t<R2>, O> 870*dc37c87aSrobert set_symmetric_difference(R1&& r1, R2&& r2, O result, Comp comp = {}, 871*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 872*dc37c87aSrobert 873*dc37c87aSrobert template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity, 874*dc37c87aSrobert indirect_strict_weak_order<const T*, projected<I, Proj>> Comp = ranges::less> 875*dc37c87aSrobert constexpr subrange<I> 876*dc37c87aSrobert equal_range(I first, S last, const T& value, Comp comp = {}, Proj proj = {}); // since C++20 877*dc37c87aSrobert 878*dc37c87aSrobert template<forward_range R, class T, class Proj = identity, 879*dc37c87aSrobert indirect_strict_weak_order<const T*, projected<iterator_t<R>, Proj>> Comp = 880*dc37c87aSrobert ranges::less> 881*dc37c87aSrobert constexpr borrowed_subrange_t<R> 882*dc37c87aSrobert equal_range(R&& r, const T& value, Comp comp = {}, Proj proj = {}); // since C++20 883*dc37c87aSrobert 884*dc37c87aSrobert template<class I1, class I2, class O> 885*dc37c87aSrobert using set_union_result = in_in_out_result<I1, I2, O>; // since C++20 886*dc37c87aSrobert 887*dc37c87aSrobert template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 888*dc37c87aSrobert weakly_incrementable O, class Comp = ranges::less, 889*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity> 890*dc37c87aSrobert requires mergeable<I1, I2, O, Comp, Proj1, Proj2> 891*dc37c87aSrobert constexpr set_union_result<I1, I2, O> 892*dc37c87aSrobert set_union(I1 first1, S1 last1, I2 first2, S2 last2, O result, Comp comp = {}, 893*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 894*dc37c87aSrobert 895*dc37c87aSrobert template<input_range R1, input_range R2, weakly_incrementable O, 896*dc37c87aSrobert class Comp = ranges::less, class Proj1 = identity, class Proj2 = identity> 897*dc37c87aSrobert requires mergeable<iterator_t<R1>, iterator_t<R2>, O, Comp, Proj1, Proj2> 898*dc37c87aSrobert constexpr set_union_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>, O> 899*dc37c87aSrobert set_union(R1&& r1, R2&& r2, O result, Comp comp = {}, 900*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 901*dc37c87aSrobert 902*dc37c87aSrobert template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 903*dc37c87aSrobert class Proj1 = identity, class Proj2 = identity, 904*dc37c87aSrobert indirect_strict_weak_order<projected<I1, Proj1>, projected<I2, Proj2>> Comp = 905*dc37c87aSrobert ranges::less> 906*dc37c87aSrobert constexpr bool includes(I1 first1, S1 last1, I2 first2, S2 last2, Comp comp = {}, 907*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // Since C++20 908*dc37c87aSrobert 909*dc37c87aSrobert template<input_range R1, input_range R2, class Proj1 = identity, 910*dc37c87aSrobert class Proj2 = identity, 911*dc37c87aSrobert indirect_strict_weak_order<projected<iterator_t<R1>, Proj1>, 912*dc37c87aSrobert projected<iterator_t<R2>, Proj2>> Comp = ranges::less> 913*dc37c87aSrobert constexpr bool includes(R1&& r1, R2&& r2, Comp comp = {}, 914*dc37c87aSrobert Proj1 proj1 = {}, Proj2 proj2 = {}); // Since C++20 915*dc37c87aSrobert 916*dc37c87aSrobert template<bidirectional_iterator I, sentinel_for<I> S, class Comp = ranges::less, 917*dc37c87aSrobert class Proj = identity> 918*dc37c87aSrobert requires sortable<I, Comp, Proj> 919*dc37c87aSrobert I inplace_merge(I first, I middle, S last, Comp comp = {}, Proj proj = {}); // Since C++20 920*dc37c87aSrobert 921*dc37c87aSrobert template<bidirectional_range R, class Comp = ranges::less, class Proj = identity> 922*dc37c87aSrobert requires sortable<iterator_t<R>, Comp, Proj> 923*dc37c87aSrobert borrowed_iterator_t<R> 924*dc37c87aSrobert inplace_merge(R&& r, iterator_t<R> middle, Comp comp = {}, 925*dc37c87aSrobert Proj proj = {}); // Since C++20 926*dc37c87aSrobert 927*dc37c87aSrobert template<permutable I, sentinel_for<I> S, class Proj = identity, 928*dc37c87aSrobert indirect_equivalence_relation<projected<I, Proj>> C = ranges::equal_to> 929*dc37c87aSrobert constexpr subrange<I> unique(I first, S last, C comp = {}, Proj proj = {}); // Since C++20 930*dc37c87aSrobert 931*dc37c87aSrobert template<forward_range R, class Proj = identity, 932*dc37c87aSrobert indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to> 933*dc37c87aSrobert requires permutable<iterator_t<R>> 934*dc37c87aSrobert constexpr borrowed_subrange_t<R> 935*dc37c87aSrobert unique(R&& r, C comp = {}, Proj proj = {}); // Since C++20 936*dc37c87aSrobert 937*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity, 938*dc37c87aSrobert indirect_equivalence_relation<projected<I, Proj>> C = ranges::equal_to> 939*dc37c87aSrobert requires indirectly_copyable<I, O> && 940*dc37c87aSrobert (forward_iterator<I> || 941*dc37c87aSrobert (input_iterator<O> && same_as<iter_value_t<I>, iter_value_t<O>>) || 942*dc37c87aSrobert indirectly_copyable_storable<I, O>) 943*dc37c87aSrobert constexpr unique_copy_result<I, O> 944*dc37c87aSrobert unique_copy(I first, S last, O result, C comp = {}, Proj proj = {}); // Since C++20 945*dc37c87aSrobert 946*dc37c87aSrobert template<input_range R, weakly_incrementable O, class Proj = identity, 947*dc37c87aSrobert indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to> 948*dc37c87aSrobert requires indirectly_copyable<iterator_t<R>, O> && 949*dc37c87aSrobert (forward_iterator<iterator_t<R>> || 950*dc37c87aSrobert (input_iterator<O> && same_as<range_value_t<R>, iter_value_t<O>>) || 951*dc37c87aSrobert indirectly_copyable_storable<iterator_t<R>, O>) 952*dc37c87aSrobert constexpr unique_copy_result<borrowed_iterator_t<R>, O> 953*dc37c87aSrobert unique_copy(R&& r, O result, C comp = {}, Proj proj = {}); // Since C++20 954*dc37c87aSrobert 955*dc37c87aSrobert template<class I, class O> 956*dc37c87aSrobert using remove_copy_result = in_out_result<I, O>; // Since C++20 957*dc37c87aSrobert 958*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class T, 959*dc37c87aSrobert class Proj = identity> 960*dc37c87aSrobert indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 961*dc37c87aSrobert constexpr remove_copy_result<I, O> 962*dc37c87aSrobert remove_copy(I first, S last, O result, const T& value, Proj proj = {}); // Since C++20 963*dc37c87aSrobert 964*dc37c87aSrobert template<input_range R, weakly_incrementable O, class T, class Proj = identity> 965*dc37c87aSrobert requires indirectly_copyable<iterator_t<R>, O> && 966*dc37c87aSrobert indirect_binary_predicate<ranges::equal_to, 967*dc37c87aSrobert projected<iterator_t<R>, Proj>, const T*> 968*dc37c87aSrobert constexpr remove_copy_result<borrowed_iterator_t<R>, O> 969*dc37c87aSrobert remove_copy(R&& r, O result, const T& value, Proj proj = {}); // Since C++20 970*dc37c87aSrobert 971*dc37c87aSrobert template<class I, class O> 972*dc37c87aSrobert using remove_copy_if_result = in_out_result<I, O>; // Since C++20 973*dc37c87aSrobert 974*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, 975*dc37c87aSrobert class Proj = identity, indirect_unary_predicate<projected<I, Proj>> Pred> 976*dc37c87aSrobert requires indirectly_copyable<I, O> 977*dc37c87aSrobert constexpr remove_copy_if_result<I, O> 978*dc37c87aSrobert remove_copy_if(I first, S last, O result, Pred pred, Proj proj = {}); // Since C++20 979*dc37c87aSrobert 980*dc37c87aSrobert template<input_range R, weakly_incrementable O, class Proj = identity, 981*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 982*dc37c87aSrobert requires indirectly_copyable<iterator_t<R>, O> 983*dc37c87aSrobert constexpr remove_copy_if_result<borrowed_iterator_t<R>, O> 984*dc37c87aSrobert remove_copy_if(R&& r, O result, Pred pred, Proj proj = {}); // Since C++20 985*dc37c87aSrobert 986*dc37c87aSrobert template<class I, class O> 987*dc37c87aSrobert using replace_copy_result = in_out_result<I, O>; // Since C++20 988*dc37c87aSrobert 989*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, class T1, class T2, 990*dc37c87aSrobert output_iterator<const T2&> O, class Proj = identity> 991*dc37c87aSrobert requires indirectly_copyable<I, O> && 992*dc37c87aSrobert indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T1*> 993*dc37c87aSrobert constexpr replace_copy_result<I, O> 994*dc37c87aSrobert replace_copy(I first, S last, O result, const T1& old_value, const T2& new_value, 995*dc37c87aSrobert Proj proj = {}); // Since C++20 996*dc37c87aSrobert 997*dc37c87aSrobert template<input_range R, class T1, class T2, output_iterator<const T2&> O, 998*dc37c87aSrobert class Proj = identity> 999*dc37c87aSrobert requires indirectly_copyable<iterator_t<R>, O> && 1000*dc37c87aSrobert indirect_binary_predicate<ranges::equal_to, 1001*dc37c87aSrobert projected<iterator_t<R>, Proj>, const T1*> 1002*dc37c87aSrobert constexpr replace_copy_result<borrowed_iterator_t<R>, O> 1003*dc37c87aSrobert replace_copy(R&& r, O result, const T1& old_value, const T2& new_value, 1004*dc37c87aSrobert Proj proj = {}); // Since C++20 1005*dc37c87aSrobert 1006*dc37c87aSrobert template<class I, class O> 1007*dc37c87aSrobert using replace_copy_if_result = in_out_result<I, O>; // Since C++20 1008*dc37c87aSrobert 1009*dc37c87aSrobert template<input_iterator I, sentinel_for<I> S, class T, output_iterator<const T&> O, 1010*dc37c87aSrobert class Proj = identity, indirect_unary_predicate<projected<I, Proj>> Pred> 1011*dc37c87aSrobert requires indirectly_copyable<I, O> 1012*dc37c87aSrobert constexpr replace_copy_if_result<I, O> 1013*dc37c87aSrobert replace_copy_if(I first, S last, O result, Pred pred, const T& new_value, 1014*dc37c87aSrobert Proj proj = {}); // Since C++20 1015*dc37c87aSrobert 1016*dc37c87aSrobert template<input_range R, class T, output_iterator<const T&> O, class Proj = identity, 1017*dc37c87aSrobert indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 1018*dc37c87aSrobert requires indirectly_copyable<iterator_t<R>, O> 1019*dc37c87aSrobert constexpr replace_copy_if_result<borrowed_iterator_t<R>, O> 1020*dc37c87aSrobert replace_copy_if(R&& r, O result, Pred pred, const T& new_value, 1021*dc37c87aSrobert Proj proj = {}); // Since C++20 1022*dc37c87aSrobert 1023*dc37c87aSrobert template<class I> 1024*dc37c87aSrobert using prev_permutation_result = in_found_result<I>; // Since C++20 1025*dc37c87aSrobert 1026*dc37c87aSrobert template<bidirectional_iterator I, sentinel_for<I> S, class Comp = ranges::less, 1027*dc37c87aSrobert class Proj = identity> 1028*dc37c87aSrobert requires sortable<I, Comp, Proj> 1029*dc37c87aSrobert constexpr ranges::prev_permutation_result<I> 1030*dc37c87aSrobert ranges::prev_permutation(I first, S last, Comp comp = {}, Proj proj = {}); // Since C++20 1031*dc37c87aSrobert 1032*dc37c87aSrobert template<bidirectional_range R, class Comp = ranges::less, 1033*dc37c87aSrobert class Proj = identity> 1034*dc37c87aSrobert requires sortable<iterator_t<R>, Comp, Proj> 1035*dc37c87aSrobert constexpr ranges::prev_permutation_result<borrowed_iterator_t<R>> 1036*dc37c87aSrobert ranges::prev_permutation(R&& r, Comp comp = {}, Proj proj = {}); // Since C++20 1037*dc37c87aSrobert 1038*dc37c87aSrobert template<class I> 1039*dc37c87aSrobert using next_permutation_result = in_found_result<I>; // Since C++20 1040*dc37c87aSrobert 1041*dc37c87aSrobert template<bidirectional_iterator I, sentinel_for<I> S, class Comp = ranges::less, 1042*dc37c87aSrobert class Proj = identity> 1043*dc37c87aSrobert requires sortable<I, Comp, Proj> 1044*dc37c87aSrobert constexpr ranges::next_permutation_result<I> 1045*dc37c87aSrobert ranges::next_permutation(I first, S last, Comp comp = {}, Proj proj = {}); // Since C++20 1046*dc37c87aSrobert 1047*dc37c87aSrobert template<bidirectional_range R, class Comp = ranges::less, 1048*dc37c87aSrobert class Proj = identity> 1049*dc37c87aSrobert requires sortable<iterator_t<R>, Comp, Proj> 1050*dc37c87aSrobert constexpr ranges::next_permutation_result<borrowed_iterator_t<R>> 1051*dc37c87aSrobert ranges::next_permutation(R&& r, Comp comp = {}, Proj proj = {}); // Since C++20 1052*dc37c87aSrobert 1053dcb03dacSrobert} 1054dcb03dacSrobert 105546035553Spatricktemplate <class InputIterator, class Predicate> 105646035553Spatrick constexpr bool // constexpr in C++20 105746035553Spatrick all_of(InputIterator first, InputIterator last, Predicate pred); 105846035553Spatrick 105946035553Spatricktemplate <class InputIterator, class Predicate> 106046035553Spatrick constexpr bool // constexpr in C++20 106146035553Spatrick any_of(InputIterator first, InputIterator last, Predicate pred); 106246035553Spatrick 106346035553Spatricktemplate <class InputIterator, class Predicate> 106446035553Spatrick constexpr bool // constexpr in C++20 106546035553Spatrick none_of(InputIterator first, InputIterator last, Predicate pred); 106646035553Spatrick 106746035553Spatricktemplate <class InputIterator, class Function> 106846035553Spatrick constexpr Function // constexpr in C++20 106946035553Spatrick for_each(InputIterator first, InputIterator last, Function f); 107046035553Spatrick 107146035553Spatricktemplate<class InputIterator, class Size, class Function> 107246035553Spatrick constexpr InputIterator // constexpr in C++20 107346035553Spatrick for_each_n(InputIterator first, Size n, Function f); // C++17 107446035553Spatrick 107546035553Spatricktemplate <class InputIterator, class T> 107646035553Spatrick constexpr InputIterator // constexpr in C++20 107746035553Spatrick find(InputIterator first, InputIterator last, const T& value); 107846035553Spatrick 107946035553Spatricktemplate <class InputIterator, class Predicate> 108046035553Spatrick constexpr InputIterator // constexpr in C++20 108146035553Spatrick find_if(InputIterator first, InputIterator last, Predicate pred); 108246035553Spatrick 108346035553Spatricktemplate<class InputIterator, class Predicate> 108476d0caaeSpatrick constexpr InputIterator // constexpr in C++20 108546035553Spatrick find_if_not(InputIterator first, InputIterator last, Predicate pred); 108646035553Spatrick 108746035553Spatricktemplate <class ForwardIterator1, class ForwardIterator2> 108876d0caaeSpatrick constexpr ForwardIterator1 // constexpr in C++20 108946035553Spatrick find_end(ForwardIterator1 first1, ForwardIterator1 last1, 109046035553Spatrick ForwardIterator2 first2, ForwardIterator2 last2); 109146035553Spatrick 109246035553Spatricktemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 109376d0caaeSpatrick constexpr ForwardIterator1 // constexpr in C++20 109446035553Spatrick find_end(ForwardIterator1 first1, ForwardIterator1 last1, 109546035553Spatrick ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 109646035553Spatrick 109746035553Spatricktemplate <class ForwardIterator1, class ForwardIterator2> 109846035553Spatrick constexpr ForwardIterator1 // constexpr in C++20 109946035553Spatrick find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 110046035553Spatrick ForwardIterator2 first2, ForwardIterator2 last2); 110146035553Spatrick 110246035553Spatricktemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 110346035553Spatrick constexpr ForwardIterator1 // constexpr in C++20 110446035553Spatrick find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 110546035553Spatrick ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 110646035553Spatrick 110746035553Spatricktemplate <class ForwardIterator> 110846035553Spatrick constexpr ForwardIterator // constexpr in C++20 110946035553Spatrick adjacent_find(ForwardIterator first, ForwardIterator last); 111046035553Spatrick 111146035553Spatricktemplate <class ForwardIterator, class BinaryPredicate> 111246035553Spatrick constexpr ForwardIterator // constexpr in C++20 111346035553Spatrick adjacent_find(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 111446035553Spatrick 111546035553Spatricktemplate <class InputIterator, class T> 111646035553Spatrick constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 111746035553Spatrick count(InputIterator first, InputIterator last, const T& value); 111846035553Spatrick 111946035553Spatricktemplate <class InputIterator, class Predicate> 112046035553Spatrick constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 112146035553Spatrick count_if(InputIterator first, InputIterator last, Predicate pred); 112246035553Spatrick 112346035553Spatricktemplate <class InputIterator1, class InputIterator2> 112446035553Spatrick constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 112546035553Spatrick mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 112646035553Spatrick 112746035553Spatricktemplate <class InputIterator1, class InputIterator2> 112846035553Spatrick constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 112946035553Spatrick mismatch(InputIterator1 first1, InputIterator1 last1, 113046035553Spatrick InputIterator2 first2, InputIterator2 last2); // **C++14** 113146035553Spatrick 113246035553Spatricktemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 113346035553Spatrick constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 113446035553Spatrick mismatch(InputIterator1 first1, InputIterator1 last1, 113546035553Spatrick InputIterator2 first2, BinaryPredicate pred); 113646035553Spatrick 113746035553Spatricktemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 113846035553Spatrick constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 113946035553Spatrick mismatch(InputIterator1 first1, InputIterator1 last1, 114046035553Spatrick InputIterator2 first2, InputIterator2 last2, 114146035553Spatrick BinaryPredicate pred); // **C++14** 114246035553Spatrick 114346035553Spatricktemplate <class InputIterator1, class InputIterator2> 114446035553Spatrick constexpr bool // constexpr in C++20 114546035553Spatrick equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 114646035553Spatrick 114746035553Spatricktemplate <class InputIterator1, class InputIterator2> 114846035553Spatrick constexpr bool // constexpr in C++20 114946035553Spatrick equal(InputIterator1 first1, InputIterator1 last1, 115046035553Spatrick InputIterator2 first2, InputIterator2 last2); // **C++14** 115146035553Spatrick 115246035553Spatricktemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 115346035553Spatrick constexpr bool // constexpr in C++20 115446035553Spatrick equal(InputIterator1 first1, InputIterator1 last1, 115546035553Spatrick InputIterator2 first2, BinaryPredicate pred); 115646035553Spatrick 115746035553Spatricktemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 115846035553Spatrick constexpr bool // constexpr in C++20 115946035553Spatrick equal(InputIterator1 first1, InputIterator1 last1, 116046035553Spatrick InputIterator2 first2, InputIterator2 last2, 116146035553Spatrick BinaryPredicate pred); // **C++14** 116246035553Spatrick 116346035553Spatricktemplate<class ForwardIterator1, class ForwardIterator2> 116446035553Spatrick constexpr bool // constexpr in C++20 116546035553Spatrick is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 116646035553Spatrick ForwardIterator2 first2); 116746035553Spatrick 116846035553Spatricktemplate<class ForwardIterator1, class ForwardIterator2> 116946035553Spatrick constexpr bool // constexpr in C++20 117046035553Spatrick is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 117146035553Spatrick ForwardIterator2 first2, ForwardIterator2 last2); // **C++14** 117246035553Spatrick 117346035553Spatricktemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 117446035553Spatrick constexpr bool // constexpr in C++20 117546035553Spatrick is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 117646035553Spatrick ForwardIterator2 first2, BinaryPredicate pred); 117746035553Spatrick 117846035553Spatricktemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 117946035553Spatrick constexpr bool // constexpr in C++20 118046035553Spatrick is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 118146035553Spatrick ForwardIterator2 first2, ForwardIterator2 last2, 118246035553Spatrick BinaryPredicate pred); // **C++14** 118346035553Spatrick 118446035553Spatricktemplate <class ForwardIterator1, class ForwardIterator2> 118546035553Spatrick constexpr ForwardIterator1 // constexpr in C++20 118646035553Spatrick search(ForwardIterator1 first1, ForwardIterator1 last1, 118746035553Spatrick ForwardIterator2 first2, ForwardIterator2 last2); 118846035553Spatrick 118946035553Spatricktemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 119046035553Spatrick constexpr ForwardIterator1 // constexpr in C++20 119146035553Spatrick search(ForwardIterator1 first1, ForwardIterator1 last1, 119246035553Spatrick ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 119346035553Spatrick 119446035553Spatricktemplate <class ForwardIterator, class Size, class T> 119546035553Spatrick constexpr ForwardIterator // constexpr in C++20 119646035553Spatrick search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value); 119746035553Spatrick 119846035553Spatricktemplate <class ForwardIterator, class Size, class T, class BinaryPredicate> 119946035553Spatrick constexpr ForwardIterator // constexpr in C++20 120046035553Spatrick search_n(ForwardIterator first, ForwardIterator last, 120146035553Spatrick Size count, const T& value, BinaryPredicate pred); 120246035553Spatrick 120346035553Spatricktemplate <class InputIterator, class OutputIterator> 120446035553Spatrick constexpr OutputIterator // constexpr in C++20 120546035553Spatrick copy(InputIterator first, InputIterator last, OutputIterator result); 120646035553Spatrick 120746035553Spatricktemplate<class InputIterator, class OutputIterator, class Predicate> 120846035553Spatrick constexpr OutputIterator // constexpr in C++20 120946035553Spatrick copy_if(InputIterator first, InputIterator last, 121046035553Spatrick OutputIterator result, Predicate pred); 121146035553Spatrick 121246035553Spatricktemplate<class InputIterator, class Size, class OutputIterator> 121346035553Spatrick constexpr OutputIterator // constexpr in C++20 121446035553Spatrick copy_n(InputIterator first, Size n, OutputIterator result); 121546035553Spatrick 121646035553Spatricktemplate <class BidirectionalIterator1, class BidirectionalIterator2> 121746035553Spatrick constexpr BidirectionalIterator2 // constexpr in C++20 121846035553Spatrick copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, 121946035553Spatrick BidirectionalIterator2 result); 122046035553Spatrick 1221*dc37c87aSrobert// [alg.move], move 1222*dc37c87aSroberttemplate<class InputIterator, class OutputIterator> 1223*dc37c87aSrobert constexpr OutputIterator move(InputIterator first, InputIterator last, 1224*dc37c87aSrobert OutputIterator result); 1225*dc37c87aSrobert 1226*dc37c87aSroberttemplate<class BidirectionalIterator1, class BidirectionalIterator2> 1227*dc37c87aSrobert constexpr BidirectionalIterator2 1228*dc37c87aSrobert move_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, 1229*dc37c87aSrobert BidirectionalIterator2 result); 1230*dc37c87aSrobert 123146035553Spatricktemplate <class ForwardIterator1, class ForwardIterator2> 123276d0caaeSpatrick constexpr ForwardIterator2 // constexpr in C++20 123346035553Spatrick swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2); 123446035553Spatrick 1235*dc37c87aSrobertnamespace ranges { 1236*dc37c87aSrobert template<class I1, class I2> 1237*dc37c87aSrobert using swap_ranges_result = in_in_result<I1, I2>; 1238*dc37c87aSrobert 1239*dc37c87aSroberttemplate<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2> 1240*dc37c87aSrobert requires indirectly_swappable<I1, I2> 1241*dc37c87aSrobert constexpr ranges::swap_ranges_result<I1, I2> 1242*dc37c87aSrobert swap_ranges(I1 first1, S1 last1, I2 first2, S2 last2); 1243*dc37c87aSrobert 1244*dc37c87aSroberttemplate<input_range R1, input_range R2> 1245*dc37c87aSrobert requires indirectly_swappable<iterator_t<R1>, iterator_t<R2>> 1246*dc37c87aSrobert constexpr ranges::swap_ranges_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>> 1247*dc37c87aSrobert swap_ranges(R1&& r1, R2&& r2); 1248*dc37c87aSrobert} 1249*dc37c87aSrobert 125046035553Spatricktemplate <class ForwardIterator1, class ForwardIterator2> 125176d0caaeSpatrick constexpr void // constexpr in C++20 125246035553Spatrick iter_swap(ForwardIterator1 a, ForwardIterator2 b); 125346035553Spatrick 125446035553Spatricktemplate <class InputIterator, class OutputIterator, class UnaryOperation> 125546035553Spatrick constexpr OutputIterator // constexpr in C++20 125646035553Spatrick transform(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op); 125746035553Spatrick 125846035553Spatricktemplate <class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation> 125946035553Spatrick constexpr OutputIterator // constexpr in C++20 126046035553Spatrick transform(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, 126146035553Spatrick OutputIterator result, BinaryOperation binary_op); 126246035553Spatrick 126346035553Spatricktemplate <class ForwardIterator, class T> 126446035553Spatrick constexpr void // constexpr in C++20 126546035553Spatrick replace(ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value); 126646035553Spatrick 126746035553Spatricktemplate <class ForwardIterator, class Predicate, class T> 126846035553Spatrick constexpr void // constexpr in C++20 126946035553Spatrick replace_if(ForwardIterator first, ForwardIterator last, Predicate pred, const T& new_value); 127046035553Spatrick 127146035553Spatricktemplate <class InputIterator, class OutputIterator, class T> 127246035553Spatrick constexpr OutputIterator // constexpr in C++20 127346035553Spatrick replace_copy(InputIterator first, InputIterator last, OutputIterator result, 127446035553Spatrick const T& old_value, const T& new_value); 127546035553Spatrick 127646035553Spatricktemplate <class InputIterator, class OutputIterator, class Predicate, class T> 127746035553Spatrick constexpr OutputIterator // constexpr in C++20 127846035553Spatrick replace_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred, const T& new_value); 127946035553Spatrick 128046035553Spatricktemplate <class ForwardIterator, class T> 128146035553Spatrick constexpr void // constexpr in C++20 128246035553Spatrick fill(ForwardIterator first, ForwardIterator last, const T& value); 128346035553Spatrick 128446035553Spatricktemplate <class OutputIterator, class Size, class T> 128546035553Spatrick constexpr OutputIterator // constexpr in C++20 128646035553Spatrick fill_n(OutputIterator first, Size n, const T& value); 128746035553Spatrick 128846035553Spatricktemplate <class ForwardIterator, class Generator> 128946035553Spatrick constexpr void // constexpr in C++20 129046035553Spatrick generate(ForwardIterator first, ForwardIterator last, Generator gen); 129146035553Spatrick 129246035553Spatricktemplate <class OutputIterator, class Size, class Generator> 129346035553Spatrick constexpr OutputIterator // constexpr in C++20 129446035553Spatrick generate_n(OutputIterator first, Size n, Generator gen); 129546035553Spatrick 129646035553Spatricktemplate <class ForwardIterator, class T> 129746035553Spatrick constexpr ForwardIterator // constexpr in C++20 129846035553Spatrick remove(ForwardIterator first, ForwardIterator last, const T& value); 129946035553Spatrick 130046035553Spatricktemplate <class ForwardIterator, class Predicate> 130146035553Spatrick constexpr ForwardIterator // constexpr in C++20 130246035553Spatrick remove_if(ForwardIterator first, ForwardIterator last, Predicate pred); 130346035553Spatrick 130446035553Spatricktemplate <class InputIterator, class OutputIterator, class T> 130546035553Spatrick constexpr OutputIterator // constexpr in C++20 130646035553Spatrick remove_copy(InputIterator first, InputIterator last, OutputIterator result, const T& value); 130746035553Spatrick 130846035553Spatricktemplate <class InputIterator, class OutputIterator, class Predicate> 130946035553Spatrick constexpr OutputIterator // constexpr in C++20 131046035553Spatrick remove_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred); 131146035553Spatrick 131246035553Spatricktemplate <class ForwardIterator> 131376d0caaeSpatrick constexpr ForwardIterator // constexpr in C++20 131446035553Spatrick unique(ForwardIterator first, ForwardIterator last); 131546035553Spatrick 131646035553Spatricktemplate <class ForwardIterator, class BinaryPredicate> 131776d0caaeSpatrick constexpr ForwardIterator // constexpr in C++20 131846035553Spatrick unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 131946035553Spatrick 132046035553Spatricktemplate <class InputIterator, class OutputIterator> 132176d0caaeSpatrick constexpr OutputIterator // constexpr in C++20 132246035553Spatrick unique_copy(InputIterator first, InputIterator last, OutputIterator result); 132346035553Spatrick 132446035553Spatricktemplate <class InputIterator, class OutputIterator, class BinaryPredicate> 132576d0caaeSpatrick constexpr OutputIterator // constexpr in C++20 132646035553Spatrick unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate pred); 132746035553Spatrick 132846035553Spatricktemplate <class BidirectionalIterator> 132976d0caaeSpatrick constexpr void // constexpr in C++20 133046035553Spatrick reverse(BidirectionalIterator first, BidirectionalIterator last); 133146035553Spatrick 133246035553Spatricktemplate <class BidirectionalIterator, class OutputIterator> 133346035553Spatrick constexpr OutputIterator // constexpr in C++20 133446035553Spatrick reverse_copy(BidirectionalIterator first, BidirectionalIterator last, OutputIterator result); 133546035553Spatrick 133646035553Spatricktemplate <class ForwardIterator> 133776d0caaeSpatrick constexpr ForwardIterator // constexpr in C++20 133846035553Spatrick rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last); 133946035553Spatrick 134046035553Spatricktemplate <class ForwardIterator, class OutputIterator> 134176d0caaeSpatrick constexpr OutputIterator // constexpr in C++20 134246035553Spatrick rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result); 134346035553Spatrick 134446035553Spatricktemplate <class RandomAccessIterator> 134546035553Spatrick void 134646035553Spatrick random_shuffle(RandomAccessIterator first, RandomAccessIterator last); // deprecated in C++14, removed in C++17 134746035553Spatrick 134846035553Spatricktemplate <class RandomAccessIterator, class RandomNumberGenerator> 134946035553Spatrick void 135046035553Spatrick random_shuffle(RandomAccessIterator first, RandomAccessIterator last, 135146035553Spatrick RandomNumberGenerator& rand); // deprecated in C++14, removed in C++17 135246035553Spatrick 135346035553Spatricktemplate<class PopulationIterator, class SampleIterator, 135446035553Spatrick class Distance, class UniformRandomBitGenerator> 135546035553Spatrick SampleIterator sample(PopulationIterator first, PopulationIterator last, 135646035553Spatrick SampleIterator out, Distance n, 135746035553Spatrick UniformRandomBitGenerator&& g); // C++17 135846035553Spatrick 135946035553Spatricktemplate<class RandomAccessIterator, class UniformRandomNumberGenerator> 136046035553Spatrick void shuffle(RandomAccessIterator first, RandomAccessIterator last, 136146035553Spatrick UniformRandomNumberGenerator&& g); 136246035553Spatrick 136376d0caaeSpatricktemplate<class ForwardIterator> 136476d0caaeSpatrick constexpr ForwardIterator 136576d0caaeSpatrick shift_left(ForwardIterator first, ForwardIterator last, 136676d0caaeSpatrick typename iterator_traits<ForwardIterator>::difference_type n); // C++20 136776d0caaeSpatrick 136876d0caaeSpatricktemplate<class ForwardIterator> 136976d0caaeSpatrick constexpr ForwardIterator 137076d0caaeSpatrick shift_right(ForwardIterator first, ForwardIterator last, 137176d0caaeSpatrick typename iterator_traits<ForwardIterator>::difference_type n); // C++20 137276d0caaeSpatrick 137346035553Spatricktemplate <class InputIterator, class Predicate> 137446035553Spatrick constexpr bool // constexpr in C++20 137546035553Spatrick is_partitioned(InputIterator first, InputIterator last, Predicate pred); 137646035553Spatrick 137746035553Spatricktemplate <class ForwardIterator, class Predicate> 137876d0caaeSpatrick constexpr ForwardIterator // constexpr in C++20 137946035553Spatrick partition(ForwardIterator first, ForwardIterator last, Predicate pred); 138046035553Spatrick 138146035553Spatricktemplate <class InputIterator, class OutputIterator1, 138246035553Spatrick class OutputIterator2, class Predicate> 138346035553Spatrick constexpr pair<OutputIterator1, OutputIterator2> // constexpr in C++20 138446035553Spatrick partition_copy(InputIterator first, InputIterator last, 138546035553Spatrick OutputIterator1 out_true, OutputIterator2 out_false, 138646035553Spatrick Predicate pred); 138746035553Spatrick 138846035553Spatricktemplate <class ForwardIterator, class Predicate> 138946035553Spatrick ForwardIterator 139046035553Spatrick stable_partition(ForwardIterator first, ForwardIterator last, Predicate pred); 139146035553Spatrick 139246035553Spatricktemplate<class ForwardIterator, class Predicate> 139346035553Spatrick constexpr ForwardIterator // constexpr in C++20 139446035553Spatrick partition_point(ForwardIterator first, ForwardIterator last, Predicate pred); 139546035553Spatrick 139646035553Spatricktemplate <class ForwardIterator> 139746035553Spatrick constexpr bool // constexpr in C++20 139846035553Spatrick is_sorted(ForwardIterator first, ForwardIterator last); 139946035553Spatrick 140046035553Spatricktemplate <class ForwardIterator, class Compare> 140176d0caaeSpatrick constexpr bool // constexpr in C++20 140246035553Spatrick is_sorted(ForwardIterator first, ForwardIterator last, Compare comp); 140346035553Spatrick 140446035553Spatricktemplate<class ForwardIterator> 140546035553Spatrick constexpr ForwardIterator // constexpr in C++20 140646035553Spatrick is_sorted_until(ForwardIterator first, ForwardIterator last); 140746035553Spatrick 140846035553Spatricktemplate <class ForwardIterator, class Compare> 140946035553Spatrick constexpr ForwardIterator // constexpr in C++20 141046035553Spatrick is_sorted_until(ForwardIterator first, ForwardIterator last, Compare comp); 141146035553Spatrick 141246035553Spatricktemplate <class RandomAccessIterator> 141376d0caaeSpatrick constexpr void // constexpr in C++20 141446035553Spatrick sort(RandomAccessIterator first, RandomAccessIterator last); 141546035553Spatrick 141646035553Spatricktemplate <class RandomAccessIterator, class Compare> 141776d0caaeSpatrick constexpr void // constexpr in C++20 141846035553Spatrick sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 141946035553Spatrick 142046035553Spatricktemplate <class RandomAccessIterator> 142146035553Spatrick void 142246035553Spatrick stable_sort(RandomAccessIterator first, RandomAccessIterator last); 142346035553Spatrick 142446035553Spatricktemplate <class RandomAccessIterator, class Compare> 142546035553Spatrick void 142646035553Spatrick stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 142746035553Spatrick 142846035553Spatricktemplate <class RandomAccessIterator> 142976d0caaeSpatrick constexpr void // constexpr in C++20 143046035553Spatrick partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last); 143146035553Spatrick 143246035553Spatricktemplate <class RandomAccessIterator, class Compare> 143376d0caaeSpatrick constexpr void // constexpr in C++20 143446035553Spatrick partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp); 143546035553Spatrick 143646035553Spatricktemplate <class InputIterator, class RandomAccessIterator> 143776d0caaeSpatrick constexpr RandomAccessIterator // constexpr in C++20 143846035553Spatrick partial_sort_copy(InputIterator first, InputIterator last, 143946035553Spatrick RandomAccessIterator result_first, RandomAccessIterator result_last); 144046035553Spatrick 144146035553Spatricktemplate <class InputIterator, class RandomAccessIterator, class Compare> 144276d0caaeSpatrick constexpr RandomAccessIterator // constexpr in C++20 144346035553Spatrick partial_sort_copy(InputIterator first, InputIterator last, 144446035553Spatrick RandomAccessIterator result_first, RandomAccessIterator result_last, Compare comp); 144546035553Spatrick 144646035553Spatricktemplate <class RandomAccessIterator> 144776d0caaeSpatrick constexpr void // constexpr in C++20 144846035553Spatrick nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last); 144946035553Spatrick 145046035553Spatricktemplate <class RandomAccessIterator, class Compare> 145176d0caaeSpatrick constexpr void // constexpr in C++20 145246035553Spatrick nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp); 145346035553Spatrick 145446035553Spatricktemplate <class ForwardIterator, class T> 145546035553Spatrick constexpr ForwardIterator // constexpr in C++20 145646035553Spatrick lower_bound(ForwardIterator first, ForwardIterator last, const T& value); 145746035553Spatrick 145846035553Spatricktemplate <class ForwardIterator, class T, class Compare> 145946035553Spatrick constexpr ForwardIterator // constexpr in C++20 146046035553Spatrick lower_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 146146035553Spatrick 146246035553Spatricktemplate <class ForwardIterator, class T> 146346035553Spatrick constexpr ForwardIterator // constexpr in C++20 146446035553Spatrick upper_bound(ForwardIterator first, ForwardIterator last, const T& value); 146546035553Spatrick 146646035553Spatricktemplate <class ForwardIterator, class T, class Compare> 146746035553Spatrick constexpr ForwardIterator // constexpr in C++20 146846035553Spatrick upper_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 146946035553Spatrick 147046035553Spatricktemplate <class ForwardIterator, class T> 147146035553Spatrick constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 147246035553Spatrick equal_range(ForwardIterator first, ForwardIterator last, const T& value); 147346035553Spatrick 147446035553Spatricktemplate <class ForwardIterator, class T, class Compare> 147546035553Spatrick constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 147646035553Spatrick equal_range(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 147746035553Spatrick 147846035553Spatricktemplate <class ForwardIterator, class T> 147946035553Spatrick constexpr bool // constexpr in C++20 148046035553Spatrick binary_search(ForwardIterator first, ForwardIterator last, const T& value); 148146035553Spatrick 148246035553Spatricktemplate <class ForwardIterator, class T, class Compare> 148346035553Spatrick constexpr bool // constexpr in C++20 148446035553Spatrick binary_search(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 148546035553Spatrick 148646035553Spatricktemplate <class InputIterator1, class InputIterator2, class OutputIterator> 148776d0caaeSpatrick constexpr OutputIterator // constexpr in C++20 148846035553Spatrick merge(InputIterator1 first1, InputIterator1 last1, 148946035553Spatrick InputIterator2 first2, InputIterator2 last2, OutputIterator result); 149046035553Spatrick 149146035553Spatricktemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 149276d0caaeSpatrick constexpr OutputIterator // constexpr in C++20 149346035553Spatrick merge(InputIterator1 first1, InputIterator1 last1, 149446035553Spatrick InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 149546035553Spatrick 149646035553Spatricktemplate <class BidirectionalIterator> 149746035553Spatrick void 149846035553Spatrick inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last); 149946035553Spatrick 150046035553Spatricktemplate <class BidirectionalIterator, class Compare> 150146035553Spatrick void 150246035553Spatrick inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp); 150346035553Spatrick 150446035553Spatricktemplate <class InputIterator1, class InputIterator2> 150546035553Spatrick constexpr bool // constexpr in C++20 150646035553Spatrick includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 150746035553Spatrick 150846035553Spatricktemplate <class InputIterator1, class InputIterator2, class Compare> 150946035553Spatrick constexpr bool // constexpr in C++20 151046035553Spatrick includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp); 151146035553Spatrick 151246035553Spatricktemplate <class InputIterator1, class InputIterator2, class OutputIterator> 151376d0caaeSpatrick constexpr OutputIterator // constexpr in C++20 151446035553Spatrick set_union(InputIterator1 first1, InputIterator1 last1, 151546035553Spatrick InputIterator2 first2, InputIterator2 last2, OutputIterator result); 151646035553Spatrick 151746035553Spatricktemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 151876d0caaeSpatrick constexpr OutputIterator // constexpr in C++20 151946035553Spatrick set_union(InputIterator1 first1, InputIterator1 last1, 152046035553Spatrick InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 152146035553Spatrick 152246035553Spatricktemplate <class InputIterator1, class InputIterator2, class OutputIterator> 152346035553Spatrick constexpr OutputIterator // constexpr in C++20 152446035553Spatrick set_intersection(InputIterator1 first1, InputIterator1 last1, 152546035553Spatrick InputIterator2 first2, InputIterator2 last2, OutputIterator result); 152646035553Spatrick 152746035553Spatricktemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 152846035553Spatrick constexpr OutputIterator // constexpr in C++20 152946035553Spatrick set_intersection(InputIterator1 first1, InputIterator1 last1, 153046035553Spatrick InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 153146035553Spatrick 153246035553Spatricktemplate <class InputIterator1, class InputIterator2, class OutputIterator> 153376d0caaeSpatrick constexpr OutputIterator // constexpr in C++20 153446035553Spatrick set_difference(InputIterator1 first1, InputIterator1 last1, 153546035553Spatrick InputIterator2 first2, InputIterator2 last2, OutputIterator result); 153646035553Spatrick 153746035553Spatricktemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 153876d0caaeSpatrick constexpr OutputIterator // constexpr in C++20 153946035553Spatrick set_difference(InputIterator1 first1, InputIterator1 last1, 154046035553Spatrick InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 154146035553Spatrick 154246035553Spatricktemplate <class InputIterator1, class InputIterator2, class OutputIterator> 154376d0caaeSpatrick constexpr OutputIterator // constexpr in C++20 154446035553Spatrick set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 154546035553Spatrick InputIterator2 first2, InputIterator2 last2, OutputIterator result); 154646035553Spatrick 154746035553Spatricktemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 154876d0caaeSpatrick constexpr OutputIterator // constexpr in C++20 154946035553Spatrick set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 155046035553Spatrick InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 155146035553Spatrick 155246035553Spatricktemplate <class RandomAccessIterator> 155376d0caaeSpatrick constexpr void // constexpr in C++20 155446035553Spatrick push_heap(RandomAccessIterator first, RandomAccessIterator last); 155546035553Spatrick 155646035553Spatricktemplate <class RandomAccessIterator, class Compare> 155776d0caaeSpatrick constexpr void // constexpr in C++20 155846035553Spatrick push_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 155946035553Spatrick 156046035553Spatricktemplate <class RandomAccessIterator> 156176d0caaeSpatrick constexpr void // constexpr in C++20 156246035553Spatrick pop_heap(RandomAccessIterator first, RandomAccessIterator last); 156346035553Spatrick 156446035553Spatricktemplate <class RandomAccessIterator, class Compare> 156576d0caaeSpatrick constexpr void // constexpr in C++20 156646035553Spatrick pop_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 156746035553Spatrick 156846035553Spatricktemplate <class RandomAccessIterator> 156976d0caaeSpatrick constexpr void // constexpr in C++20 157046035553Spatrick make_heap(RandomAccessIterator first, RandomAccessIterator last); 157146035553Spatrick 157246035553Spatricktemplate <class RandomAccessIterator, class Compare> 157376d0caaeSpatrick constexpr void // constexpr in C++20 157446035553Spatrick make_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 157546035553Spatrick 157646035553Spatricktemplate <class RandomAccessIterator> 157776d0caaeSpatrick constexpr void // constexpr in C++20 157846035553Spatrick sort_heap(RandomAccessIterator first, RandomAccessIterator last); 157946035553Spatrick 158046035553Spatricktemplate <class RandomAccessIterator, class Compare> 158176d0caaeSpatrick constexpr void // constexpr in C++20 158246035553Spatrick sort_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 158346035553Spatrick 158446035553Spatricktemplate <class RandomAccessIterator> 158546035553Spatrick constexpr bool // constexpr in C++20 158646035553Spatrick is_heap(RandomAccessIterator first, RandomAccessiterator last); 158746035553Spatrick 158846035553Spatricktemplate <class RandomAccessIterator, class Compare> 158946035553Spatrick constexpr bool // constexpr in C++20 159046035553Spatrick is_heap(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 159146035553Spatrick 159246035553Spatricktemplate <class RandomAccessIterator> 159346035553Spatrick constexpr RandomAccessIterator // constexpr in C++20 159446035553Spatrick is_heap_until(RandomAccessIterator first, RandomAccessiterator last); 159546035553Spatrick 159646035553Spatricktemplate <class RandomAccessIterator, class Compare> 159746035553Spatrick constexpr RandomAccessIterator // constexpr in C++20 159846035553Spatrick is_heap_until(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 159946035553Spatrick 160046035553Spatricktemplate <class ForwardIterator> 160176d0caaeSpatrick constexpr ForwardIterator // constexpr in C++14 160276d0caaeSpatrick min_element(ForwardIterator first, ForwardIterator last); 160346035553Spatrick 160446035553Spatricktemplate <class ForwardIterator, class Compare> 160576d0caaeSpatrick constexpr ForwardIterator // constexpr in C++14 160676d0caaeSpatrick min_element(ForwardIterator first, ForwardIterator last, Compare comp); 160746035553Spatrick 160846035553Spatricktemplate <class T> 160976d0caaeSpatrick constexpr const T& // constexpr in C++14 161076d0caaeSpatrick min(const T& a, const T& b); 161146035553Spatrick 161246035553Spatricktemplate <class T, class Compare> 161376d0caaeSpatrick constexpr const T& // constexpr in C++14 161476d0caaeSpatrick min(const T& a, const T& b, Compare comp); 161546035553Spatrick 161646035553Spatricktemplate<class T> 161776d0caaeSpatrick constexpr T // constexpr in C++14 161876d0caaeSpatrick min(initializer_list<T> t); 161946035553Spatrick 162046035553Spatricktemplate<class T, class Compare> 162176d0caaeSpatrick constexpr T // constexpr in C++14 162276d0caaeSpatrick min(initializer_list<T> t, Compare comp); 162346035553Spatrick 162446035553Spatricktemplate<class T> 162546035553Spatrick constexpr const T& clamp(const T& v, const T& lo, const T& hi); // C++17 162646035553Spatrick 162746035553Spatricktemplate<class T, class Compare> 162846035553Spatrick constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp); // C++17 162946035553Spatrick 163046035553Spatricktemplate <class ForwardIterator> 163176d0caaeSpatrick constexpr ForwardIterator // constexpr in C++14 163276d0caaeSpatrick max_element(ForwardIterator first, ForwardIterator last); 163346035553Spatrick 163446035553Spatricktemplate <class ForwardIterator, class Compare> 163576d0caaeSpatrick constexpr ForwardIterator // constexpr in C++14 163676d0caaeSpatrick max_element(ForwardIterator first, ForwardIterator last, Compare comp); 163746035553Spatrick 163846035553Spatricktemplate <class T> 163976d0caaeSpatrick constexpr const T& // constexpr in C++14 164076d0caaeSpatrick max(const T& a, const T& b); 164146035553Spatrick 164246035553Spatricktemplate <class T, class Compare> 164376d0caaeSpatrick constexpr const T& // constexpr in C++14 164476d0caaeSpatrick max(const T& a, const T& b, Compare comp); 164546035553Spatrick 164646035553Spatricktemplate<class T> 164776d0caaeSpatrick constexpr T // constexpr in C++14 164876d0caaeSpatrick max(initializer_list<T> t); 164946035553Spatrick 165046035553Spatricktemplate<class T, class Compare> 165176d0caaeSpatrick constexpr T // constexpr in C++14 165276d0caaeSpatrick max(initializer_list<T> t, Compare comp); 165346035553Spatrick 165446035553Spatricktemplate<class ForwardIterator> 165576d0caaeSpatrick constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 165676d0caaeSpatrick minmax_element(ForwardIterator first, ForwardIterator last); 165746035553Spatrick 165846035553Spatricktemplate<class ForwardIterator, class Compare> 165976d0caaeSpatrick constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 166076d0caaeSpatrick minmax_element(ForwardIterator first, ForwardIterator last, Compare comp); 166146035553Spatrick 166246035553Spatricktemplate<class T> 166376d0caaeSpatrick constexpr pair<const T&, const T&> // constexpr in C++14 166476d0caaeSpatrick minmax(const T& a, const T& b); 166546035553Spatrick 166646035553Spatricktemplate<class T, class Compare> 166776d0caaeSpatrick constexpr pair<const T&, const T&> // constexpr in C++14 166876d0caaeSpatrick minmax(const T& a, const T& b, Compare comp); 166946035553Spatrick 167046035553Spatricktemplate<class T> 167176d0caaeSpatrick constexpr pair<T, T> // constexpr in C++14 167276d0caaeSpatrick minmax(initializer_list<T> t); 167346035553Spatrick 167446035553Spatricktemplate<class T, class Compare> 167576d0caaeSpatrick constexpr pair<T, T> // constexpr in C++14 167676d0caaeSpatrick minmax(initializer_list<T> t, Compare comp); 167746035553Spatrick 167846035553Spatricktemplate <class InputIterator1, class InputIterator2> 167946035553Spatrick constexpr bool // constexpr in C++20 168046035553Spatrick lexicographical_compare(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 168146035553Spatrick 168246035553Spatricktemplate <class InputIterator1, class InputIterator2, class Compare> 168346035553Spatrick constexpr bool // constexpr in C++20 168446035553Spatrick lexicographical_compare(InputIterator1 first1, InputIterator1 last1, 168546035553Spatrick InputIterator2 first2, InputIterator2 last2, Compare comp); 168646035553Spatrick 168746035553Spatricktemplate <class BidirectionalIterator> 168876d0caaeSpatrick constexpr bool // constexpr in C++20 168946035553Spatrick next_permutation(BidirectionalIterator first, BidirectionalIterator last); 169046035553Spatrick 169146035553Spatricktemplate <class BidirectionalIterator, class Compare> 169276d0caaeSpatrick constexpr bool // constexpr in C++20 169346035553Spatrick next_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 169446035553Spatrick 169546035553Spatricktemplate <class BidirectionalIterator> 169676d0caaeSpatrick constexpr bool // constexpr in C++20 169746035553Spatrick prev_permutation(BidirectionalIterator first, BidirectionalIterator last); 169846035553Spatrick 169946035553Spatricktemplate <class BidirectionalIterator, class Compare> 170076d0caaeSpatrick constexpr bool // constexpr in C++20 170146035553Spatrick prev_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 170246035553Spatrick} // std 170346035553Spatrick 170446035553Spatrick*/ 170546035553Spatrick 1706*dc37c87aSrobert#include <__assert> // all public C++ headers provide the assertion handler 170746035553Spatrick#include <__config> 170876d0caaeSpatrick#include <__debug> 170976d0caaeSpatrick#include <cstddef> 171076d0caaeSpatrick#include <type_traits> 171146035553Spatrick#include <version> 171246035553Spatrick 171376d0caaeSpatrick#include <__algorithm/adjacent_find.h> 171476d0caaeSpatrick#include <__algorithm/all_of.h> 171576d0caaeSpatrick#include <__algorithm/any_of.h> 171676d0caaeSpatrick#include <__algorithm/binary_search.h> 171776d0caaeSpatrick#include <__algorithm/clamp.h> 171876d0caaeSpatrick#include <__algorithm/comp.h> 171976d0caaeSpatrick#include <__algorithm/comp_ref_type.h> 172076d0caaeSpatrick#include <__algorithm/copy.h> 172176d0caaeSpatrick#include <__algorithm/copy_backward.h> 172276d0caaeSpatrick#include <__algorithm/copy_if.h> 172376d0caaeSpatrick#include <__algorithm/copy_n.h> 172476d0caaeSpatrick#include <__algorithm/count.h> 172576d0caaeSpatrick#include <__algorithm/count_if.h> 172676d0caaeSpatrick#include <__algorithm/equal.h> 172776d0caaeSpatrick#include <__algorithm/equal_range.h> 172876d0caaeSpatrick#include <__algorithm/fill.h> 1729*dc37c87aSrobert#include <__algorithm/fill_n.h> 173076d0caaeSpatrick#include <__algorithm/find.h> 173176d0caaeSpatrick#include <__algorithm/find_end.h> 173276d0caaeSpatrick#include <__algorithm/find_first_of.h> 173376d0caaeSpatrick#include <__algorithm/find_if.h> 173476d0caaeSpatrick#include <__algorithm/find_if_not.h> 173576d0caaeSpatrick#include <__algorithm/for_each.h> 173676d0caaeSpatrick#include <__algorithm/for_each_n.h> 173776d0caaeSpatrick#include <__algorithm/generate.h> 1738*dc37c87aSrobert#include <__algorithm/generate_n.h> 173976d0caaeSpatrick#include <__algorithm/half_positive.h> 1740*dc37c87aSrobert#include <__algorithm/in_found_result.h> 1741*dc37c87aSrobert#include <__algorithm/in_fun_result.h> 1742*dc37c87aSrobert#include <__algorithm/in_in_out_result.h> 1743*dc37c87aSrobert#include <__algorithm/in_in_result.h> 1744*dc37c87aSrobert#include <__algorithm/in_out_out_result.h> 1745*dc37c87aSrobert#include <__algorithm/in_out_result.h> 174676d0caaeSpatrick#include <__algorithm/includes.h> 174776d0caaeSpatrick#include <__algorithm/inplace_merge.h> 174876d0caaeSpatrick#include <__algorithm/is_heap.h> 174976d0caaeSpatrick#include <__algorithm/is_heap_until.h> 175076d0caaeSpatrick#include <__algorithm/is_partitioned.h> 175176d0caaeSpatrick#include <__algorithm/is_permutation.h> 175276d0caaeSpatrick#include <__algorithm/is_sorted.h> 175376d0caaeSpatrick#include <__algorithm/is_sorted_until.h> 175476d0caaeSpatrick#include <__algorithm/iter_swap.h> 175576d0caaeSpatrick#include <__algorithm/lexicographical_compare.h> 175676d0caaeSpatrick#include <__algorithm/lower_bound.h> 175776d0caaeSpatrick#include <__algorithm/make_heap.h> 175876d0caaeSpatrick#include <__algorithm/max.h> 175976d0caaeSpatrick#include <__algorithm/max_element.h> 176076d0caaeSpatrick#include <__algorithm/merge.h> 176176d0caaeSpatrick#include <__algorithm/min.h> 176276d0caaeSpatrick#include <__algorithm/min_element.h> 1763*dc37c87aSrobert#include <__algorithm/min_max_result.h> 176476d0caaeSpatrick#include <__algorithm/minmax.h> 176576d0caaeSpatrick#include <__algorithm/minmax_element.h> 176676d0caaeSpatrick#include <__algorithm/mismatch.h> 176776d0caaeSpatrick#include <__algorithm/move.h> 176876d0caaeSpatrick#include <__algorithm/move_backward.h> 176976d0caaeSpatrick#include <__algorithm/next_permutation.h> 177076d0caaeSpatrick#include <__algorithm/none_of.h> 177176d0caaeSpatrick#include <__algorithm/nth_element.h> 177276d0caaeSpatrick#include <__algorithm/partial_sort.h> 177376d0caaeSpatrick#include <__algorithm/partial_sort_copy.h> 177476d0caaeSpatrick#include <__algorithm/partition.h> 177576d0caaeSpatrick#include <__algorithm/partition_copy.h> 177676d0caaeSpatrick#include <__algorithm/partition_point.h> 177776d0caaeSpatrick#include <__algorithm/pop_heap.h> 177876d0caaeSpatrick#include <__algorithm/prev_permutation.h> 177976d0caaeSpatrick#include <__algorithm/push_heap.h> 1780*dc37c87aSrobert#include <__algorithm/ranges_adjacent_find.h> 1781*dc37c87aSrobert#include <__algorithm/ranges_all_of.h> 1782*dc37c87aSrobert#include <__algorithm/ranges_any_of.h> 1783*dc37c87aSrobert#include <__algorithm/ranges_binary_search.h> 1784*dc37c87aSrobert#include <__algorithm/ranges_clamp.h> 1785*dc37c87aSrobert#include <__algorithm/ranges_copy.h> 1786*dc37c87aSrobert#include <__algorithm/ranges_copy_backward.h> 1787*dc37c87aSrobert#include <__algorithm/ranges_copy_if.h> 1788*dc37c87aSrobert#include <__algorithm/ranges_copy_n.h> 1789*dc37c87aSrobert#include <__algorithm/ranges_count.h> 1790*dc37c87aSrobert#include <__algorithm/ranges_count_if.h> 1791*dc37c87aSrobert#include <__algorithm/ranges_equal.h> 1792*dc37c87aSrobert#include <__algorithm/ranges_equal_range.h> 1793*dc37c87aSrobert#include <__algorithm/ranges_fill.h> 1794*dc37c87aSrobert#include <__algorithm/ranges_fill_n.h> 1795dcb03dacSrobert#include <__algorithm/ranges_find.h> 1796*dc37c87aSrobert#include <__algorithm/ranges_find_end.h> 1797*dc37c87aSrobert#include <__algorithm/ranges_find_first_of.h> 1798dcb03dacSrobert#include <__algorithm/ranges_find_if.h> 1799dcb03dacSrobert#include <__algorithm/ranges_find_if_not.h> 1800*dc37c87aSrobert#include <__algorithm/ranges_for_each.h> 1801*dc37c87aSrobert#include <__algorithm/ranges_for_each_n.h> 1802*dc37c87aSrobert#include <__algorithm/ranges_generate.h> 1803*dc37c87aSrobert#include <__algorithm/ranges_generate_n.h> 1804*dc37c87aSrobert#include <__algorithm/ranges_includes.h> 1805*dc37c87aSrobert#include <__algorithm/ranges_inplace_merge.h> 1806*dc37c87aSrobert#include <__algorithm/ranges_is_heap.h> 1807*dc37c87aSrobert#include <__algorithm/ranges_is_heap_until.h> 1808*dc37c87aSrobert#include <__algorithm/ranges_is_partitioned.h> 1809*dc37c87aSrobert#include <__algorithm/ranges_is_permutation.h> 1810*dc37c87aSrobert#include <__algorithm/ranges_is_sorted.h> 1811*dc37c87aSrobert#include <__algorithm/ranges_is_sorted_until.h> 1812*dc37c87aSrobert#include <__algorithm/ranges_lexicographical_compare.h> 1813*dc37c87aSrobert#include <__algorithm/ranges_lower_bound.h> 1814*dc37c87aSrobert#include <__algorithm/ranges_make_heap.h> 1815*dc37c87aSrobert#include <__algorithm/ranges_max.h> 1816*dc37c87aSrobert#include <__algorithm/ranges_max_element.h> 1817*dc37c87aSrobert#include <__algorithm/ranges_merge.h> 1818*dc37c87aSrobert#include <__algorithm/ranges_min.h> 1819*dc37c87aSrobert#include <__algorithm/ranges_min_element.h> 1820*dc37c87aSrobert#include <__algorithm/ranges_minmax.h> 1821*dc37c87aSrobert#include <__algorithm/ranges_minmax_element.h> 1822*dc37c87aSrobert#include <__algorithm/ranges_mismatch.h> 1823*dc37c87aSrobert#include <__algorithm/ranges_move.h> 1824*dc37c87aSrobert#include <__algorithm/ranges_move_backward.h> 1825*dc37c87aSrobert#include <__algorithm/ranges_next_permutation.h> 1826*dc37c87aSrobert#include <__algorithm/ranges_none_of.h> 1827*dc37c87aSrobert#include <__algorithm/ranges_nth_element.h> 1828*dc37c87aSrobert#include <__algorithm/ranges_partial_sort.h> 1829*dc37c87aSrobert#include <__algorithm/ranges_partial_sort_copy.h> 1830*dc37c87aSrobert#include <__algorithm/ranges_partition.h> 1831*dc37c87aSrobert#include <__algorithm/ranges_partition_copy.h> 1832*dc37c87aSrobert#include <__algorithm/ranges_partition_point.h> 1833*dc37c87aSrobert#include <__algorithm/ranges_pop_heap.h> 1834*dc37c87aSrobert#include <__algorithm/ranges_prev_permutation.h> 1835*dc37c87aSrobert#include <__algorithm/ranges_push_heap.h> 1836*dc37c87aSrobert#include <__algorithm/ranges_remove.h> 1837*dc37c87aSrobert#include <__algorithm/ranges_remove_copy.h> 1838*dc37c87aSrobert#include <__algorithm/ranges_remove_copy_if.h> 1839*dc37c87aSrobert#include <__algorithm/ranges_remove_if.h> 1840*dc37c87aSrobert#include <__algorithm/ranges_replace.h> 1841*dc37c87aSrobert#include <__algorithm/ranges_replace_copy.h> 1842*dc37c87aSrobert#include <__algorithm/ranges_replace_copy_if.h> 1843*dc37c87aSrobert#include <__algorithm/ranges_replace_if.h> 1844*dc37c87aSrobert#include <__algorithm/ranges_reverse.h> 1845*dc37c87aSrobert#include <__algorithm/ranges_reverse_copy.h> 1846*dc37c87aSrobert#include <__algorithm/ranges_rotate.h> 1847*dc37c87aSrobert#include <__algorithm/ranges_rotate_copy.h> 1848*dc37c87aSrobert#include <__algorithm/ranges_sample.h> 1849*dc37c87aSrobert#include <__algorithm/ranges_search.h> 1850*dc37c87aSrobert#include <__algorithm/ranges_search_n.h> 1851*dc37c87aSrobert#include <__algorithm/ranges_set_difference.h> 1852*dc37c87aSrobert#include <__algorithm/ranges_set_intersection.h> 1853*dc37c87aSrobert#include <__algorithm/ranges_set_symmetric_difference.h> 1854*dc37c87aSrobert#include <__algorithm/ranges_set_union.h> 1855*dc37c87aSrobert#include <__algorithm/ranges_shuffle.h> 1856*dc37c87aSrobert#include <__algorithm/ranges_sort.h> 1857*dc37c87aSrobert#include <__algorithm/ranges_sort_heap.h> 1858*dc37c87aSrobert#include <__algorithm/ranges_stable_partition.h> 1859*dc37c87aSrobert#include <__algorithm/ranges_stable_sort.h> 1860*dc37c87aSrobert#include <__algorithm/ranges_swap_ranges.h> 1861*dc37c87aSrobert#include <__algorithm/ranges_transform.h> 1862*dc37c87aSrobert#include <__algorithm/ranges_unique.h> 1863*dc37c87aSrobert#include <__algorithm/ranges_unique_copy.h> 1864*dc37c87aSrobert#include <__algorithm/ranges_upper_bound.h> 186576d0caaeSpatrick#include <__algorithm/remove.h> 186676d0caaeSpatrick#include <__algorithm/remove_copy.h> 186776d0caaeSpatrick#include <__algorithm/remove_copy_if.h> 186876d0caaeSpatrick#include <__algorithm/remove_if.h> 186976d0caaeSpatrick#include <__algorithm/replace.h> 187076d0caaeSpatrick#include <__algorithm/replace_copy.h> 187176d0caaeSpatrick#include <__algorithm/replace_copy_if.h> 187276d0caaeSpatrick#include <__algorithm/replace_if.h> 187376d0caaeSpatrick#include <__algorithm/reverse.h> 187476d0caaeSpatrick#include <__algorithm/reverse_copy.h> 187576d0caaeSpatrick#include <__algorithm/rotate.h> 187676d0caaeSpatrick#include <__algorithm/rotate_copy.h> 187776d0caaeSpatrick#include <__algorithm/sample.h> 187876d0caaeSpatrick#include <__algorithm/search.h> 187976d0caaeSpatrick#include <__algorithm/search_n.h> 188076d0caaeSpatrick#include <__algorithm/set_difference.h> 188176d0caaeSpatrick#include <__algorithm/set_intersection.h> 188276d0caaeSpatrick#include <__algorithm/set_symmetric_difference.h> 188376d0caaeSpatrick#include <__algorithm/set_union.h> 188476d0caaeSpatrick#include <__algorithm/shift_left.h> 188576d0caaeSpatrick#include <__algorithm/shift_right.h> 188676d0caaeSpatrick#include <__algorithm/shuffle.h> 188776d0caaeSpatrick#include <__algorithm/sift_down.h> 188876d0caaeSpatrick#include <__algorithm/sort.h> 188976d0caaeSpatrick#include <__algorithm/sort_heap.h> 189076d0caaeSpatrick#include <__algorithm/stable_partition.h> 189176d0caaeSpatrick#include <__algorithm/stable_sort.h> 189276d0caaeSpatrick#include <__algorithm/swap_ranges.h> 189376d0caaeSpatrick#include <__algorithm/transform.h> 189476d0caaeSpatrick#include <__algorithm/unique.h> 1895*dc37c87aSrobert#include <__algorithm/unique_copy.h> 189676d0caaeSpatrick#include <__algorithm/unwrap_iter.h> 189776d0caaeSpatrick#include <__algorithm/upper_bound.h> 189846035553Spatrick 1899*dc37c87aSrobert// standard-mandated includes 1900*dc37c87aSrobert 1901*dc37c87aSrobert// [algorithm.syn] 1902*dc37c87aSrobert#include <initializer_list> 1903*dc37c87aSrobert 190446035553Spatrick#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 190546035553Spatrick# pragma GCC system_header 190646035553Spatrick#endif 190746035553Spatrick 190846035553Spatrick#if defined(_LIBCPP_HAS_PARALLEL_ALGORITHMS) && _LIBCPP_STD_VER >= 17 190946035553Spatrick# include <__pstl_algorithm> 191046035553Spatrick#endif 191146035553Spatrick 1912*dc37c87aSrobert#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17 1913*dc37c87aSrobert# include <chrono> 1914*dc37c87aSrobert#endif 1915*dc37c87aSrobert 1916*dc37c87aSrobert#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 1917*dc37c87aSrobert# include <atomic> 1918*dc37c87aSrobert# include <concepts> 1919*dc37c87aSrobert# include <cstring> 1920*dc37c87aSrobert# include <iterator> 1921*dc37c87aSrobert# include <memory> 1922*dc37c87aSrobert# include <stdexcept> 1923*dc37c87aSrobert# include <utility> 1924*dc37c87aSrobert#endif 1925*dc37c87aSrobert 192646035553Spatrick#endif // _LIBCPP_ALGORITHM 1927