1e78f53d1SNikolas Klauser// -*- C++ -*- 2e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 3e78f53d1SNikolas Klauser// 4e78f53d1SNikolas Klauser// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5e78f53d1SNikolas Klauser// See https://llvm.org/LICENSE.txt for license information. 6e78f53d1SNikolas Klauser// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7e78f53d1SNikolas Klauser// 8e78f53d1SNikolas Klauser//===----------------------------------------------------------------------===// 9e78f53d1SNikolas Klauser 10*ce777190SNikolas Klauser#ifndef _LIBCPP___CXX03_ALGORITHM 11*ce777190SNikolas Klauser#define _LIBCPP___CXX03_ALGORITHM 12e78f53d1SNikolas Klauser 13e78f53d1SNikolas Klauser/* 14e78f53d1SNikolas Klauser algorithm synopsis 15e78f53d1SNikolas Klauser 1673fbae83SNikolas Klauser#include <__cxx03/initializer_list> 17e78f53d1SNikolas Klauser 18e78f53d1SNikolas Klausernamespace std 19e78f53d1SNikolas Klauser{ 20e78f53d1SNikolas Klauser 21e78f53d1SNikolas Klausernamespace ranges { 22e78f53d1SNikolas Klauser 23e78f53d1SNikolas Klauser // [algorithms.results], algorithm result types 24e78f53d1SNikolas Klauser template <class I, class F> 25e78f53d1SNikolas Klauser struct in_fun_result; // since C++20 26e78f53d1SNikolas Klauser 27e78f53d1SNikolas Klauser template <class I1, class I2> 28e78f53d1SNikolas Klauser struct in_in_result; // since C++20 29e78f53d1SNikolas Klauser 30e78f53d1SNikolas Klauser template <class I, class O> 31e78f53d1SNikolas Klauser struct in_out_result; // since C++20 32e78f53d1SNikolas Klauser 33e78f53d1SNikolas Klauser template <class I1, class I2, class O> 34e78f53d1SNikolas Klauser struct in_in_out_result; // since C++20 35e78f53d1SNikolas Klauser 36e78f53d1SNikolas Klauser template <class I, class O1, class O2> 37e78f53d1SNikolas Klauser struct in_out_out_result; // since C++20 38e78f53d1SNikolas Klauser 39e78f53d1SNikolas Klauser template <class I1, class I2> 40e78f53d1SNikolas Klauser struct min_max_result; // since C++20 41e78f53d1SNikolas Klauser 42e78f53d1SNikolas Klauser template <class I> 43e78f53d1SNikolas Klauser struct in_found_result; // since C++20 44e78f53d1SNikolas Klauser 45e78f53d1SNikolas Klauser template <class I, class T> 46e78f53d1SNikolas Klauser struct in_value_result; // since C++23 47e78f53d1SNikolas Klauser 48e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 49e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> // since C++20 50e78f53d1SNikolas Klauser constexpr I min_element(I first, S last, Comp comp = {}, Proj proj = {}); 51e78f53d1SNikolas Klauser 52e78f53d1SNikolas Klauser template<forward_range R, class Proj = identity, 53e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> // since C++20 54e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> min_element(R&& r, Comp comp = {}, Proj proj = {}); 55e78f53d1SNikolas Klauser 56e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 57e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 58e78f53d1SNikolas Klauser constexpr I ranges::max_element(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 59e78f53d1SNikolas Klauser 60e78f53d1SNikolas Klauser template<forward_range R, class Proj = identity, 61e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 62e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> ranges::max_element(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 63e78f53d1SNikolas Klauser 64e78f53d1SNikolas Klauser template<class I1, class I2> 65e78f53d1SNikolas Klauser using mismatch_result = in_in_result<I1, I2>; 66e78f53d1SNikolas Klauser 67e78f53d1SNikolas Klauser template <input_iterator I1, sentinel_for<_I1> S1, input_iterator I2, sentinel_for<_I2> S2, 68e78f53d1SNikolas Klauser class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 69e78f53d1SNikolas Klauser requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 70e78f53d1SNikolas Klauser constexpr mismatch_result<_I1, _I2> // since C++20 71e78f53d1SNikolas Klauser mismatch()(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {}) 72e78f53d1SNikolas Klauser 73e78f53d1SNikolas Klauser template <input_range R1, input_range R2, 74e78f53d1SNikolas Klauser class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 75e78f53d1SNikolas Klauser requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 76e78f53d1SNikolas Klauser constexpr mismatch_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>> 77e78f53d1SNikolas Klauser mismatch(R1&& r1, R2&& r2, Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {}) // since C++20 78e78f53d1SNikolas Klauser 79e78f53d1SNikolas Klauser requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 80e78f53d1SNikolas Klauser constexpr I find(I first, S last, const T& value, Proj proj = {}); // since C++20 81e78f53d1SNikolas Klauser 82e78f53d1SNikolas Klauser template<input_range R, class T, class Proj = identity> 83e78f53d1SNikolas Klauser requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> 84e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 85e78f53d1SNikolas Klauser find(R&& r, const T& value, Proj proj = {}); // since C++20 86e78f53d1SNikolas Klauser 87e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class Proj = identity, 88e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 89e78f53d1SNikolas Klauser constexpr I find_if(I first, S last, Pred pred, Proj proj = {}); // since C++20 90e78f53d1SNikolas Klauser 91e78f53d1SNikolas Klauser template<input_range R, class Proj = identity, 92e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 93e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 94e78f53d1SNikolas Klauser find_if(R&& r, Pred pred, Proj proj = {}); // since C++20 95e78f53d1SNikolas Klauser 96e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class Proj = identity, 97e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 98e78f53d1SNikolas Klauser constexpr I find_if_not(I first, S last, Pred pred, Proj proj = {}); // since C++20 99e78f53d1SNikolas Klauser 100e78f53d1SNikolas Klauser template<input_range R, class Proj = identity, 101e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 102e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 103e78f53d1SNikolas Klauser find_if_not(R&& r, Pred pred, Proj proj = {}); // since C++20 104e78f53d1SNikolas Klauser 105e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity> 106e78f53d1SNikolas Klauser requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 107e78f53d1SNikolas Klauser constexpr subrange<I> find_last(I first, S last, const T& value, Proj proj = {}); // since C++23 108e78f53d1SNikolas Klauser 109e78f53d1SNikolas Klauser template<forward_range R, class T, class Proj = identity> 110e78f53d1SNikolas Klauser requires 111e78f53d1SNikolas Klauser indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> 112e78f53d1SNikolas Klauser constexpr borrowed_subrange_t<R> find_last(R&& r, const T& value, Proj proj = {}); // since C++23 113e78f53d1SNikolas Klauser 114e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 115e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 116e78f53d1SNikolas Klauser constexpr subrange<I> find_last_if(I first, S last, Pred pred, Proj proj = {}); // since C++23 117e78f53d1SNikolas Klauser 118e78f53d1SNikolas Klauser template<forward_range R, class Proj = identity, 119e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 120e78f53d1SNikolas Klauser constexpr borrowed_subrange_t<R> find_last_if(R&& r, Pred pred, Proj proj = {}); // since C++23 121e78f53d1SNikolas Klauser 122e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 123e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 124e78f53d1SNikolas Klauser constexpr subrange<I> find_last_if_not(I first, S last, Pred pred, Proj proj = {}); // since C++23 125e78f53d1SNikolas Klauser 126e78f53d1SNikolas Klauser template<forward_range R, class Proj = identity, 127e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 128e78f53d1SNikolas Klauser constexpr borrowed_subrange_t<R> find_last_if_not(R&& r, Pred pred, Proj proj = {}); // since C++23 129e78f53d1SNikolas Klauser 130e78f53d1SNikolas Klauser template<class T, class Proj = identity, 131e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 132e78f53d1SNikolas Klauser constexpr const T& min(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 133e78f53d1SNikolas Klauser 134e78f53d1SNikolas Klauser template<copyable T, class Proj = identity, 135e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 136e78f53d1SNikolas Klauser constexpr T min(initializer_list<T> r, Comp comp = {}, Proj proj = {}); // since C++20 137e78f53d1SNikolas Klauser 138e78f53d1SNikolas Klauser template<input_range R, class Proj = identity, 139e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 140e78f53d1SNikolas Klauser requires indirectly_copyable_storable<iterator_t<R>, range_value_t<R>*> 141e78f53d1SNikolas Klauser constexpr range_value_t<R> 142e78f53d1SNikolas Klauser min(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 143e78f53d1SNikolas Klauser 144e78f53d1SNikolas Klauser template<class T, class Proj = identity, 145e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 146e78f53d1SNikolas Klauser constexpr const T& max(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 147e78f53d1SNikolas Klauser 148e78f53d1SNikolas Klauser template<copyable T, class Proj = identity, 149e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 150e78f53d1SNikolas Klauser constexpr T max(initializer_list<T> r, Comp comp = {}, Proj proj = {}); // since C++20 151e78f53d1SNikolas Klauser 152e78f53d1SNikolas Klauser template<input_range R, class Proj = identity, 153e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 154e78f53d1SNikolas Klauser requires indirectly_copyable_storable<iterator_t<R>, range_value_t<R>*> 155e78f53d1SNikolas Klauser constexpr range_value_t<R> 156e78f53d1SNikolas Klauser max(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 157e78f53d1SNikolas Klauser 158e78f53d1SNikolas Klauser template<class I, class O> 159e78f53d1SNikolas Klauser using unary_transform_result = in_out_result<I, O>; // since C++20 160e78f53d1SNikolas Klauser 161e78f53d1SNikolas Klauser template<class I1, class I2, class O> 162e78f53d1SNikolas Klauser using binary_transform_result = in_in_out_result<I1, I2, O>; // since C++20 163e78f53d1SNikolas Klauser 164e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, 165e78f53d1SNikolas Klauser copy_constructible F, class Proj = identity> 166e78f53d1SNikolas Klauser requires indirectly_writable<O, indirect_result_t<F&, projected<I, Proj>>> 167e78f53d1SNikolas Klauser constexpr ranges::unary_transform_result<I, O> 168e78f53d1SNikolas Klauser transform(I first1, S last1, O result, F op, Proj proj = {}); // since C++20 169e78f53d1SNikolas Klauser 170e78f53d1SNikolas Klauser template<input_range R, weakly_incrementable O, copy_constructible F, 171e78f53d1SNikolas Klauser class Proj = identity> 172e78f53d1SNikolas Klauser requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R>, Proj>>> 173e78f53d1SNikolas Klauser constexpr ranges::unary_transform_result<borrowed_iterator_t<R>, O> 174e78f53d1SNikolas Klauser transform(R&& r, O result, F op, Proj proj = {}); // since C++20 175e78f53d1SNikolas Klauser 176e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 177e78f53d1SNikolas Klauser weakly_incrementable O, copy_constructible F, class Proj1 = identity, 178e78f53d1SNikolas Klauser class Proj2 = identity> 179e78f53d1SNikolas Klauser requires indirectly_writable<O, indirect_result_t<F&, projected<I1, Proj1>, 180e78f53d1SNikolas Klauser projected<I2, Proj2>>> 181e78f53d1SNikolas Klauser constexpr ranges::binary_transform_result<I1, I2, O> 182e78f53d1SNikolas Klauser transform(I1 first1, S1 last1, I2 first2, S2 last2, O result, 183e78f53d1SNikolas Klauser F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 184e78f53d1SNikolas Klauser 185e78f53d1SNikolas Klauser template<input_range R1, input_range R2, weakly_incrementable O, 186e78f53d1SNikolas Klauser copy_constructible F, class Proj1 = identity, class Proj2 = identity> 187e78f53d1SNikolas Klauser requires indirectly_writable<O, indirect_result_t<F&, projected<iterator_t<R1>, Proj1>, 188e78f53d1SNikolas Klauser projected<iterator_t<R2>, Proj2>>> 189e78f53d1SNikolas Klauser constexpr ranges::binary_transform_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>, O> 190e78f53d1SNikolas Klauser transform(R1&& r1, R2&& r2, O result, 191e78f53d1SNikolas Klauser F binary_op, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 192e78f53d1SNikolas Klauser 193e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class T, class Proj = identity> 194e78f53d1SNikolas Klauser requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 195e78f53d1SNikolas Klauser constexpr iter_difference_t<I> 196e78f53d1SNikolas Klauser count(I first, S last, const T& value, Proj proj = {}); // since C++20 197e78f53d1SNikolas Klauser 198e78f53d1SNikolas Klauser template<input_range R, class T, class Proj = identity> 199e78f53d1SNikolas Klauser requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> 200e78f53d1SNikolas Klauser constexpr range_difference_t<R> 201e78f53d1SNikolas Klauser count(R&& r, const T& value, Proj proj = {}); // since C++20 202e78f53d1SNikolas Klauser 203e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class Proj = identity, 204e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 205e78f53d1SNikolas Klauser constexpr iter_difference_t<I> 206e78f53d1SNikolas Klauser count_if(I first, S last, Pred pred, Proj proj = {}); // since C++20 207e78f53d1SNikolas Klauser 208e78f53d1SNikolas Klauser template<input_range R, class Proj = identity, 209e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 210e78f53d1SNikolas Klauser constexpr range_difference_t<R> 211e78f53d1SNikolas Klauser count_if(R&& r, Pred pred, Proj proj = {}); // since C++20 212e78f53d1SNikolas Klauser 213e78f53d1SNikolas Klauser template<class T> 214e78f53d1SNikolas Klauser using minmax_result = min_max_result<T>; 215e78f53d1SNikolas Klauser 216e78f53d1SNikolas Klauser template<class T, class Proj = identity, 217e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 218e78f53d1SNikolas Klauser constexpr ranges::minmax_result<const T&> 219e78f53d1SNikolas Klauser minmax(const T& a, const T& b, Comp comp = {}, Proj proj = {}); // since C++20 220e78f53d1SNikolas Klauser 221e78f53d1SNikolas Klauser template<copyable T, class Proj = identity, 222e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 223e78f53d1SNikolas Klauser constexpr ranges::minmax_result<T> 224e78f53d1SNikolas Klauser minmax(initializer_list<T> r, Comp comp = {}, Proj proj = {}); // since C++20 225e78f53d1SNikolas Klauser 226e78f53d1SNikolas Klauser template<input_range R, class Proj = identity, 227e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 228e78f53d1SNikolas Klauser requires indirectly_copyable_storable<iterator_t<R>, range_value_t<R>*> 229e78f53d1SNikolas Klauser constexpr ranges::minmax_result<range_value_t<R>> 230e78f53d1SNikolas Klauser minmax(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 231e78f53d1SNikolas Klauser 232e78f53d1SNikolas Klauser template<class I> 233e78f53d1SNikolas Klauser using minmax_element_result = min_max_result<I>; 234e78f53d1SNikolas Klauser 235e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 236e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 237e78f53d1SNikolas Klauser constexpr ranges::minmax_element_result<I> 238e78f53d1SNikolas Klauser minmax_element(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 239e78f53d1SNikolas Klauser 240e78f53d1SNikolas Klauser template<forward_range R, class Proj = identity, 241e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 242e78f53d1SNikolas Klauser constexpr ranges::minmax_element_result<borrowed_iterator_t<R>> 243e78f53d1SNikolas Klauser minmax_element(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 244e78f53d1SNikolas Klauser 245e78f53d1SNikolas Klauser template<forward_iterator I1, sentinel_for<I1> S1, 246e78f53d1SNikolas Klauser forward_iterator I2, sentinel_for<I2> S2, 247e78f53d1SNikolas Klauser class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 248e78f53d1SNikolas Klauser requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 249e78f53d1SNikolas Klauser constexpr bool contains_subrange(I1 first1, S1 last1, I2 first2, S2 last2, 250e78f53d1SNikolas Klauser Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++23 251e78f53d1SNikolas Klauser 252e78f53d1SNikolas Klauser template<forward_range R1, forward_range R2, 253e78f53d1SNikolas Klauser class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 254e78f53d1SNikolas Klauser requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 255e78f53d1SNikolas Klauser constexpr bool contains_subrange(R1&& r1, R2&& r2, Pred pred = {}, 256e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++23 257e78f53d1SNikolas Klauser 258e78f53d1SNikolas Klauser template<class I, class O> 259e78f53d1SNikolas Klauser using copy_result = in_out_result<I, O>; // since C++20 260e78f53d1SNikolas Klauser 261e78f53d1SNikolas Klauser template<class I, class O> 262e78f53d1SNikolas Klauser using copy_n_result = in_out_result<I, O>; // since C++20 263e78f53d1SNikolas Klauser 264e78f53d1SNikolas Klauser template<class I, class O> 265e78f53d1SNikolas Klauser using copy_if_result = in_out_result<I, O>; // since C++20 266e78f53d1SNikolas Klauser 267e78f53d1SNikolas Klauser template<class I1, class I2> 268e78f53d1SNikolas Klauser using copy_backward_result = in_out_result<I1, I2>; // since C++20 269e78f53d1SNikolas Klauser 270e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class T, class Proj = identity> 271e78f53d1SNikolas Klauser requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 272e78f53d1SNikolas Klauser constexpr bool ranges::contains(I first, S last, const T& value, Proj proj = {}); // since C++23 273e78f53d1SNikolas Klauser 274e78f53d1SNikolas Klauser template<input_range R, class T, class Proj = identity> 275e78f53d1SNikolas Klauser requires indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> 276e78f53d1SNikolas Klauser constexpr bool ranges::contains(R&& r, const T& value, Proj proj = {}); // since C++23 277e78f53d1SNikolas Klauser 278e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, weakly_incrementable O> 279e78f53d1SNikolas Klauser requires indirectly_copyable<I, O> 280e78f53d1SNikolas Klauser constexpr ranges::copy_result<I, O> ranges::copy(I first, S last, O result); // since C++20 281e78f53d1SNikolas Klauser 282e78f53d1SNikolas Klauser template<input_range R, weakly_incrementable O> 283e78f53d1SNikolas Klauser requires indirectly_copyable<iterator_t<R>, O> 284e78f53d1SNikolas Klauser constexpr ranges::copy_result<borrowed_iterator_t<R>, O> ranges::copy(R&& r, O result); // since C++20 285e78f53d1SNikolas Klauser 286e78f53d1SNikolas Klauser template<input_iterator I, weakly_incrementable O> 287e78f53d1SNikolas Klauser requires indirectly_copyable<I, O> 288e78f53d1SNikolas Klauser constexpr ranges::copy_n_result<I, O> 289e78f53d1SNikolas Klauser ranges::copy_n(I first, iter_difference_t<I> n, O result); // since C++20 290e78f53d1SNikolas Klauser 291e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity, 292e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 293e78f53d1SNikolas Klauser requires indirectly_copyable<I, O> 294e78f53d1SNikolas Klauser constexpr ranges::copy_if_result<I, O> 295e78f53d1SNikolas Klauser ranges::copy_if(I first, S last, O result, Pred pred, Proj proj = {}); // since C++20 296e78f53d1SNikolas Klauser 297e78f53d1SNikolas Klauser template<input_range R, weakly_incrementable O, class Proj = identity, 298e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 299e78f53d1SNikolas Klauser requires indirectly_copyable<iterator_t<R>, O> 300e78f53d1SNikolas Klauser constexpr ranges::copy_if_result<borrowed_iterator_t<R>, O> 301e78f53d1SNikolas Klauser ranges::copy_if(R&& r, O result, Pred pred, Proj proj = {}); // since C++20 302e78f53d1SNikolas Klauser 303e78f53d1SNikolas Klauser template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2> 304e78f53d1SNikolas Klauser requires indirectly_copyable<I1, I2> 305e78f53d1SNikolas Klauser constexpr ranges::copy_backward_result<I1, I2> 306e78f53d1SNikolas Klauser ranges::copy_backward(I1 first, S1 last, I2 result); // since C++20 307e78f53d1SNikolas Klauser 308e78f53d1SNikolas Klauser template<bidirectional_range R, bidirectional_iterator I> 309e78f53d1SNikolas Klauser requires indirectly_copyable<iterator_t<R>, I> 310e78f53d1SNikolas Klauser constexpr ranges::copy_backward_result<borrowed_iterator_t<R>, I> 311e78f53d1SNikolas Klauser ranges::copy_backward(R&& r, I result); // since C++20 312e78f53d1SNikolas Klauser 313e78f53d1SNikolas Klauser template<class I, class F> 314e78f53d1SNikolas Klauser using for_each_result = in_fun_result<I, F>; // since C++20 315e78f53d1SNikolas Klauser 316e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class Proj = identity, 317e78f53d1SNikolas Klauser indirectly_unary_invocable<projected<I, Proj>> Fun> 318e78f53d1SNikolas Klauser constexpr ranges::for_each_result<I, Fun> 319e78f53d1SNikolas Klauser ranges::for_each(I first, S last, Fun f, Proj proj = {}); // since C++20 320e78f53d1SNikolas Klauser 321e78f53d1SNikolas Klauser template<input_range R, class Proj = identity, 322e78f53d1SNikolas Klauser indirectly_unary_invocable<projected<iterator_t<R>, Proj>> Fun> 323e78f53d1SNikolas Klauser constexpr ranges::for_each_result<borrowed_iterator_t<R>, Fun> 324e78f53d1SNikolas Klauser ranges::for_each(R&& r, Fun f, Proj proj = {}); // since C++20 325e78f53d1SNikolas Klauser 326e78f53d1SNikolas Klauser template<input_iterator I, class Proj = identity, 327e78f53d1SNikolas Klauser indirectly_unary_invocable<projected<I, Proj>> Fun> 328e78f53d1SNikolas Klauser constexpr ranges::for_each_n_result<I, Fun> 329e78f53d1SNikolas Klauser ranges::for_each_n(I first, iter_difference_t<I> n, Fun f, Proj proj = {}); // since C++20 330e78f53d1SNikolas Klauser 331e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class Proj = identity, 332e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 333e78f53d1SNikolas Klauser constexpr bool ranges::is_partitioned(I first, S last, Pred pred, Proj proj = {}); // since C++20 334e78f53d1SNikolas Klauser 335e78f53d1SNikolas Klauser template<input_range R, class Proj = identity, 336e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 337e78f53d1SNikolas Klauser constexpr bool ranges::is_partitioned(R&& r, Pred pred, Proj proj = {}); // since C++20 338e78f53d1SNikolas Klauser 339e78f53d1SNikolas Klauser template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 340e78f53d1SNikolas Klauser class Proj = identity> 341e78f53d1SNikolas Klauser requires sortable<I, Comp, Proj> 342e78f53d1SNikolas Klauser constexpr I 343e78f53d1SNikolas Klauser ranges::push_heap(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 344e78f53d1SNikolas Klauser 345e78f53d1SNikolas Klauser template<random_access_range R, class Comp = ranges::less, class Proj = identity> 346e78f53d1SNikolas Klauser requires sortable<iterator_t<R>, Comp, Proj> 347e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 348e78f53d1SNikolas Klauser ranges::push_heap(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 349e78f53d1SNikolas Klauser 350e78f53d1SNikolas Klauser template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 351e78f53d1SNikolas Klauser class Proj = identity> 352e78f53d1SNikolas Klauser requires sortable<I, Comp, Proj> 353e78f53d1SNikolas Klauser constexpr I 354e78f53d1SNikolas Klauser ranges::pop_heap(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 355e78f53d1SNikolas Klauser 356e78f53d1SNikolas Klauser template<random_access_range R, class Comp = ranges::less, class Proj = identity> 357e78f53d1SNikolas Klauser requires sortable<iterator_t<R>, Comp, Proj> 358e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 359e78f53d1SNikolas Klauser ranges::pop_heap(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 360e78f53d1SNikolas Klauser 361e78f53d1SNikolas Klauser template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 362e78f53d1SNikolas Klauser class Proj = identity> 363e78f53d1SNikolas Klauser requires sortable<I, Comp, Proj> 364e78f53d1SNikolas Klauser constexpr I 365e78f53d1SNikolas Klauser ranges::make_heap(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 366e78f53d1SNikolas Klauser 367e78f53d1SNikolas Klauser template<random_access_range R, class Comp = ranges::less, class Proj = identity> 368e78f53d1SNikolas Klauser requires sortable<iterator_t<R>, Comp, Proj> 369e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 370e78f53d1SNikolas Klauser ranges::make_heap(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 371e78f53d1SNikolas Klauser 372e78f53d1SNikolas Klauser template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 373e78f53d1SNikolas Klauser class Proj = identity> 374e78f53d1SNikolas Klauser requires sortable<I, Comp, Proj> 375e78f53d1SNikolas Klauser constexpr I 376e78f53d1SNikolas Klauser ranges::sort_heap(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 377e78f53d1SNikolas Klauser 378e78f53d1SNikolas Klauser template<random_access_range R, class Comp = ranges::less, class Proj = identity> 379e78f53d1SNikolas Klauser requires sortable<iterator_t<R>, Comp, Proj> 380e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 381e78f53d1SNikolas Klauser ranges::sort_heap(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 382e78f53d1SNikolas Klauser 383e78f53d1SNikolas Klauser template<random_access_iterator I, sentinel_for<I> S, class Proj = identity, 384e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 385e78f53d1SNikolas Klauser constexpr bool is_heap(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 386e78f53d1SNikolas Klauser 387e78f53d1SNikolas Klauser template<random_access_range R, class Proj = identity, 388e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 389e78f53d1SNikolas Klauser constexpr bool is_heap(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 390e78f53d1SNikolas Klauser 391e78f53d1SNikolas Klauser template<random_access_iterator I, sentinel_for<I> S, class Proj = identity, 392e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 393e78f53d1SNikolas Klauser constexpr I is_heap_until(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 394e78f53d1SNikolas Klauser 395e78f53d1SNikolas Klauser template<random_access_range R, class Proj = identity, 396e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 397e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 398e78f53d1SNikolas Klauser is_heap_until(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 399e78f53d1SNikolas Klauser 400e78f53d1SNikolas Klauser template<bidirectional_iterator I, sentinel_for<I> S> 401e78f53d1SNikolas Klauser requires permutable<I> 402e78f53d1SNikolas Klauser constexpr I ranges::reverse(I first, S last); // since C++20 403e78f53d1SNikolas Klauser 404e78f53d1SNikolas Klauser template<bidirectional_range R> 405e78f53d1SNikolas Klauser requires permutable<iterator_t<R>> 406e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> ranges::reverse(R&& r); // since C++20 407e78f53d1SNikolas Klauser 408e78f53d1SNikolas Klauser template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 409e78f53d1SNikolas Klauser class Proj = identity> 410e78f53d1SNikolas Klauser requires sortable<I, Comp, Proj> 411e78f53d1SNikolas Klauser constexpr I 412e78f53d1SNikolas Klauser ranges::sort(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 413e78f53d1SNikolas Klauser 414e78f53d1SNikolas Klauser template<random_access_range R, class Comp = ranges::less, class Proj = identity> 415e78f53d1SNikolas Klauser requires sortable<iterator_t<R>, Comp, Proj> 416e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 417e78f53d1SNikolas Klauser ranges::sort(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 418e78f53d1SNikolas Klauser 419e78f53d1SNikolas Klauser template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 420e78f53d1SNikolas Klauser class Proj = identity> 421e78f53d1SNikolas Klauser requires sortable<I, Comp, Proj> 422e78f53d1SNikolas Klauser I ranges::stable_sort(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 423e78f53d1SNikolas Klauser 424e78f53d1SNikolas Klauser template<random_access_range R, class Comp = ranges::less, class Proj = identity> 425e78f53d1SNikolas Klauser requires sortable<iterator_t<R>, Comp, Proj> 426e78f53d1SNikolas Klauser borrowed_iterator_t<R> 427e78f53d1SNikolas Klauser ranges::stable_sort(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 428e78f53d1SNikolas Klauser 429e78f53d1SNikolas Klauser template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 430e78f53d1SNikolas Klauser class Proj = identity> 431e78f53d1SNikolas Klauser requires sortable<I, Comp, Proj> 432e78f53d1SNikolas Klauser constexpr I 433e78f53d1SNikolas Klauser ranges::partial_sort(I first, I middle, S last, Comp comp = {}, Proj proj = {}); // since C++20 434e78f53d1SNikolas Klauser 435e78f53d1SNikolas Klauser template<random_access_range R, class Comp = ranges::less, class Proj = identity> 436e78f53d1SNikolas Klauser requires sortable<iterator_t<R>, Comp, Proj> 437e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 438e78f53d1SNikolas Klauser ranges::partial_sort(R&& r, iterator_t<R> middle, Comp comp = {}, Proj proj = {}); // since C++20 439e78f53d1SNikolas Klauser 440e78f53d1SNikolas Klauser template<class T, output_iterator<const T&> O, sentinel_for<O> S> 441e78f53d1SNikolas Klauser constexpr O ranges::fill(O first, S last, const T& value); // since C++20 442e78f53d1SNikolas Klauser 443e78f53d1SNikolas Klauser template<class T, output_range<const T&> R> 444e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> ranges::fill(R&& r, const T& value); // since C++20 445e78f53d1SNikolas Klauser 446e78f53d1SNikolas Klauser template<class T, output_iterator<const T&> O> 447e78f53d1SNikolas Klauser constexpr O ranges::fill_n(O first, iter_difference_t<O> n, const T& value); // since C++20 448e78f53d1SNikolas Klauser 449e78f53d1SNikolas Klauser template<input_or_output_iterator O, sentinel_for<O> S, copy_constructible F> 450e78f53d1SNikolas Klauser requires invocable<F&> && indirectly_writable<O, invoke_result_t<F&>> 451e78f53d1SNikolas Klauser constexpr O generate(O first, S last, F gen); // since C++20 452e78f53d1SNikolas Klauser 453e78f53d1SNikolas Klauser template<class ExecutionPolicy, class ForwardIterator, class Generator> 454e78f53d1SNikolas Klauser void generate(ExecutionPolicy&& exec, 455e78f53d1SNikolas Klauser ForwardIterator first, ForwardIterator last, 456e78f53d1SNikolas Klauser Generator gen); // since C++17 457e78f53d1SNikolas Klauser 458e78f53d1SNikolas Klauser template<class R, copy_constructible F> 459e78f53d1SNikolas Klauser requires invocable<F&> && output_range<R, invoke_result_t<F&>> 460e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> generate(R&& r, F gen); // since C++20 461e78f53d1SNikolas Klauser 462e78f53d1SNikolas Klauser template<input_or_output_iterator O, copy_constructible F> 463e78f53d1SNikolas Klauser requires invocable<F&> && indirectly_writable<O, invoke_result_t<F&>> 464e78f53d1SNikolas Klauser constexpr O generate_n(O first, iter_difference_t<O> n, F gen); // since C++20 465e78f53d1SNikolas Klauser 466e78f53d1SNikolas Klauser template<class ExecutionPolicy, class ForwardIterator, class Size, class Generator> 467e78f53d1SNikolas Klauser ForwardIterator generate_n(ExecutionPolicy&& exec, 468e78f53d1SNikolas Klauser ForwardIterator first, Size n, Generator gen); // since C++17 469e78f53d1SNikolas Klauser 470e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 471e78f53d1SNikolas Klauser class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 472e78f53d1SNikolas Klauser requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 473e78f53d1SNikolas Klauser constexpr bool ranges::equal(I1 first1, S1 last1, I2 first2, S2 last2, 474e78f53d1SNikolas Klauser Pred pred = {}, 475e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 476e78f53d1SNikolas Klauser 477e78f53d1SNikolas Klauser template<input_range R1, input_range R2, class Pred = ranges::equal_to, 478e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity> 479e78f53d1SNikolas Klauser requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 480e78f53d1SNikolas Klauser constexpr bool ranges::equal(R1&& r1, R2&& r2, Pred pred = {}, 481e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 482e78f53d1SNikolas Klauser 483e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class Proj = identity, 484e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 485e78f53d1SNikolas Klauser constexpr bool ranges::all_of(I first, S last, Pred pred, Proj proj = {}); // since C++20 486e78f53d1SNikolas Klauser 487e78f53d1SNikolas Klauser template<input_range R, class Proj = identity, 488e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 489e78f53d1SNikolas Klauser constexpr bool ranges::all_of(R&& r, Pred pred, Proj proj = {}); // since C++20 490e78f53d1SNikolas Klauser 491e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class Proj = identity, 492e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 493e78f53d1SNikolas Klauser constexpr bool ranges::any_of(I first, S last, Pred pred, Proj proj = {}); // since C++20 494e78f53d1SNikolas Klauser 495e78f53d1SNikolas Klauser template<input_range R, class Proj = identity, 496e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 497e78f53d1SNikolas Klauser constexpr bool ranges::any_of(R&& r, Pred pred, Proj proj = {}); // since C++20 498e78f53d1SNikolas Klauser 499e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 500e78f53d1SNikolas Klauser class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 501e78f53d1SNikolas Klauser requires (forward_iterator<I1> || sized_sentinel_for<S1, I1>) && 502e78f53d1SNikolas Klauser (forward_iterator<I2> || sized_sentinel_for<S2, I2>) && 503e78f53d1SNikolas Klauser indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 504e78f53d1SNikolas Klauser constexpr bool ranges::ends_with(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {}, 505e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++23 506e78f53d1SNikolas Klauser 507e78f53d1SNikolas Klauser template<input_range R1, input_range R2, class Pred = ranges::equal_to, class Proj1 = identity, 508e78f53d1SNikolas Klauser class Proj2 = identity> 509e78f53d1SNikolas Klauser requires (forward_range<R1> || sized_range<R1>) && 510e78f53d1SNikolas Klauser (forward_range<R2> || sized_range<R2>) && 511e78f53d1SNikolas Klauser indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 512e78f53d1SNikolas Klauser constexpr bool ranges::ends_with(R1&& r1, R2&& r2, Pred pred = {}, 513e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++23 514e78f53d1SNikolas Klauser 515e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class Proj = identity, 516e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 517e78f53d1SNikolas Klauser constexpr bool ranges::none_of(I first, S last, Pred pred, Proj proj = {}); // since C++20 518e78f53d1SNikolas Klauser 519e78f53d1SNikolas Klauser template<input_range R, class Proj = identity, 520e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 521e78f53d1SNikolas Klauser constexpr bool ranges::none_of(R&& r, Pred pred, Proj proj = {}); // since C++20 522e78f53d1SNikolas Klauser 523e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 524e78f53d1SNikolas Klauser class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 525e78f53d1SNikolas Klauser requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 526e78f53d1SNikolas Klauser constexpr bool ranges::starts_with(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {}, 527e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++23 528e78f53d1SNikolas Klauser 529e78f53d1SNikolas Klauser template<input_range R1, input_range R2, class Pred = ranges::equal_to, class Proj1 = identity, 530e78f53d1SNikolas Klauser class Proj2 = identity> 531e78f53d1SNikolas Klauser requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 532e78f53d1SNikolas Klauser constexpr bool ranges::starts_with(R1&& r1, R2&& r2, Pred pred = {}, 533e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++23 534e78f53d1SNikolas Klauser 535e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, 536e78f53d1SNikolas Klauser random_access_iterator I2, sentinel_for<I2> S2, 537e78f53d1SNikolas Klauser class Comp = ranges::less, class Proj1 = identity, class Proj2 = identity> 538e78f53d1SNikolas Klauser requires indirectly_copyable<I1, I2> && sortable<I2, Comp, Proj2> && 539e78f53d1SNikolas Klauser indirect_strict_weak_order<Comp, projected<I1, Proj1>, projected<I2, Proj2>> 540e78f53d1SNikolas Klauser constexpr partial_sort_copy_result<I1, I2> 541e78f53d1SNikolas Klauser partial_sort_copy(I1 first, S1 last, I2 result_first, S2 result_last, 542e78f53d1SNikolas Klauser Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 543e78f53d1SNikolas Klauser 544e78f53d1SNikolas Klauser template<input_range R1, random_access_range R2, class Comp = ranges::less, 545e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity> 546e78f53d1SNikolas Klauser requires indirectly_copyable<iterator_t<R1>, iterator_t<R2>> && 547e78f53d1SNikolas Klauser sortable<iterator_t<R2>, Comp, Proj2> && 548e78f53d1SNikolas Klauser indirect_strict_weak_order<Comp, projected<iterator_t<R1>, Proj1>, 549e78f53d1SNikolas Klauser projected<iterator_t<R2>, Proj2>> 550e78f53d1SNikolas Klauser constexpr partial_sort_copy_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>> 551e78f53d1SNikolas Klauser partial_sort_copy(R1&& r, R2&& result_r, Comp comp = {}, 552e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 553e78f53d1SNikolas Klauser 554e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 555e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 556e78f53d1SNikolas Klauser constexpr bool ranges::is_sorted(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 557e78f53d1SNikolas Klauser 558e78f53d1SNikolas Klauser template<forward_range R, class Proj = identity, 559e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 560e78f53d1SNikolas Klauser constexpr bool ranges::is_sorted(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 561e78f53d1SNikolas Klauser 562e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 563e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<I, Proj>> Comp = ranges::less> 564e78f53d1SNikolas Klauser constexpr I ranges::is_sorted_until(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 565e78f53d1SNikolas Klauser 566e78f53d1SNikolas Klauser template<forward_range R, class Proj = identity, 567e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<iterator_t<R>, Proj>> Comp = ranges::less> 568e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 569e78f53d1SNikolas Klauser ranges::is_sorted_until(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 570e78f53d1SNikolas Klauser 571e78f53d1SNikolas Klauser template<random_access_iterator I, sentinel_for<I> S, class Comp = ranges::less, 572e78f53d1SNikolas Klauser class Proj = identity> 573e78f53d1SNikolas Klauser requires sortable<I, Comp, Proj> 574e78f53d1SNikolas Klauser constexpr I 575e78f53d1SNikolas Klauser ranges::nth_element(I first, I nth, S last, Comp comp = {}, Proj proj = {}); // since C++20 576e78f53d1SNikolas Klauser 577e78f53d1SNikolas Klauser template<random_access_range R, class Comp = ranges::less, class Proj = identity> 578e78f53d1SNikolas Klauser requires sortable<iterator_t<R>, Comp, Proj> 579e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 580e78f53d1SNikolas Klauser ranges::nth_element(R&& r, iterator_t<R> nth, Comp comp = {}, Proj proj = {}); // since C++20 581e78f53d1SNikolas Klauser 582e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity, 583e78f53d1SNikolas Klauser indirect_strict_weak_order<const T*, projected<I, Proj>> Comp = ranges::less> // since C++20 584e78f53d1SNikolas Klauser constexpr I upper_bound(I first, S last, const T& value, Comp comp = {}, Proj proj = {}); 585e78f53d1SNikolas Klauser 586e78f53d1SNikolas Klauser template<forward_range R, class T, class Proj = identity, 587e78f53d1SNikolas Klauser indirect_strict_weak_order<const T*, projected<iterator_t<R>, Proj>> Comp = 588e78f53d1SNikolas Klauser ranges::less> 589e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 590e78f53d1SNikolas Klauser upper_bound(R&& r, const T& value, Comp comp = {}, Proj proj = {}); // since C++20 591e78f53d1SNikolas Klauser 592e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity, 593e78f53d1SNikolas Klauser indirect_strict_weak_order<const T*, projected<I, Proj>> Comp = ranges::less> 594e78f53d1SNikolas Klauser constexpr I lower_bound(I first, S last, const T& value, Comp comp = {}, 595e78f53d1SNikolas Klauser Proj proj = {}); // since C++20 596e78f53d1SNikolas Klauser template<forward_range R, class T, class Proj = identity, 597e78f53d1SNikolas Klauser indirect_strict_weak_order<const T*, projected<iterator_t<R>, Proj>> Comp = 598e78f53d1SNikolas Klauser ranges::less> 599e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 600e78f53d1SNikolas Klauser lower_bound(R&& r, const T& value, Comp comp = {}, Proj proj = {}); // since C++20 601e78f53d1SNikolas Klauser 602e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity, 603e78f53d1SNikolas Klauser indirect_strict_weak_order<const T*, projected<I, Proj>> Comp = ranges::less> 604e78f53d1SNikolas Klauser constexpr bool binary_search(I first, S last, const T& value, Comp comp = {}, 605e78f53d1SNikolas Klauser Proj proj = {}); // since C++20 606e78f53d1SNikolas Klauser 607e78f53d1SNikolas Klauser template<forward_range R, class T, class Proj = identity, 608e78f53d1SNikolas Klauser indirect_strict_weak_order<const T*, projected<iterator_t<R>, Proj>> Comp = 609e78f53d1SNikolas Klauser ranges::less> 610e78f53d1SNikolas Klauser constexpr bool binary_search(R&& r, const T& value, Comp comp = {}, 611e78f53d1SNikolas Klauser Proj proj = {}); // since C++20 612e78f53d1SNikolas Klauser 613e78f53d1SNikolas Klauser template<permutable I, sentinel_for<I> S, class Proj = identity, 614e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 615e78f53d1SNikolas Klauser constexpr subrange<I> 616e78f53d1SNikolas Klauser partition(I first, S last, Pred pred, Proj proj = {}); // since C++20 617e78f53d1SNikolas Klauser 618e78f53d1SNikolas Klauser template<forward_range R, class Proj = identity, 619e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 620e78f53d1SNikolas Klauser requires permutable<iterator_t<R>> 621e78f53d1SNikolas Klauser constexpr borrowed_subrange_t<R> 622e78f53d1SNikolas Klauser partition(R&& r, Pred pred, Proj proj = {}); // since C++20 623e78f53d1SNikolas Klauser 624e78f53d1SNikolas Klauser template<bidirectional_iterator I, sentinel_for<I> S, class Proj = identity, 625e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 626e78f53d1SNikolas Klauser requires permutable<I> 627e78f53d1SNikolas Klauser subrange<I> stable_partition(I first, S last, Pred pred, Proj proj = {}); // since C++20 628e78f53d1SNikolas Klauser 629e78f53d1SNikolas Klauser template<bidirectional_range R, class Proj = identity, 630e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 631e78f53d1SNikolas Klauser requires permutable<iterator_t<R>> 632e78f53d1SNikolas Klauser borrowed_subrange_t<R> stable_partition(R&& r, Pred pred, Proj proj = {}); // since C++20 633e78f53d1SNikolas Klauser 634e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, forward_iterator I2, sentinel_for<I2> S2, 635e78f53d1SNikolas Klauser class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 636e78f53d1SNikolas Klauser requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 637e78f53d1SNikolas Klauser constexpr I1 ranges::find_first_of(I1 first1, S1 last1, I2 first2, S2 last2, 638e78f53d1SNikolas Klauser Pred pred = {}, 639e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 640e78f53d1SNikolas Klauser 641e78f53d1SNikolas Klauser template<input_range R1, forward_range R2, 642e78f53d1SNikolas Klauser class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 643e78f53d1SNikolas Klauser requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 644e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R1> 645e78f53d1SNikolas Klauser ranges::find_first_of(R1&& r1, R2&& r2, 646e78f53d1SNikolas Klauser Pred pred = {}, 647e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 648e78f53d1SNikolas Klauser 649e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 650e78f53d1SNikolas Klauser indirect_binary_predicate<projected<I, Proj>, 651e78f53d1SNikolas Klauser projected<I, Proj>> Pred = ranges::equal_to> 652e78f53d1SNikolas Klauser constexpr I ranges::adjacent_find(I first, S last, Pred pred = {}, Proj proj = {}); // since C++20 653e78f53d1SNikolas Klauser 654e78f53d1SNikolas Klauser template<forward_range R, class Proj = identity, 655e78f53d1SNikolas Klauser indirect_binary_predicate<projected<iterator_t<R>, Proj>, 656e78f53d1SNikolas Klauser projected<iterator_t<R>, Proj>> Pred = ranges::equal_to> 657e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> ranges::adjacent_find(R&& r, Pred pred = {}, Proj proj = {}); // since C++20 658e78f53d1SNikolas Klauser 659e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class T1, class T2, class Proj = identity> 660e78f53d1SNikolas Klauser requires indirectly_writable<I, const T2&> && 661e78f53d1SNikolas Klauser indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T1*> 662e78f53d1SNikolas Klauser constexpr I 663e78f53d1SNikolas Klauser ranges::replace(I first, S last, const T1& old_value, const T2& new_value, Proj proj = {}); // since C++20 664e78f53d1SNikolas Klauser 665e78f53d1SNikolas Klauser template<input_range R, class T1, class T2, class Proj = identity> 666e78f53d1SNikolas Klauser requires indirectly_writable<iterator_t<R>, const T2&> && 667e78f53d1SNikolas Klauser indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T1*> 668e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 669e78f53d1SNikolas Klauser ranges::replace(R&& r, const T1& old_value, const T2& new_value, Proj proj = {}); // since C++20 670e78f53d1SNikolas Klauser 671e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class T, class Proj = identity, 672e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 673e78f53d1SNikolas Klauser requires indirectly_writable<I, const T&> 674e78f53d1SNikolas Klauser constexpr I ranges::replace_if(I first, S last, Pred pred, const T& new_value, Proj proj = {}); // since C++20 675e78f53d1SNikolas Klauser 676e78f53d1SNikolas Klauser template<input_range R, class T, class Proj = identity, 677e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 678e78f53d1SNikolas Klauser requires indirectly_writable<iterator_t<R>, const T&> 679e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 680e78f53d1SNikolas Klauser ranges::replace_if(R&& r, Pred pred, const T& new_value, Proj proj = {}); // since C++20 681e78f53d1SNikolas Klauser 682e78f53d1SNikolas Klauser template<class T, class Proj = identity, 683e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<const T*, Proj>> Comp = ranges::less> 684e78f53d1SNikolas Klauser constexpr const T& 685e78f53d1SNikolas Klauser ranges::clamp(const T& v, const T& lo, const T& hi, Comp comp = {}, Proj proj = {}); // since C++20 686e78f53d1SNikolas Klauser 687e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 688e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity, 689e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<I1, Proj1>, 690e78f53d1SNikolas Klauser projected<I2, Proj2>> Comp = ranges::less> 691e78f53d1SNikolas Klauser constexpr bool 692e78f53d1SNikolas Klauser ranges::lexicographical_compare(I1 first1, S1 last1, I2 first2, S2 last2, 693e78f53d1SNikolas Klauser Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 694e78f53d1SNikolas Klauser 695e78f53d1SNikolas Klauser template<input_range R1, input_range R2, class Proj1 = identity, 696e78f53d1SNikolas Klauser class Proj2 = identity, 697e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<iterator_t<R1>, Proj1>, 698e78f53d1SNikolas Klauser projected<iterator_t<R2>, Proj2>> Comp = ranges::less> 699e78f53d1SNikolas Klauser constexpr bool 700e78f53d1SNikolas Klauser ranges::lexicographical_compare(R1&& r1, R2&& r2, Comp comp = {}, 701e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 702e78f53d1SNikolas Klauser 703e78f53d1SNikolas Klauser template<bidirectional_iterator I1, sentinel_for<I1> S1, bidirectional_iterator I2> 704e78f53d1SNikolas Klauser requires indirectly_movable<I1, I2> 705e78f53d1SNikolas Klauser constexpr ranges::move_backward_result<I1, I2> 706e78f53d1SNikolas Klauser ranges::move_backward(I1 first, S1 last, I2 result); // since C++20 707e78f53d1SNikolas Klauser 708e78f53d1SNikolas Klauser template<bidirectional_range R, bidirectional_iterator I> 709e78f53d1SNikolas Klauser requires indirectly_movable<iterator_t<R>, I> 710e78f53d1SNikolas Klauser constexpr ranges::move_backward_result<borrowed_iterator_t<R>, I> 711e78f53d1SNikolas Klauser ranges::move_backward(R&& r, I result); // since C++20 712e78f53d1SNikolas Klauser 713e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, weakly_incrementable O> 714e78f53d1SNikolas Klauser requires indirectly_movable<I, O> 715e78f53d1SNikolas Klauser constexpr ranges::move_result<I, O> 716e78f53d1SNikolas Klauser ranges::move(I first, S last, O result); // since C++20 717e78f53d1SNikolas Klauser 718e78f53d1SNikolas Klauser template<input_range R, weakly_incrementable O> 719e78f53d1SNikolas Klauser requires indirectly_movable<iterator_t<R>, O> 720e78f53d1SNikolas Klauser constexpr ranges::move_result<borrowed_iterator_t<R>, O> 721e78f53d1SNikolas Klauser ranges::move(R&& r, O result); // since C++20 722e78f53d1SNikolas Klauser 723e78f53d1SNikolas Klauser template<class I, class O1, class O2> 724e78f53d1SNikolas Klauser using partition_copy_result = in_out_out_result<I, O1, O2>; // since C++20 725e78f53d1SNikolas Klauser 726e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, 727e78f53d1SNikolas Klauser weakly_incrementable O1, weakly_incrementable O2, 728e78f53d1SNikolas Klauser class Proj = identity, indirect_unary_predicate<projected<I, Proj>> Pred> 729e78f53d1SNikolas Klauser requires indirectly_copyable<I, O1> && indirectly_copyable<I, O2> 730e78f53d1SNikolas Klauser constexpr partition_copy_result<I, O1, O2> 731e78f53d1SNikolas Klauser partition_copy(I first, S last, O1 out_true, O2 out_false, Pred pred, 732e78f53d1SNikolas Klauser Proj proj = {}); // since C++20 733e78f53d1SNikolas Klauser 734e78f53d1SNikolas Klauser template<input_range R, weakly_incrementable O1, weakly_incrementable O2, 735e78f53d1SNikolas Klauser class Proj = identity, 736e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 737e78f53d1SNikolas Klauser requires indirectly_copyable<iterator_t<R>, O1> && 738e78f53d1SNikolas Klauser indirectly_copyable<iterator_t<R>, O2> 739e78f53d1SNikolas Klauser constexpr partition_copy_result<borrowed_iterator_t<R>, O1, O2> 740e78f53d1SNikolas Klauser partition_copy(R&& r, O1 out_true, O2 out_false, Pred pred, Proj proj = {}); // since C++20 741e78f53d1SNikolas Klauser 742e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class Proj = identity, 743e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 744e78f53d1SNikolas Klauser constexpr I partition_point(I first, S last, Pred pred, Proj proj = {}); // since C++20 745e78f53d1SNikolas Klauser 746e78f53d1SNikolas Klauser template<forward_range R, class Proj = identity, 747e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 748e78f53d1SNikolas Klauser constexpr borrowed_iterator_t<R> 749e78f53d1SNikolas Klauser partition_point(R&& r, Pred pred, Proj proj = {}); // since C++20 750e78f53d1SNikolas Klauser 751e78f53d1SNikolas Klauser template<class I1, class I2, class O> 752e78f53d1SNikolas Klauser using merge_result = in_in_out_result<I1, I2, O>; // since C++20 753e78f53d1SNikolas Klauser 754e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 755e78f53d1SNikolas Klauser weakly_incrementable O, class Comp = ranges::less, class Proj1 = identity, 756e78f53d1SNikolas Klauser class Proj2 = identity> 757e78f53d1SNikolas Klauser requires mergeable<I1, I2, O, Comp, Proj1, Proj2> 758e78f53d1SNikolas Klauser constexpr merge_result<I1, I2, O> 759e78f53d1SNikolas Klauser merge(I1 first1, S1 last1, I2 first2, S2 last2, O result, 760e78f53d1SNikolas Klauser Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 761e78f53d1SNikolas Klauser 762e78f53d1SNikolas Klauser template<input_range R1, input_range R2, weakly_incrementable O, class Comp = ranges::less, 763e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity> 764e78f53d1SNikolas Klauser requires mergeable<iterator_t<R1>, iterator_t<R2>, O, Comp, Proj1, Proj2> 765e78f53d1SNikolas Klauser constexpr merge_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>, O> 766e78f53d1SNikolas Klauser merge(R1&& r1, R2&& r2, O result, 767e78f53d1SNikolas Klauser Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 768e78f53d1SNikolas Klauser 769e78f53d1SNikolas Klauser template<permutable I, sentinel_for<I> S, class T, class Proj = identity> 770e78f53d1SNikolas Klauser requires indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 771e78f53d1SNikolas Klauser constexpr subrange<I> ranges::remove(I first, S last, const T& value, Proj proj = {}); // since C++20 772e78f53d1SNikolas Klauser 773e78f53d1SNikolas Klauser template<forward_range R, class T, class Proj = identity> 774e78f53d1SNikolas Klauser requires permutable<iterator_t<R>> && 775e78f53d1SNikolas Klauser indirect_binary_predicate<ranges::equal_to, projected<iterator_t<R>, Proj>, const T*> 776e78f53d1SNikolas Klauser constexpr borrowed_subrange_t<R> 777e78f53d1SNikolas Klauser ranges::remove(R&& r, const T& value, Proj proj = {}); // since C++20 778e78f53d1SNikolas Klauser 779e78f53d1SNikolas Klauser template<permutable I, sentinel_for<I> S, class Proj = identity, 780e78f53d1SNikolas Klauser indirect_unary_predicate<projected<I, Proj>> Pred> 781e78f53d1SNikolas Klauser constexpr subrange<I> ranges::remove_if(I first, S last, Pred pred, Proj proj = {}); // since C++20 782e78f53d1SNikolas Klauser 783e78f53d1SNikolas Klauser template<forward_range R, class Proj = identity, 784e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 785e78f53d1SNikolas Klauser requires permutable<iterator_t<R>> 786e78f53d1SNikolas Klauser constexpr borrowed_subrange_t<R> 787e78f53d1SNikolas Klauser ranges::remove_if(R&& r, Pred pred, Proj proj = {}); // since C++20 788e78f53d1SNikolas Klauser 789e78f53d1SNikolas Klauser template<class I, class O> 790e78f53d1SNikolas Klauser using set_difference_result = in_out_result<I, O>; // since C++20 791e78f53d1SNikolas Klauser 792e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 793e78f53d1SNikolas Klauser weakly_incrementable O, class Comp = ranges::less, 794e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity> 795e78f53d1SNikolas Klauser requires mergeable<I1, I2, O, Comp, Proj1, Proj2> 796e78f53d1SNikolas Klauser constexpr set_difference_result<I1, O> 797e78f53d1SNikolas Klauser set_difference(I1 first1, S1 last1, I2 first2, S2 last2, O result, 798e78f53d1SNikolas Klauser Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 799e78f53d1SNikolas Klauser 800e78f53d1SNikolas Klauser template<input_range R1, input_range R2, weakly_incrementable O, 801e78f53d1SNikolas Klauser class Comp = ranges::less, class Proj1 = identity, class Proj2 = identity> 802e78f53d1SNikolas Klauser requires mergeable<iterator_t<R1>, iterator_t<R2>, O, Comp, Proj1, Proj2> 803e78f53d1SNikolas Klauser constexpr set_difference_result<borrowed_iterator_t<R1>, O> 804e78f53d1SNikolas Klauser set_difference(R1&& r1, R2&& r2, O result, 805e78f53d1SNikolas Klauser Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 806e78f53d1SNikolas Klauser 807e78f53d1SNikolas Klauser template<class I1, class I2, class O> 808e78f53d1SNikolas Klauser using set_intersection_result = in_in_out_result<I1, I2, O>; // since C++20 809e78f53d1SNikolas Klauser 810e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 811e78f53d1SNikolas Klauser weakly_incrementable O, class Comp = ranges::less, 812e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity> 813e78f53d1SNikolas Klauser requires mergeable<I1, I2, O, Comp, Proj1, Proj2> 814e78f53d1SNikolas Klauser constexpr set_intersection_result<I1, I2, O> 815e78f53d1SNikolas Klauser set_intersection(I1 first1, S1 last1, I2 first2, S2 last2, O result, 816e78f53d1SNikolas Klauser Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 817e78f53d1SNikolas Klauser 818e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 819e78f53d1SNikolas Klauser weakly_incrementable O, class Comp = ranges::less, 820e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity> 821e78f53d1SNikolas Klauser requires mergeable<I1, I2, O, Comp, Proj1, Proj2> 822e78f53d1SNikolas Klauser constexpr set_intersection_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>, O> 823e78f53d1SNikolas Klauser set_intersection(R1&& r1, R2&& r2, O result, 824e78f53d1SNikolas Klauser Comp comp = {}, Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 825e78f53d1SNikolas Klauser 826e78f53d1SNikolas Klauser template <class _InIter, class _OutIter> 827e78f53d1SNikolas Klauser using reverse_copy_result = in_out_result<_InIter, _OutIter>; // since C++20 828e78f53d1SNikolas Klauser 829e78f53d1SNikolas Klauser template<bidirectional_iterator I, sentinel_for<I> S, weakly_incrementable O> 830e78f53d1SNikolas Klauser requires indirectly_copyable<I, O> 831e78f53d1SNikolas Klauser constexpr ranges::reverse_copy_result<I, O> 832e78f53d1SNikolas Klauser ranges::reverse_copy(I first, S last, O result); // since C++20 833e78f53d1SNikolas Klauser 834e78f53d1SNikolas Klauser template<bidirectional_range R, weakly_incrementable O> 835e78f53d1SNikolas Klauser requires indirectly_copyable<iterator_t<R>, O> 836e78f53d1SNikolas Klauser constexpr ranges::reverse_copy_result<borrowed_iterator_t<R>, O> 837e78f53d1SNikolas Klauser ranges::reverse_copy(R&& r, O result); // since C++20 838e78f53d1SNikolas Klauser 839e78f53d1SNikolas Klauser template<permutable I, sentinel_for<I> S> 840e78f53d1SNikolas Klauser constexpr subrange<I> rotate(I first, I middle, S last); // since C++20 841e78f53d1SNikolas Klauser 842e78f53d1SNikolas Klauser template<forward_range R> 843e78f53d1SNikolas Klauser requires permutable<iterator_t<R>> 844e78f53d1SNikolas Klauser constexpr borrowed_subrange_t<R> rotate(R&& r, iterator_t<R> middle); // since C++20 845e78f53d1SNikolas Klauser 846e78f53d1SNikolas Klauser template <class _InIter, class _OutIter> 847e78f53d1SNikolas Klauser using rotate_copy_result = in_out_result<_InIter, _OutIter>; // since C++20 848e78f53d1SNikolas Klauser 849e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, weakly_incrementable O> 850e78f53d1SNikolas Klauser requires indirectly_copyable<I, O> 851e78f53d1SNikolas Klauser constexpr ranges::rotate_copy_result<I, O> 852e78f53d1SNikolas Klauser ranges::rotate_copy(I first, I middle, S last, O result); // since C++20 853e78f53d1SNikolas Klauser 854e78f53d1SNikolas Klauser template<forward_range R, weakly_incrementable O> 855e78f53d1SNikolas Klauser requires indirectly_copyable<iterator_t<R>, O> 856e78f53d1SNikolas Klauser constexpr ranges::rotate_copy_result<borrowed_iterator_t<R>, O> 857e78f53d1SNikolas Klauser ranges::rotate_copy(R&& r, iterator_t<R> middle, O result); // since C++20 858e78f53d1SNikolas Klauser 859e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Gen> 860e78f53d1SNikolas Klauser requires (forward_iterator<I> || random_access_iterator<O>) && 861e78f53d1SNikolas Klauser indirectly_copyable<I, O> && 862e78f53d1SNikolas Klauser uniform_random_bit_generator<remove_reference_t<Gen>> 863e78f53d1SNikolas Klauser O sample(I first, S last, O out, iter_difference_t<I> n, Gen&& g); // since C++20 864e78f53d1SNikolas Klauser 865e78f53d1SNikolas Klauser template<input_range R, weakly_incrementable O, class Gen> 866e78f53d1SNikolas Klauser requires (forward_range<R> || random_access_iterator<O>) && 867e78f53d1SNikolas Klauser indirectly_copyable<iterator_t<R>, O> && 868e78f53d1SNikolas Klauser uniform_random_bit_generator<remove_reference_t<Gen>> 869e78f53d1SNikolas Klauser O sample(R&& r, O out, range_difference_t<R> n, Gen&& g); // since C++20 870e78f53d1SNikolas Klauser 871e78f53d1SNikolas Klauser template<random_access_iterator I, sentinel_for<I> S, class Gen> 872e78f53d1SNikolas Klauser requires permutable<I> && 873e78f53d1SNikolas Klauser uniform_random_bit_generator<remove_reference_t<Gen>> 874e78f53d1SNikolas Klauser I shuffle(I first, S last, Gen&& g); // since C++20 875e78f53d1SNikolas Klauser 876e78f53d1SNikolas Klauser template<random_access_range R, class Gen> 877e78f53d1SNikolas Klauser requires permutable<iterator_t<R>> && 878e78f53d1SNikolas Klauser uniform_random_bit_generator<remove_reference_t<Gen>> 879e78f53d1SNikolas Klauser borrowed_iterator_t<R> shuffle(R&& r, Gen&& g); // since C++20 880e78f53d1SNikolas Klauser 881e78f53d1SNikolas Klauser template<forward_iterator I1, sentinel_for<I1> S1, forward_iterator I2, 882e78f53d1SNikolas Klauser sentinel_for<I2> S2, class Proj1 = identity, class Proj2 = identity, 883e78f53d1SNikolas Klauser indirect_equivalence_relation<projected<I1, Proj1>, 884e78f53d1SNikolas Klauser projected<I2, Proj2>> Pred = ranges::equal_to> 885e78f53d1SNikolas Klauser constexpr bool ranges::is_permutation(I1 first1, S1 last1, I2 first2, S2 last2, 886e78f53d1SNikolas Klauser Pred pred = {}, 887e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 888e78f53d1SNikolas Klauser 889e78f53d1SNikolas Klauser template<forward_range R1, forward_range R2, 890e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity, 891e78f53d1SNikolas Klauser indirect_equivalence_relation<projected<iterator_t<R1>, Proj1>, 892e78f53d1SNikolas Klauser projected<iterator_t<R2>, Proj2>> Pred = ranges::equal_to> 893e78f53d1SNikolas Klauser constexpr bool ranges::is_permutation(R1&& r1, R2&& r2, Pred pred = {}, 894e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 895e78f53d1SNikolas Klauser 896e78f53d1SNikolas Klauser template<forward_iterator I1, sentinel_for<I1> S1, forward_iterator I2, 897e78f53d1SNikolas Klauser sentinel_for<I2> S2, class Pred = ranges::equal_to, 898e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity> 899e78f53d1SNikolas Klauser requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 900e78f53d1SNikolas Klauser constexpr subrange<I1> 901e78f53d1SNikolas Klauser ranges::search(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {}, 902e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 903e78f53d1SNikolas Klauser 904e78f53d1SNikolas Klauser template<forward_range R1, forward_range R2, class Pred = ranges::equal_to, 905e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity> 906e78f53d1SNikolas Klauser requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 907e78f53d1SNikolas Klauser constexpr borrowed_subrange_t<R1> 908e78f53d1SNikolas Klauser ranges::search(R1&& r1, R2&& r2, Pred pred = {}, 909e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 910e78f53d1SNikolas Klauser 911e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class T, 912e78f53d1SNikolas Klauser class Pred = ranges::equal_to, class Proj = identity> 913e78f53d1SNikolas Klauser requires indirectly_comparable<I, const T*, Pred, Proj> 914e78f53d1SNikolas Klauser constexpr subrange<I> 915e78f53d1SNikolas Klauser ranges::search_n(I first, S last, iter_difference_t<I> count, 916e78f53d1SNikolas Klauser const T& value, Pred pred = {}, Proj proj = {}); // since C++20 917e78f53d1SNikolas Klauser 918e78f53d1SNikolas Klauser template<forward_range R, class T, class Pred = ranges::equal_to, 919e78f53d1SNikolas Klauser class Proj = identity> 920e78f53d1SNikolas Klauser requires indirectly_comparable<iterator_t<R>, const T*, Pred, Proj> 921e78f53d1SNikolas Klauser constexpr borrowed_subrange_t<R> 922e78f53d1SNikolas Klauser ranges::search_n(R&& r, range_difference_t<R> count, 923e78f53d1SNikolas Klauser const T& value, Pred pred = {}, Proj proj = {}); // since C++20 924e78f53d1SNikolas Klauser 925e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class T, 926e78f53d1SNikolas Klauser indirectly-binary-left-foldable<T, I> F> 927e78f53d1SNikolas Klauser constexpr auto ranges::fold_left(I first, S last, T init, F f); // since C++23 928e78f53d1SNikolas Klauser 929e78f53d1SNikolas Klauser template<input_range R, class T, indirectly-binary-left-foldable<T, iterator_t<R>> F> 930e78f53d1SNikolas Klauser constexpr auto fold_left(R&& r, T init, F f); // since C++23 931e78f53d1SNikolas Klauser 932e78f53d1SNikolas Klauser template<class I, class T> 933e78f53d1SNikolas Klauser using fold_left_with_iter_result = in_value_result<I, T>; // since C++23 934e78f53d1SNikolas Klauser 935e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class T, 936e78f53d1SNikolas Klauser indirectly-binary-left-foldable<T, I> F> 937e78f53d1SNikolas Klauser constexpr see below fold_left_with_iter(I first, S last, T init, F f); // since C++23 938e78f53d1SNikolas Klauser 939e78f53d1SNikolas Klauser template<input_range R, class T, indirectly-binary-left-foldable<T, iterator_t<R>> F> 940e78f53d1SNikolas Klauser constexpr see below fold_left_with_iter(R&& r, T init, F f); // since C++23 941e78f53d1SNikolas Klauser 942e78f53d1SNikolas Klauser template<forward_iterator I1, sentinel_for<I1> S1, forward_iterator I2, sentinel_for<I2> S2, 943e78f53d1SNikolas Klauser class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 944e78f53d1SNikolas Klauser requires indirectly_comparable<I1, I2, Pred, Proj1, Proj2> 945e78f53d1SNikolas Klauser constexpr subrange<I1> 946e78f53d1SNikolas Klauser ranges::find_end(I1 first1, S1 last1, I2 first2, S2 last2, Pred pred = {}, 947e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 948e78f53d1SNikolas Klauser 949e78f53d1SNikolas Klauser template<forward_range R1, forward_range R2, 950e78f53d1SNikolas Klauser class Pred = ranges::equal_to, class Proj1 = identity, class Proj2 = identity> 951e78f53d1SNikolas Klauser requires indirectly_comparable<iterator_t<R1>, iterator_t<R2>, Pred, Proj1, Proj2> 952e78f53d1SNikolas Klauser constexpr borrowed_subrange_t<R1> 953e78f53d1SNikolas Klauser ranges::find_end(R1&& r1, R2&& r2, Pred pred = {}, 954e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 955e78f53d1SNikolas Klauser 956e78f53d1SNikolas Klauser template<class I1, class I2, class O> 957e78f53d1SNikolas Klauser using set_symmetric_difference_result = in_in_out_result<I1, I2, O>; // since C++20 958e78f53d1SNikolas Klauser 959e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 960e78f53d1SNikolas Klauser weakly_incrementable O, class Comp = ranges::less, 961e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity> 962e78f53d1SNikolas Klauser requires mergeable<I1, I2, O, Comp, Proj1, Proj2> 963e78f53d1SNikolas Klauser constexpr set_symmetric_difference_result<I1, I2, O> 964e78f53d1SNikolas Klauser set_symmetric_difference(I1 first1, S1 last1, I2 first2, S2 last2, O result, 965e78f53d1SNikolas Klauser Comp comp = {}, Proj1 proj1 = {}, 966e78f53d1SNikolas Klauser Proj2 proj2 = {}); // since C++20 967e78f53d1SNikolas Klauser 968e78f53d1SNikolas Klauser template<input_range R1, input_range R2, weakly_incrementable O, 969e78f53d1SNikolas Klauser class Comp = ranges::less, class Proj1 = identity, class Proj2 = identity> 970e78f53d1SNikolas Klauser requires mergeable<iterator_t<R1>, iterator_t<R2>, O, Comp, Proj1, Proj2> 971e78f53d1SNikolas Klauser constexpr set_symmetric_difference_result<borrowed_iterator_t<R1>, 972e78f53d1SNikolas Klauser borrowed_iterator_t<R2>, O> 973e78f53d1SNikolas Klauser set_symmetric_difference(R1&& r1, R2&& r2, O result, Comp comp = {}, 974e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 975e78f53d1SNikolas Klauser 976e78f53d1SNikolas Klauser template<forward_iterator I, sentinel_for<I> S, class T, class Proj = identity, 977e78f53d1SNikolas Klauser indirect_strict_weak_order<const T*, projected<I, Proj>> Comp = ranges::less> 978e78f53d1SNikolas Klauser constexpr subrange<I> 979e78f53d1SNikolas Klauser equal_range(I first, S last, const T& value, Comp comp = {}, Proj proj = {}); // since C++20 980e78f53d1SNikolas Klauser 981e78f53d1SNikolas Klauser template<forward_range R, class T, class Proj = identity, 982e78f53d1SNikolas Klauser indirect_strict_weak_order<const T*, projected<iterator_t<R>, Proj>> Comp = 983e78f53d1SNikolas Klauser ranges::less> 984e78f53d1SNikolas Klauser constexpr borrowed_subrange_t<R> 985e78f53d1SNikolas Klauser equal_range(R&& r, const T& value, Comp comp = {}, Proj proj = {}); // since C++20 986e78f53d1SNikolas Klauser 987e78f53d1SNikolas Klauser template<class I1, class I2, class O> 988e78f53d1SNikolas Klauser using set_union_result = in_in_out_result<I1, I2, O>; // since C++20 989e78f53d1SNikolas Klauser 990e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 991e78f53d1SNikolas Klauser weakly_incrementable O, class Comp = ranges::less, 992e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity> 993e78f53d1SNikolas Klauser requires mergeable<I1, I2, O, Comp, Proj1, Proj2> 994e78f53d1SNikolas Klauser constexpr set_union_result<I1, I2, O> 995e78f53d1SNikolas Klauser set_union(I1 first1, S1 last1, I2 first2, S2 last2, O result, Comp comp = {}, 996e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 997e78f53d1SNikolas Klauser 998e78f53d1SNikolas Klauser template<input_range R1, input_range R2, weakly_incrementable O, 999e78f53d1SNikolas Klauser class Comp = ranges::less, class Proj1 = identity, class Proj2 = identity> 1000e78f53d1SNikolas Klauser requires mergeable<iterator_t<R1>, iterator_t<R2>, O, Comp, Proj1, Proj2> 1001e78f53d1SNikolas Klauser constexpr set_union_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>, O> 1002e78f53d1SNikolas Klauser set_union(R1&& r1, R2&& r2, O result, Comp comp = {}, 1003e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 1004e78f53d1SNikolas Klauser 1005e78f53d1SNikolas Klauser template<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2, 1006e78f53d1SNikolas Klauser class Proj1 = identity, class Proj2 = identity, 1007e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<I1, Proj1>, projected<I2, Proj2>> Comp = 1008e78f53d1SNikolas Klauser ranges::less> 1009e78f53d1SNikolas Klauser constexpr bool includes(I1 first1, S1 last1, I2 first2, S2 last2, Comp comp = {}, 1010e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 1011e78f53d1SNikolas Klauser 1012e78f53d1SNikolas Klauser template<input_range R1, input_range R2, class Proj1 = identity, 1013e78f53d1SNikolas Klauser class Proj2 = identity, 1014e78f53d1SNikolas Klauser indirect_strict_weak_order<projected<iterator_t<R1>, Proj1>, 1015e78f53d1SNikolas Klauser projected<iterator_t<R2>, Proj2>> Comp = ranges::less> 1016e78f53d1SNikolas Klauser constexpr bool includes(R1&& r1, R2&& r2, Comp comp = {}, 1017e78f53d1SNikolas Klauser Proj1 proj1 = {}, Proj2 proj2 = {}); // since C++20 1018e78f53d1SNikolas Klauser 1019e78f53d1SNikolas Klauser template<bidirectional_iterator I, sentinel_for<I> S, class Comp = ranges::less, 1020e78f53d1SNikolas Klauser class Proj = identity> 1021e78f53d1SNikolas Klauser requires sortable<I, Comp, Proj> 1022e78f53d1SNikolas Klauser I inplace_merge(I first, I middle, S last, Comp comp = {}, Proj proj = {}); // since C++20 1023e78f53d1SNikolas Klauser 1024e78f53d1SNikolas Klauser template<bidirectional_range R, class Comp = ranges::less, class Proj = identity> 1025e78f53d1SNikolas Klauser requires sortable<iterator_t<R>, Comp, Proj> 1026e78f53d1SNikolas Klauser borrowed_iterator_t<R> 1027e78f53d1SNikolas Klauser inplace_merge(R&& r, iterator_t<R> middle, Comp comp = {}, 1028e78f53d1SNikolas Klauser Proj proj = {}); // since C++20 1029e78f53d1SNikolas Klauser 1030e78f53d1SNikolas Klauser template<permutable I, sentinel_for<I> S, class Proj = identity, 1031e78f53d1SNikolas Klauser indirect_equivalence_relation<projected<I, Proj>> C = ranges::equal_to> 1032e78f53d1SNikolas Klauser constexpr subrange<I> unique(I first, S last, C comp = {}, Proj proj = {}); // since C++20 1033e78f53d1SNikolas Klauser 1034e78f53d1SNikolas Klauser template<forward_range R, class Proj = identity, 1035e78f53d1SNikolas Klauser indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to> 1036e78f53d1SNikolas Klauser requires permutable<iterator_t<R>> 1037e78f53d1SNikolas Klauser constexpr borrowed_subrange_t<R> 1038e78f53d1SNikolas Klauser unique(R&& r, C comp = {}, Proj proj = {}); // since C++20 1039e78f53d1SNikolas Klauser 1040e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class Proj = identity, 1041e78f53d1SNikolas Klauser indirect_equivalence_relation<projected<I, Proj>> C = ranges::equal_to> 1042e78f53d1SNikolas Klauser requires indirectly_copyable<I, O> && 1043e78f53d1SNikolas Klauser (forward_iterator<I> || 1044e78f53d1SNikolas Klauser (input_iterator<O> && same_as<iter_value_t<I>, iter_value_t<O>>) || 1045e78f53d1SNikolas Klauser indirectly_copyable_storable<I, O>) 1046e78f53d1SNikolas Klauser constexpr unique_copy_result<I, O> 1047e78f53d1SNikolas Klauser unique_copy(I first, S last, O result, C comp = {}, Proj proj = {}); // since C++20 1048e78f53d1SNikolas Klauser 1049e78f53d1SNikolas Klauser template<input_range R, weakly_incrementable O, class Proj = identity, 1050e78f53d1SNikolas Klauser indirect_equivalence_relation<projected<iterator_t<R>, Proj>> C = ranges::equal_to> 1051e78f53d1SNikolas Klauser requires indirectly_copyable<iterator_t<R>, O> && 1052e78f53d1SNikolas Klauser (forward_iterator<iterator_t<R>> || 1053e78f53d1SNikolas Klauser (input_iterator<O> && same_as<range_value_t<R>, iter_value_t<O>>) || 1054e78f53d1SNikolas Klauser indirectly_copyable_storable<iterator_t<R>, O>) 1055e78f53d1SNikolas Klauser constexpr unique_copy_result<borrowed_iterator_t<R>, O> 1056e78f53d1SNikolas Klauser unique_copy(R&& r, O result, C comp = {}, Proj proj = {}); // since C++20 1057e78f53d1SNikolas Klauser 1058e78f53d1SNikolas Klauser template<class I, class O> 1059e78f53d1SNikolas Klauser using remove_copy_result = in_out_result<I, O>; // since C++20 1060e78f53d1SNikolas Klauser 1061e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, class T, 1062e78f53d1SNikolas Klauser class Proj = identity> 1063e78f53d1SNikolas Klauser indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T*> 1064e78f53d1SNikolas Klauser constexpr remove_copy_result<I, O> 1065e78f53d1SNikolas Klauser remove_copy(I first, S last, O result, const T& value, Proj proj = {}); // since C++20 1066e78f53d1SNikolas Klauser 1067e78f53d1SNikolas Klauser template<input_range R, weakly_incrementable O, class T, class Proj = identity> 1068e78f53d1SNikolas Klauser requires indirectly_copyable<iterator_t<R>, O> && 1069e78f53d1SNikolas Klauser indirect_binary_predicate<ranges::equal_to, 1070e78f53d1SNikolas Klauser projected<iterator_t<R>, Proj>, const T*> 1071e78f53d1SNikolas Klauser constexpr remove_copy_result<borrowed_iterator_t<R>, O> 1072e78f53d1SNikolas Klauser remove_copy(R&& r, O result, const T& value, Proj proj = {}); // since C++20 1073e78f53d1SNikolas Klauser 1074e78f53d1SNikolas Klauser template<class I, class O> 1075e78f53d1SNikolas Klauser using remove_copy_if_result = in_out_result<I, O>; // since C++20 1076e78f53d1SNikolas Klauser 1077e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, weakly_incrementable O, 1078e78f53d1SNikolas Klauser class Proj = identity, indirect_unary_predicate<projected<I, Proj>> Pred> 1079e78f53d1SNikolas Klauser requires indirectly_copyable<I, O> 1080e78f53d1SNikolas Klauser constexpr remove_copy_if_result<I, O> 1081e78f53d1SNikolas Klauser remove_copy_if(I first, S last, O result, Pred pred, Proj proj = {}); // since C++20 1082e78f53d1SNikolas Klauser 1083e78f53d1SNikolas Klauser template<input_range R, weakly_incrementable O, class Proj = identity, 1084e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 1085e78f53d1SNikolas Klauser requires indirectly_copyable<iterator_t<R>, O> 1086e78f53d1SNikolas Klauser constexpr remove_copy_if_result<borrowed_iterator_t<R>, O> 1087e78f53d1SNikolas Klauser remove_copy_if(R&& r, O result, Pred pred, Proj proj = {}); // since C++20 1088e78f53d1SNikolas Klauser 1089e78f53d1SNikolas Klauser template<class I, class O> 1090e78f53d1SNikolas Klauser using replace_copy_result = in_out_result<I, O>; // since C++20 1091e78f53d1SNikolas Klauser 1092e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class T1, class T2, 1093e78f53d1SNikolas Klauser output_iterator<const T2&> O, class Proj = identity> 1094e78f53d1SNikolas Klauser requires indirectly_copyable<I, O> && 1095e78f53d1SNikolas Klauser indirect_binary_predicate<ranges::equal_to, projected<I, Proj>, const T1*> 1096e78f53d1SNikolas Klauser constexpr replace_copy_result<I, O> 1097e78f53d1SNikolas Klauser replace_copy(I first, S last, O result, const T1& old_value, const T2& new_value, 1098e78f53d1SNikolas Klauser Proj proj = {}); // since C++20 1099e78f53d1SNikolas Klauser 1100e78f53d1SNikolas Klauser template<input_range R, class T1, class T2, output_iterator<const T2&> O, 1101e78f53d1SNikolas Klauser class Proj = identity> 1102e78f53d1SNikolas Klauser requires indirectly_copyable<iterator_t<R>, O> && 1103e78f53d1SNikolas Klauser indirect_binary_predicate<ranges::equal_to, 1104e78f53d1SNikolas Klauser projected<iterator_t<R>, Proj>, const T1*> 1105e78f53d1SNikolas Klauser constexpr replace_copy_result<borrowed_iterator_t<R>, O> 1106e78f53d1SNikolas Klauser replace_copy(R&& r, O result, const T1& old_value, const T2& new_value, 1107e78f53d1SNikolas Klauser Proj proj = {}); // since C++20 1108e78f53d1SNikolas Klauser 1109e78f53d1SNikolas Klauser template<class I, class O> 1110e78f53d1SNikolas Klauser using replace_copy_if_result = in_out_result<I, O>; // since C++20 1111e78f53d1SNikolas Klauser 1112e78f53d1SNikolas Klauser template<input_iterator I, sentinel_for<I> S, class T, output_iterator<const T&> O, 1113e78f53d1SNikolas Klauser class Proj = identity, indirect_unary_predicate<projected<I, Proj>> Pred> 1114e78f53d1SNikolas Klauser requires indirectly_copyable<I, O> 1115e78f53d1SNikolas Klauser constexpr replace_copy_if_result<I, O> 1116e78f53d1SNikolas Klauser replace_copy_if(I first, S last, O result, Pred pred, const T& new_value, 1117e78f53d1SNikolas Klauser Proj proj = {}); // since C++20 1118e78f53d1SNikolas Klauser 1119e78f53d1SNikolas Klauser template<input_range R, class T, output_iterator<const T&> O, class Proj = identity, 1120e78f53d1SNikolas Klauser indirect_unary_predicate<projected<iterator_t<R>, Proj>> Pred> 1121e78f53d1SNikolas Klauser requires indirectly_copyable<iterator_t<R>, O> 1122e78f53d1SNikolas Klauser constexpr replace_copy_if_result<borrowed_iterator_t<R>, O> 1123e78f53d1SNikolas Klauser replace_copy_if(R&& r, O result, Pred pred, const T& new_value, 1124e78f53d1SNikolas Klauser Proj proj = {}); // since C++20 1125e78f53d1SNikolas Klauser 1126e78f53d1SNikolas Klauser template<class I> 1127e78f53d1SNikolas Klauser using prev_permutation_result = in_found_result<I>; // since C++20 1128e78f53d1SNikolas Klauser 1129e78f53d1SNikolas Klauser template<bidirectional_iterator I, sentinel_for<I> S, class Comp = ranges::less, 1130e78f53d1SNikolas Klauser class Proj = identity> 1131e78f53d1SNikolas Klauser requires sortable<I, Comp, Proj> 1132e78f53d1SNikolas Klauser constexpr ranges::prev_permutation_result<I> 1133e78f53d1SNikolas Klauser ranges::prev_permutation(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 1134e78f53d1SNikolas Klauser 1135e78f53d1SNikolas Klauser template<bidirectional_range R, class Comp = ranges::less, 1136e78f53d1SNikolas Klauser class Proj = identity> 1137e78f53d1SNikolas Klauser requires sortable<iterator_t<R>, Comp, Proj> 1138e78f53d1SNikolas Klauser constexpr ranges::prev_permutation_result<borrowed_iterator_t<R>> 1139e78f53d1SNikolas Klauser ranges::prev_permutation(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 1140e78f53d1SNikolas Klauser 1141e78f53d1SNikolas Klauser template<class I> 1142e78f53d1SNikolas Klauser using next_permutation_result = in_found_result<I>; // since C++20 1143e78f53d1SNikolas Klauser 1144e78f53d1SNikolas Klauser template<bidirectional_iterator I, sentinel_for<I> S, class Comp = ranges::less, 1145e78f53d1SNikolas Klauser class Proj = identity> 1146e78f53d1SNikolas Klauser requires sortable<I, Comp, Proj> 1147e78f53d1SNikolas Klauser constexpr ranges::next_permutation_result<I> 1148e78f53d1SNikolas Klauser ranges::next_permutation(I first, S last, Comp comp = {}, Proj proj = {}); // since C++20 1149e78f53d1SNikolas Klauser 1150e78f53d1SNikolas Klauser template<bidirectional_range R, class Comp = ranges::less, 1151e78f53d1SNikolas Klauser class Proj = identity> 1152e78f53d1SNikolas Klauser requires sortable<iterator_t<R>, Comp, Proj> 1153e78f53d1SNikolas Klauser constexpr ranges::next_permutation_result<borrowed_iterator_t<R>> 1154e78f53d1SNikolas Klauser ranges::next_permutation(R&& r, Comp comp = {}, Proj proj = {}); // since C++20 1155e78f53d1SNikolas Klauser 1156e78f53d1SNikolas Klauser} 1157e78f53d1SNikolas Klauser 1158e78f53d1SNikolas Klausertemplate <class InputIterator, class Predicate> 1159e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1160e78f53d1SNikolas Klauser all_of(InputIterator first, InputIterator last, Predicate pred); 1161e78f53d1SNikolas Klauser 1162e78f53d1SNikolas Klausertemplate <class InputIterator, class Predicate> 1163e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1164e78f53d1SNikolas Klauser any_of(InputIterator first, InputIterator last, Predicate pred); 1165e78f53d1SNikolas Klauser 1166e78f53d1SNikolas Klausertemplate <class InputIterator, class Predicate> 1167e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1168e78f53d1SNikolas Klauser none_of(InputIterator first, InputIterator last, Predicate pred); 1169e78f53d1SNikolas Klauser 1170e78f53d1SNikolas Klausertemplate <class InputIterator, class Function> 1171e78f53d1SNikolas Klauser constexpr Function // constexpr in C++20 1172e78f53d1SNikolas Klauser for_each(InputIterator first, InputIterator last, Function f); 1173e78f53d1SNikolas Klauser 1174e78f53d1SNikolas Klausertemplate<class InputIterator, class Size, class Function> 1175e78f53d1SNikolas Klauser constexpr InputIterator // constexpr in C++20 1176e78f53d1SNikolas Klauser for_each_n(InputIterator first, Size n, Function f); // C++17 1177e78f53d1SNikolas Klauser 1178e78f53d1SNikolas Klausertemplate <class InputIterator, class T> 1179e78f53d1SNikolas Klauser constexpr InputIterator // constexpr in C++20 1180e78f53d1SNikolas Klauser find(InputIterator first, InputIterator last, const T& value); 1181e78f53d1SNikolas Klauser 1182e78f53d1SNikolas Klausertemplate <class InputIterator, class Predicate> 1183e78f53d1SNikolas Klauser constexpr InputIterator // constexpr in C++20 1184e78f53d1SNikolas Klauser find_if(InputIterator first, InputIterator last, Predicate pred); 1185e78f53d1SNikolas Klauser 1186e78f53d1SNikolas Klausertemplate<class InputIterator, class Predicate> 1187e78f53d1SNikolas Klauser constexpr InputIterator // constexpr in C++20 1188e78f53d1SNikolas Klauser find_if_not(InputIterator first, InputIterator last, Predicate pred); 1189e78f53d1SNikolas Klauser 1190e78f53d1SNikolas Klausertemplate <class ForwardIterator1, class ForwardIterator2> 1191e78f53d1SNikolas Klauser constexpr ForwardIterator1 // constexpr in C++20 1192e78f53d1SNikolas Klauser find_end(ForwardIterator1 first1, ForwardIterator1 last1, 1193e78f53d1SNikolas Klauser ForwardIterator2 first2, ForwardIterator2 last2); 1194e78f53d1SNikolas Klauser 1195e78f53d1SNikolas Klausertemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1196e78f53d1SNikolas Klauser constexpr ForwardIterator1 // constexpr in C++20 1197e78f53d1SNikolas Klauser find_end(ForwardIterator1 first1, ForwardIterator1 last1, 1198e78f53d1SNikolas Klauser ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 1199e78f53d1SNikolas Klauser 1200e78f53d1SNikolas Klausertemplate <class ForwardIterator1, class ForwardIterator2> 1201e78f53d1SNikolas Klauser constexpr ForwardIterator1 // constexpr in C++20 1202e78f53d1SNikolas Klauser find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 1203e78f53d1SNikolas Klauser ForwardIterator2 first2, ForwardIterator2 last2); 1204e78f53d1SNikolas Klauser 1205e78f53d1SNikolas Klausertemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1206e78f53d1SNikolas Klauser constexpr ForwardIterator1 // constexpr in C++20 1207e78f53d1SNikolas Klauser find_first_of(ForwardIterator1 first1, ForwardIterator1 last1, 1208e78f53d1SNikolas Klauser ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 1209e78f53d1SNikolas Klauser 1210e78f53d1SNikolas Klausertemplate <class ForwardIterator> 1211e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1212e78f53d1SNikolas Klauser adjacent_find(ForwardIterator first, ForwardIterator last); 1213e78f53d1SNikolas Klauser 1214e78f53d1SNikolas Klausertemplate <class ForwardIterator, class BinaryPredicate> 1215e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1216e78f53d1SNikolas Klauser adjacent_find(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 1217e78f53d1SNikolas Klauser 1218e78f53d1SNikolas Klausertemplate <class InputIterator, class T> 1219e78f53d1SNikolas Klauser constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 1220e78f53d1SNikolas Klauser count(InputIterator first, InputIterator last, const T& value); 1221e78f53d1SNikolas Klauser 1222e78f53d1SNikolas Klausertemplate <class InputIterator, class Predicate> 1223e78f53d1SNikolas Klauser constexpr typename iterator_traits<InputIterator>::difference_type // constexpr in C++20 1224e78f53d1SNikolas Klauser count_if(InputIterator first, InputIterator last, Predicate pred); 1225e78f53d1SNikolas Klauser 1226e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2> 1227e78f53d1SNikolas Klauser constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 1228e78f53d1SNikolas Klauser mismatch(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 1229e78f53d1SNikolas Klauser 1230e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2> 1231e78f53d1SNikolas Klauser constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 1232e78f53d1SNikolas Klauser mismatch(InputIterator1 first1, InputIterator1 last1, 1233e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2); // **C++14** 1234e78f53d1SNikolas Klauser 1235e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1236e78f53d1SNikolas Klauser constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 1237e78f53d1SNikolas Klauser mismatch(InputIterator1 first1, InputIterator1 last1, 1238e78f53d1SNikolas Klauser InputIterator2 first2, BinaryPredicate pred); 1239e78f53d1SNikolas Klauser 1240e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1241e78f53d1SNikolas Klauser constexpr pair<InputIterator1, InputIterator2> // constexpr in C++20 1242e78f53d1SNikolas Klauser mismatch(InputIterator1 first1, InputIterator1 last1, 1243e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, 1244e78f53d1SNikolas Klauser BinaryPredicate pred); // **C++14** 1245e78f53d1SNikolas Klauser 1246e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2> 1247e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1248e78f53d1SNikolas Klauser equal(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2); 1249e78f53d1SNikolas Klauser 1250e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2> 1251e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1252e78f53d1SNikolas Klauser equal(InputIterator1 first1, InputIterator1 last1, 1253e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2); // **C++14** 1254e78f53d1SNikolas Klauser 1255e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1256e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1257e78f53d1SNikolas Klauser equal(InputIterator1 first1, InputIterator1 last1, 1258e78f53d1SNikolas Klauser InputIterator2 first2, BinaryPredicate pred); 1259e78f53d1SNikolas Klauser 1260e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class BinaryPredicate> 1261e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1262e78f53d1SNikolas Klauser equal(InputIterator1 first1, InputIterator1 last1, 1263e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, 1264e78f53d1SNikolas Klauser BinaryPredicate pred); // **C++14** 1265e78f53d1SNikolas Klauser 1266e78f53d1SNikolas Klausertemplate<class ForwardIterator1, class ForwardIterator2> 1267e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1268e78f53d1SNikolas Klauser is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1269e78f53d1SNikolas Klauser ForwardIterator2 first2); 1270e78f53d1SNikolas Klauser 1271e78f53d1SNikolas Klausertemplate<class ForwardIterator1, class ForwardIterator2> 1272e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1273e78f53d1SNikolas Klauser is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1274e78f53d1SNikolas Klauser ForwardIterator2 first2, ForwardIterator2 last2); // **C++14** 1275e78f53d1SNikolas Klauser 1276e78f53d1SNikolas Klausertemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1277e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1278e78f53d1SNikolas Klauser is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1279e78f53d1SNikolas Klauser ForwardIterator2 first2, BinaryPredicate pred); 1280e78f53d1SNikolas Klauser 1281e78f53d1SNikolas Klausertemplate<class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1282e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1283e78f53d1SNikolas Klauser is_permutation(ForwardIterator1 first1, ForwardIterator1 last1, 1284e78f53d1SNikolas Klauser ForwardIterator2 first2, ForwardIterator2 last2, 1285e78f53d1SNikolas Klauser BinaryPredicate pred); // **C++14** 1286e78f53d1SNikolas Klauser 1287e78f53d1SNikolas Klausertemplate <class ForwardIterator1, class ForwardIterator2> 1288e78f53d1SNikolas Klauser constexpr ForwardIterator1 // constexpr in C++20 1289e78f53d1SNikolas Klauser search(ForwardIterator1 first1, ForwardIterator1 last1, 1290e78f53d1SNikolas Klauser ForwardIterator2 first2, ForwardIterator2 last2); 1291e78f53d1SNikolas Klauser 1292e78f53d1SNikolas Klausertemplate <class ForwardIterator1, class ForwardIterator2, class BinaryPredicate> 1293e78f53d1SNikolas Klauser constexpr ForwardIterator1 // constexpr in C++20 1294e78f53d1SNikolas Klauser search(ForwardIterator1 first1, ForwardIterator1 last1, 1295e78f53d1SNikolas Klauser ForwardIterator2 first2, ForwardIterator2 last2, BinaryPredicate pred); 1296e78f53d1SNikolas Klauser 1297e78f53d1SNikolas Klausertemplate <class ForwardIterator, class Size, class T> 1298e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1299e78f53d1SNikolas Klauser search_n(ForwardIterator first, ForwardIterator last, Size count, const T& value); 1300e78f53d1SNikolas Klauser 1301e78f53d1SNikolas Klausertemplate <class ForwardIterator, class Size, class T, class BinaryPredicate> 1302e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1303e78f53d1SNikolas Klauser search_n(ForwardIterator first, ForwardIterator last, 1304e78f53d1SNikolas Klauser Size count, const T& value, BinaryPredicate pred); 1305e78f53d1SNikolas Klauser 1306e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator> 1307e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1308e78f53d1SNikolas Klauser copy(InputIterator first, InputIterator last, OutputIterator result); 1309e78f53d1SNikolas Klauser 1310e78f53d1SNikolas Klausertemplate<class InputIterator, class OutputIterator, class Predicate> 1311e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1312e78f53d1SNikolas Klauser copy_if(InputIterator first, InputIterator last, 1313e78f53d1SNikolas Klauser OutputIterator result, Predicate pred); 1314e78f53d1SNikolas Klauser 1315e78f53d1SNikolas Klausertemplate<class InputIterator, class Size, class OutputIterator> 1316e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1317e78f53d1SNikolas Klauser copy_n(InputIterator first, Size n, OutputIterator result); 1318e78f53d1SNikolas Klauser 1319e78f53d1SNikolas Klausertemplate <class BidirectionalIterator1, class BidirectionalIterator2> 1320e78f53d1SNikolas Klauser constexpr BidirectionalIterator2 // constexpr in C++20 1321e78f53d1SNikolas Klauser copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, 1322e78f53d1SNikolas Klauser BidirectionalIterator2 result); 1323e78f53d1SNikolas Klauser 1324e78f53d1SNikolas Klauser// [alg.move], move 1325e78f53d1SNikolas Klausertemplate<class InputIterator, class OutputIterator> 1326e78f53d1SNikolas Klauser constexpr OutputIterator move(InputIterator first, InputIterator last, 1327e78f53d1SNikolas Klauser OutputIterator result); 1328e78f53d1SNikolas Klauser 1329e78f53d1SNikolas Klausertemplate<class BidirectionalIterator1, class BidirectionalIterator2> 1330e78f53d1SNikolas Klauser constexpr BidirectionalIterator2 1331e78f53d1SNikolas Klauser move_backward(BidirectionalIterator1 first, BidirectionalIterator1 last, 1332e78f53d1SNikolas Klauser BidirectionalIterator2 result); 1333e78f53d1SNikolas Klauser 1334e78f53d1SNikolas Klausertemplate <class ForwardIterator1, class ForwardIterator2> 1335e78f53d1SNikolas Klauser constexpr ForwardIterator2 // constexpr in C++20 1336e78f53d1SNikolas Klauser swap_ranges(ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2); 1337e78f53d1SNikolas Klauser 1338e78f53d1SNikolas Klausernamespace ranges { 1339e78f53d1SNikolas Klauser template<class I1, class I2> 1340e78f53d1SNikolas Klauser using swap_ranges_result = in_in_result<I1, I2>; 1341e78f53d1SNikolas Klauser 1342e78f53d1SNikolas Klausertemplate<input_iterator I1, sentinel_for<I1> S1, input_iterator I2, sentinel_for<I2> S2> 1343e78f53d1SNikolas Klauser requires indirectly_swappable<I1, I2> 1344e78f53d1SNikolas Klauser constexpr ranges::swap_ranges_result<I1, I2> 1345e78f53d1SNikolas Klauser swap_ranges(I1 first1, S1 last1, I2 first2, S2 last2); 1346e78f53d1SNikolas Klauser 1347e78f53d1SNikolas Klausertemplate<input_range R1, input_range R2> 1348e78f53d1SNikolas Klauser requires indirectly_swappable<iterator_t<R1>, iterator_t<R2>> 1349e78f53d1SNikolas Klauser constexpr ranges::swap_ranges_result<borrowed_iterator_t<R1>, borrowed_iterator_t<R2>> 1350e78f53d1SNikolas Klauser swap_ranges(R1&& r1, R2&& r2); 1351e78f53d1SNikolas Klauser} 1352e78f53d1SNikolas Klauser 1353e78f53d1SNikolas Klausertemplate <class ForwardIterator1, class ForwardIterator2> 1354e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1355e78f53d1SNikolas Klauser iter_swap(ForwardIterator1 a, ForwardIterator2 b); 1356e78f53d1SNikolas Klauser 1357e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator, class UnaryOperation> 1358e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1359e78f53d1SNikolas Klauser transform(InputIterator first, InputIterator last, OutputIterator result, UnaryOperation op); 1360e78f53d1SNikolas Klauser 1361e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class OutputIterator, class BinaryOperation> 1362e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1363e78f53d1SNikolas Klauser transform(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, 1364e78f53d1SNikolas Klauser OutputIterator result, BinaryOperation binary_op); 1365e78f53d1SNikolas Klauser 1366e78f53d1SNikolas Klausertemplate <class ForwardIterator, class T> 1367e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1368e78f53d1SNikolas Klauser replace(ForwardIterator first, ForwardIterator last, const T& old_value, const T& new_value); 1369e78f53d1SNikolas Klauser 1370e78f53d1SNikolas Klausertemplate <class ForwardIterator, class Predicate, class T> 1371e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1372e78f53d1SNikolas Klauser replace_if(ForwardIterator first, ForwardIterator last, Predicate pred, const T& new_value); 1373e78f53d1SNikolas Klauser 1374e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator, class T> 1375e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1376e78f53d1SNikolas Klauser replace_copy(InputIterator first, InputIterator last, OutputIterator result, 1377e78f53d1SNikolas Klauser const T& old_value, const T& new_value); 1378e78f53d1SNikolas Klauser 1379e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator, class Predicate, class T> 1380e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1381e78f53d1SNikolas Klauser replace_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred, const T& new_value); 1382e78f53d1SNikolas Klauser 1383e78f53d1SNikolas Klausertemplate <class ForwardIterator, class T> 1384e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1385e78f53d1SNikolas Klauser fill(ForwardIterator first, ForwardIterator last, const T& value); 1386e78f53d1SNikolas Klauser 1387e78f53d1SNikolas Klausertemplate <class OutputIterator, class Size, class T> 1388e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1389e78f53d1SNikolas Klauser fill_n(OutputIterator first, Size n, const T& value); 1390e78f53d1SNikolas Klauser 1391e78f53d1SNikolas Klausertemplate <class ForwardIterator, class Generator> 1392e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1393e78f53d1SNikolas Klauser generate(ForwardIterator first, ForwardIterator last, Generator gen); 1394e78f53d1SNikolas Klauser 1395e78f53d1SNikolas Klausertemplate <class OutputIterator, class Size, class Generator> 1396e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1397e78f53d1SNikolas Klauser generate_n(OutputIterator first, Size n, Generator gen); 1398e78f53d1SNikolas Klauser 1399e78f53d1SNikolas Klausertemplate <class ForwardIterator, class T> 1400e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1401e78f53d1SNikolas Klauser remove(ForwardIterator first, ForwardIterator last, const T& value); 1402e78f53d1SNikolas Klauser 1403e78f53d1SNikolas Klausertemplate <class ForwardIterator, class Predicate> 1404e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1405e78f53d1SNikolas Klauser remove_if(ForwardIterator first, ForwardIterator last, Predicate pred); 1406e78f53d1SNikolas Klauser 1407e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator, class T> 1408e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1409e78f53d1SNikolas Klauser remove_copy(InputIterator first, InputIterator last, OutputIterator result, const T& value); 1410e78f53d1SNikolas Klauser 1411e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator, class Predicate> 1412e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1413e78f53d1SNikolas Klauser remove_copy_if(InputIterator first, InputIterator last, OutputIterator result, Predicate pred); 1414e78f53d1SNikolas Klauser 1415e78f53d1SNikolas Klausertemplate <class ForwardIterator> 1416e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1417e78f53d1SNikolas Klauser unique(ForwardIterator first, ForwardIterator last); 1418e78f53d1SNikolas Klauser 1419e78f53d1SNikolas Klausertemplate <class ForwardIterator, class BinaryPredicate> 1420e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1421e78f53d1SNikolas Klauser unique(ForwardIterator first, ForwardIterator last, BinaryPredicate pred); 1422e78f53d1SNikolas Klauser 1423e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator> 1424e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1425e78f53d1SNikolas Klauser unique_copy(InputIterator first, InputIterator last, OutputIterator result); 1426e78f53d1SNikolas Klauser 1427e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator, class BinaryPredicate> 1428e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1429e78f53d1SNikolas Klauser unique_copy(InputIterator first, InputIterator last, OutputIterator result, BinaryPredicate pred); 1430e78f53d1SNikolas Klauser 1431e78f53d1SNikolas Klausertemplate <class BidirectionalIterator> 1432e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1433e78f53d1SNikolas Klauser reverse(BidirectionalIterator first, BidirectionalIterator last); 1434e78f53d1SNikolas Klauser 1435e78f53d1SNikolas Klausertemplate <class BidirectionalIterator, class OutputIterator> 1436e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1437e78f53d1SNikolas Klauser reverse_copy(BidirectionalIterator first, BidirectionalIterator last, OutputIterator result); 1438e78f53d1SNikolas Klauser 1439e78f53d1SNikolas Klausertemplate <class ForwardIterator> 1440e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1441e78f53d1SNikolas Klauser rotate(ForwardIterator first, ForwardIterator middle, ForwardIterator last); 1442e78f53d1SNikolas Klauser 1443e78f53d1SNikolas Klausertemplate <class ForwardIterator, class OutputIterator> 1444e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1445e78f53d1SNikolas Klauser rotate_copy(ForwardIterator first, ForwardIterator middle, ForwardIterator last, OutputIterator result); 1446e78f53d1SNikolas Klauser 1447e78f53d1SNikolas Klausertemplate <class RandomAccessIterator> 1448e78f53d1SNikolas Klauser void 1449e78f53d1SNikolas Klauser random_shuffle(RandomAccessIterator first, RandomAccessIterator last); // deprecated in C++14, removed in C++17 1450e78f53d1SNikolas Klauser 1451e78f53d1SNikolas Klausertemplate <class RandomAccessIterator, class RandomNumberGenerator> 1452e78f53d1SNikolas Klauser void 1453e78f53d1SNikolas Klauser random_shuffle(RandomAccessIterator first, RandomAccessIterator last, 1454e78f53d1SNikolas Klauser RandomNumberGenerator& rand); // deprecated in C++14, removed in C++17 1455e78f53d1SNikolas Klauser 1456e78f53d1SNikolas Klausertemplate<class PopulationIterator, class SampleIterator, 1457e78f53d1SNikolas Klauser class Distance, class UniformRandomBitGenerator> 1458e78f53d1SNikolas Klauser SampleIterator sample(PopulationIterator first, PopulationIterator last, 1459e78f53d1SNikolas Klauser SampleIterator out, Distance n, 1460e78f53d1SNikolas Klauser UniformRandomBitGenerator&& g); // C++17 1461e78f53d1SNikolas Klauser 1462e78f53d1SNikolas Klausertemplate<class RandomAccessIterator, class UniformRandomNumberGenerator> 1463e78f53d1SNikolas Klauser void shuffle(RandomAccessIterator first, RandomAccessIterator last, 1464e78f53d1SNikolas Klauser UniformRandomNumberGenerator&& g); 1465e78f53d1SNikolas Klauser 1466e78f53d1SNikolas Klausertemplate<class ForwardIterator> 1467e78f53d1SNikolas Klauser constexpr ForwardIterator 1468e78f53d1SNikolas Klauser shift_left(ForwardIterator first, ForwardIterator last, 1469e78f53d1SNikolas Klauser typename iterator_traits<ForwardIterator>::difference_type n); // C++20 1470e78f53d1SNikolas Klauser 1471e78f53d1SNikolas Klausertemplate<class ForwardIterator> 1472e78f53d1SNikolas Klauser constexpr ForwardIterator 1473e78f53d1SNikolas Klauser shift_right(ForwardIterator first, ForwardIterator last, 1474e78f53d1SNikolas Klauser typename iterator_traits<ForwardIterator>::difference_type n); // C++20 1475e78f53d1SNikolas Klauser 1476e78f53d1SNikolas Klausertemplate <class InputIterator, class Predicate> 1477e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1478e78f53d1SNikolas Klauser is_partitioned(InputIterator first, InputIterator last, Predicate pred); 1479e78f53d1SNikolas Klauser 1480e78f53d1SNikolas Klausertemplate <class ForwardIterator, class Predicate> 1481e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1482e78f53d1SNikolas Klauser partition(ForwardIterator first, ForwardIterator last, Predicate pred); 1483e78f53d1SNikolas Klauser 1484e78f53d1SNikolas Klausertemplate <class InputIterator, class OutputIterator1, 1485e78f53d1SNikolas Klauser class OutputIterator2, class Predicate> 1486e78f53d1SNikolas Klauser constexpr pair<OutputIterator1, OutputIterator2> // constexpr in C++20 1487e78f53d1SNikolas Klauser partition_copy(InputIterator first, InputIterator last, 1488e78f53d1SNikolas Klauser OutputIterator1 out_true, OutputIterator2 out_false, 1489e78f53d1SNikolas Klauser Predicate pred); 1490e78f53d1SNikolas Klauser 1491e78f53d1SNikolas Klausertemplate <class ForwardIterator, class Predicate> 1492e78f53d1SNikolas Klauser ForwardIterator 1493e78f53d1SNikolas Klauser stable_partition(ForwardIterator first, ForwardIterator last, Predicate pred); 1494e78f53d1SNikolas Klauser 1495e78f53d1SNikolas Klausertemplate<class ForwardIterator, class Predicate> 1496e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1497e78f53d1SNikolas Klauser partition_point(ForwardIterator first, ForwardIterator last, Predicate pred); 1498e78f53d1SNikolas Klauser 1499e78f53d1SNikolas Klausertemplate <class ForwardIterator> 1500e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1501e78f53d1SNikolas Klauser is_sorted(ForwardIterator first, ForwardIterator last); 1502e78f53d1SNikolas Klauser 1503e78f53d1SNikolas Klausertemplate <class ForwardIterator, class Compare> 1504e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1505e78f53d1SNikolas Klauser is_sorted(ForwardIterator first, ForwardIterator last, Compare comp); 1506e78f53d1SNikolas Klauser 1507e78f53d1SNikolas Klausertemplate<class ForwardIterator> 1508e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1509e78f53d1SNikolas Klauser is_sorted_until(ForwardIterator first, ForwardIterator last); 1510e78f53d1SNikolas Klauser 1511e78f53d1SNikolas Klausertemplate <class ForwardIterator, class Compare> 1512e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1513e78f53d1SNikolas Klauser is_sorted_until(ForwardIterator first, ForwardIterator last, Compare comp); 1514e78f53d1SNikolas Klauser 1515e78f53d1SNikolas Klausertemplate <class RandomAccessIterator> 1516e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1517e78f53d1SNikolas Klauser sort(RandomAccessIterator first, RandomAccessIterator last); 1518e78f53d1SNikolas Klauser 1519e78f53d1SNikolas Klausertemplate <class RandomAccessIterator, class Compare> 1520e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1521e78f53d1SNikolas Klauser sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 1522e78f53d1SNikolas Klauser 1523e78f53d1SNikolas Klausertemplate <class RandomAccessIterator> 1524e78f53d1SNikolas Klauser void 1525e78f53d1SNikolas Klauser stable_sort(RandomAccessIterator first, RandomAccessIterator last); 1526e78f53d1SNikolas Klauser 1527e78f53d1SNikolas Klausertemplate <class RandomAccessIterator, class Compare> 1528e78f53d1SNikolas Klauser void 1529e78f53d1SNikolas Klauser stable_sort(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 1530e78f53d1SNikolas Klauser 1531e78f53d1SNikolas Klausertemplate <class RandomAccessIterator> 1532e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1533e78f53d1SNikolas Klauser partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last); 1534e78f53d1SNikolas Klauser 1535e78f53d1SNikolas Klausertemplate <class RandomAccessIterator, class Compare> 1536e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1537e78f53d1SNikolas Klauser partial_sort(RandomAccessIterator first, RandomAccessIterator middle, RandomAccessIterator last, Compare comp); 1538e78f53d1SNikolas Klauser 1539e78f53d1SNikolas Klausertemplate <class InputIterator, class RandomAccessIterator> 1540e78f53d1SNikolas Klauser constexpr RandomAccessIterator // constexpr in C++20 1541e78f53d1SNikolas Klauser partial_sort_copy(InputIterator first, InputIterator last, 1542e78f53d1SNikolas Klauser RandomAccessIterator result_first, RandomAccessIterator result_last); 1543e78f53d1SNikolas Klauser 1544e78f53d1SNikolas Klausertemplate <class InputIterator, class RandomAccessIterator, class Compare> 1545e78f53d1SNikolas Klauser constexpr RandomAccessIterator // constexpr in C++20 1546e78f53d1SNikolas Klauser partial_sort_copy(InputIterator first, InputIterator last, 1547e78f53d1SNikolas Klauser RandomAccessIterator result_first, RandomAccessIterator result_last, Compare comp); 1548e78f53d1SNikolas Klauser 1549e78f53d1SNikolas Klausertemplate <class RandomAccessIterator> 1550e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1551e78f53d1SNikolas Klauser nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last); 1552e78f53d1SNikolas Klauser 1553e78f53d1SNikolas Klausertemplate <class RandomAccessIterator, class Compare> 1554e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1555e78f53d1SNikolas Klauser nth_element(RandomAccessIterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp); 1556e78f53d1SNikolas Klauser 1557e78f53d1SNikolas Klausertemplate <class ForwardIterator, class T> 1558e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1559e78f53d1SNikolas Klauser lower_bound(ForwardIterator first, ForwardIterator last, const T& value); 1560e78f53d1SNikolas Klauser 1561e78f53d1SNikolas Klausertemplate <class ForwardIterator, class T, class Compare> 1562e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1563e78f53d1SNikolas Klauser lower_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 1564e78f53d1SNikolas Klauser 1565e78f53d1SNikolas Klausertemplate <class ForwardIterator, class T> 1566e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1567e78f53d1SNikolas Klauser upper_bound(ForwardIterator first, ForwardIterator last, const T& value); 1568e78f53d1SNikolas Klauser 1569e78f53d1SNikolas Klausertemplate <class ForwardIterator, class T, class Compare> 1570e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++20 1571e78f53d1SNikolas Klauser upper_bound(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 1572e78f53d1SNikolas Klauser 1573e78f53d1SNikolas Klausertemplate <class ForwardIterator, class T> 1574e78f53d1SNikolas Klauser constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 1575e78f53d1SNikolas Klauser equal_range(ForwardIterator first, ForwardIterator last, const T& value); 1576e78f53d1SNikolas Klauser 1577e78f53d1SNikolas Klausertemplate <class ForwardIterator, class T, class Compare> 1578e78f53d1SNikolas Klauser constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++20 1579e78f53d1SNikolas Klauser equal_range(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 1580e78f53d1SNikolas Klauser 1581e78f53d1SNikolas Klausertemplate <class ForwardIterator, class T> 1582e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1583e78f53d1SNikolas Klauser binary_search(ForwardIterator first, ForwardIterator last, const T& value); 1584e78f53d1SNikolas Klauser 1585e78f53d1SNikolas Klausertemplate <class ForwardIterator, class T, class Compare> 1586e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1587e78f53d1SNikolas Klauser binary_search(ForwardIterator first, ForwardIterator last, const T& value, Compare comp); 1588e78f53d1SNikolas Klauser 1589e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class OutputIterator> 1590e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1591e78f53d1SNikolas Klauser merge(InputIterator1 first1, InputIterator1 last1, 1592e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, OutputIterator result); 1593e78f53d1SNikolas Klauser 1594e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 1595e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1596e78f53d1SNikolas Klauser merge(InputIterator1 first1, InputIterator1 last1, 1597e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 1598e78f53d1SNikolas Klauser 1599e78f53d1SNikolas Klausertemplate <class BidirectionalIterator> 1600e78f53d1SNikolas Klauser void 1601e78f53d1SNikolas Klauser inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last); 1602e78f53d1SNikolas Klauser 1603e78f53d1SNikolas Klausertemplate <class BidirectionalIterator, class Compare> 1604e78f53d1SNikolas Klauser void 1605e78f53d1SNikolas Klauser inplace_merge(BidirectionalIterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp); 1606e78f53d1SNikolas Klauser 1607e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2> 1608e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1609e78f53d1SNikolas Klauser includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 1610e78f53d1SNikolas Klauser 1611e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class Compare> 1612e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1613e78f53d1SNikolas Klauser includes(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp); 1614e78f53d1SNikolas Klauser 1615e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class OutputIterator> 1616e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1617e78f53d1SNikolas Klauser set_union(InputIterator1 first1, InputIterator1 last1, 1618e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, OutputIterator result); 1619e78f53d1SNikolas Klauser 1620e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 1621e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1622e78f53d1SNikolas Klauser set_union(InputIterator1 first1, InputIterator1 last1, 1623e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 1624e78f53d1SNikolas Klauser 1625e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class OutputIterator> 1626e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1627e78f53d1SNikolas Klauser set_intersection(InputIterator1 first1, InputIterator1 last1, 1628e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, OutputIterator result); 1629e78f53d1SNikolas Klauser 1630e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 1631e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1632e78f53d1SNikolas Klauser set_intersection(InputIterator1 first1, InputIterator1 last1, 1633e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 1634e78f53d1SNikolas Klauser 1635e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class OutputIterator> 1636e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1637e78f53d1SNikolas Klauser set_difference(InputIterator1 first1, InputIterator1 last1, 1638e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, OutputIterator result); 1639e78f53d1SNikolas Klauser 1640e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 1641e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1642e78f53d1SNikolas Klauser set_difference(InputIterator1 first1, InputIterator1 last1, 1643e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 1644e78f53d1SNikolas Klauser 1645e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class OutputIterator> 1646e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1647e78f53d1SNikolas Klauser set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 1648e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, OutputIterator result); 1649e78f53d1SNikolas Klauser 1650e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class OutputIterator, class Compare> 1651e78f53d1SNikolas Klauser constexpr OutputIterator // constexpr in C++20 1652e78f53d1SNikolas Klauser set_symmetric_difference(InputIterator1 first1, InputIterator1 last1, 1653e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); 1654e78f53d1SNikolas Klauser 1655e78f53d1SNikolas Klausertemplate <class RandomAccessIterator> 1656e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1657e78f53d1SNikolas Klauser push_heap(RandomAccessIterator first, RandomAccessIterator last); 1658e78f53d1SNikolas Klauser 1659e78f53d1SNikolas Klausertemplate <class RandomAccessIterator, class Compare> 1660e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1661e78f53d1SNikolas Klauser push_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 1662e78f53d1SNikolas Klauser 1663e78f53d1SNikolas Klausertemplate <class RandomAccessIterator> 1664e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1665e78f53d1SNikolas Klauser pop_heap(RandomAccessIterator first, RandomAccessIterator last); 1666e78f53d1SNikolas Klauser 1667e78f53d1SNikolas Klausertemplate <class RandomAccessIterator, class Compare> 1668e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1669e78f53d1SNikolas Klauser pop_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 1670e78f53d1SNikolas Klauser 1671e78f53d1SNikolas Klausertemplate <class RandomAccessIterator> 1672e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1673e78f53d1SNikolas Klauser make_heap(RandomAccessIterator first, RandomAccessIterator last); 1674e78f53d1SNikolas Klauser 1675e78f53d1SNikolas Klausertemplate <class RandomAccessIterator, class Compare> 1676e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1677e78f53d1SNikolas Klauser make_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 1678e78f53d1SNikolas Klauser 1679e78f53d1SNikolas Klausertemplate <class RandomAccessIterator> 1680e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1681e78f53d1SNikolas Klauser sort_heap(RandomAccessIterator first, RandomAccessIterator last); 1682e78f53d1SNikolas Klauser 1683e78f53d1SNikolas Klausertemplate <class RandomAccessIterator, class Compare> 1684e78f53d1SNikolas Klauser constexpr void // constexpr in C++20 1685e78f53d1SNikolas Klauser sort_heap(RandomAccessIterator first, RandomAccessIterator last, Compare comp); 1686e78f53d1SNikolas Klauser 1687e78f53d1SNikolas Klausertemplate <class RandomAccessIterator> 1688e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1689e78f53d1SNikolas Klauser is_heap(RandomAccessIterator first, RandomAccessiterator last); 1690e78f53d1SNikolas Klauser 1691e78f53d1SNikolas Klausertemplate <class RandomAccessIterator, class Compare> 1692e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1693e78f53d1SNikolas Klauser is_heap(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 1694e78f53d1SNikolas Klauser 1695e78f53d1SNikolas Klausertemplate <class RandomAccessIterator> 1696e78f53d1SNikolas Klauser constexpr RandomAccessIterator // constexpr in C++20 1697e78f53d1SNikolas Klauser is_heap_until(RandomAccessIterator first, RandomAccessiterator last); 1698e78f53d1SNikolas Klauser 1699e78f53d1SNikolas Klausertemplate <class RandomAccessIterator, class Compare> 1700e78f53d1SNikolas Klauser constexpr RandomAccessIterator // constexpr in C++20 1701e78f53d1SNikolas Klauser is_heap_until(RandomAccessIterator first, RandomAccessiterator last, Compare comp); 1702e78f53d1SNikolas Klauser 1703e78f53d1SNikolas Klausertemplate <class ForwardIterator> 1704e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++14 1705e78f53d1SNikolas Klauser min_element(ForwardIterator first, ForwardIterator last); 1706e78f53d1SNikolas Klauser 1707e78f53d1SNikolas Klausertemplate <class ForwardIterator, class Compare> 1708e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++14 1709e78f53d1SNikolas Klauser min_element(ForwardIterator first, ForwardIterator last, Compare comp); 1710e78f53d1SNikolas Klauser 1711e78f53d1SNikolas Klausertemplate <class T> 1712e78f53d1SNikolas Klauser constexpr const T& // constexpr in C++14 1713e78f53d1SNikolas Klauser min(const T& a, const T& b); 1714e78f53d1SNikolas Klauser 1715e78f53d1SNikolas Klausertemplate <class T, class Compare> 1716e78f53d1SNikolas Klauser constexpr const T& // constexpr in C++14 1717e78f53d1SNikolas Klauser min(const T& a, const T& b, Compare comp); 1718e78f53d1SNikolas Klauser 1719e78f53d1SNikolas Klausertemplate<class T> 1720e78f53d1SNikolas Klauser constexpr T // constexpr in C++14 1721e78f53d1SNikolas Klauser min(initializer_list<T> t); 1722e78f53d1SNikolas Klauser 1723e78f53d1SNikolas Klausertemplate<class T, class Compare> 1724e78f53d1SNikolas Klauser constexpr T // constexpr in C++14 1725e78f53d1SNikolas Klauser min(initializer_list<T> t, Compare comp); 1726e78f53d1SNikolas Klauser 1727e78f53d1SNikolas Klausertemplate<class T> 1728e78f53d1SNikolas Klauser constexpr const T& clamp(const T& v, const T& lo, const T& hi); // C++17 1729e78f53d1SNikolas Klauser 1730e78f53d1SNikolas Klausertemplate<class T, class Compare> 1731e78f53d1SNikolas Klauser constexpr const T& clamp(const T& v, const T& lo, const T& hi, Compare comp); // C++17 1732e78f53d1SNikolas Klauser 1733e78f53d1SNikolas Klausertemplate <class ForwardIterator> 1734e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++14 1735e78f53d1SNikolas Klauser max_element(ForwardIterator first, ForwardIterator last); 1736e78f53d1SNikolas Klauser 1737e78f53d1SNikolas Klausertemplate <class ForwardIterator, class Compare> 1738e78f53d1SNikolas Klauser constexpr ForwardIterator // constexpr in C++14 1739e78f53d1SNikolas Klauser max_element(ForwardIterator first, ForwardIterator last, Compare comp); 1740e78f53d1SNikolas Klauser 1741e78f53d1SNikolas Klausertemplate <class T> 1742e78f53d1SNikolas Klauser constexpr const T& // constexpr in C++14 1743e78f53d1SNikolas Klauser max(const T& a, const T& b); 1744e78f53d1SNikolas Klauser 1745e78f53d1SNikolas Klausertemplate <class T, class Compare> 1746e78f53d1SNikolas Klauser constexpr const T& // constexpr in C++14 1747e78f53d1SNikolas Klauser max(const T& a, const T& b, Compare comp); 1748e78f53d1SNikolas Klauser 1749e78f53d1SNikolas Klausertemplate<class T> 1750e78f53d1SNikolas Klauser constexpr T // constexpr in C++14 1751e78f53d1SNikolas Klauser max(initializer_list<T> t); 1752e78f53d1SNikolas Klauser 1753e78f53d1SNikolas Klausertemplate<class T, class Compare> 1754e78f53d1SNikolas Klauser constexpr T // constexpr in C++14 1755e78f53d1SNikolas Klauser max(initializer_list<T> t, Compare comp); 1756e78f53d1SNikolas Klauser 1757e78f53d1SNikolas Klausertemplate<class ForwardIterator> 1758e78f53d1SNikolas Klauser constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 1759e78f53d1SNikolas Klauser minmax_element(ForwardIterator first, ForwardIterator last); 1760e78f53d1SNikolas Klauser 1761e78f53d1SNikolas Klausertemplate<class ForwardIterator, class Compare> 1762e78f53d1SNikolas Klauser constexpr pair<ForwardIterator, ForwardIterator> // constexpr in C++14 1763e78f53d1SNikolas Klauser minmax_element(ForwardIterator first, ForwardIterator last, Compare comp); 1764e78f53d1SNikolas Klauser 1765e78f53d1SNikolas Klausertemplate<class T> 1766e78f53d1SNikolas Klauser constexpr pair<const T&, const T&> // constexpr in C++14 1767e78f53d1SNikolas Klauser minmax(const T& a, const T& b); 1768e78f53d1SNikolas Klauser 1769e78f53d1SNikolas Klausertemplate<class T, class Compare> 1770e78f53d1SNikolas Klauser constexpr pair<const T&, const T&> // constexpr in C++14 1771e78f53d1SNikolas Klauser minmax(const T& a, const T& b, Compare comp); 1772e78f53d1SNikolas Klauser 1773e78f53d1SNikolas Klausertemplate<class T> 1774e78f53d1SNikolas Klauser constexpr pair<T, T> // constexpr in C++14 1775e78f53d1SNikolas Klauser minmax(initializer_list<T> t); 1776e78f53d1SNikolas Klauser 1777e78f53d1SNikolas Klausertemplate<class T, class Compare> 1778e78f53d1SNikolas Klauser constexpr pair<T, T> // constexpr in C++14 1779e78f53d1SNikolas Klauser minmax(initializer_list<T> t, Compare comp); 1780e78f53d1SNikolas Klauser 1781e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2> 1782e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1783e78f53d1SNikolas Klauser lexicographical_compare(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2); 1784e78f53d1SNikolas Klauser 1785e78f53d1SNikolas Klausertemplate <class InputIterator1, class InputIterator2, class Compare> 1786e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1787e78f53d1SNikolas Klauser lexicographical_compare(InputIterator1 first1, InputIterator1 last1, 1788e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, Compare comp); 1789e78f53d1SNikolas Klauser 1790e78f53d1SNikolas Klausertemplate<class InputIterator1, class InputIterator2, class Cmp> 1791e78f53d1SNikolas Klauser constexpr auto 1792e78f53d1SNikolas Klauser lexicographical_compare_three_way(InputIterator1 first1, InputIterator1 last1, 1793e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2, 1794e78f53d1SNikolas Klauser Cmp comp) 1795e78f53d1SNikolas Klauser -> decltype(comp(*b1, *b2)); // since C++20 1796e78f53d1SNikolas Klauser 1797e78f53d1SNikolas Klausertemplate<class InputIterator1, class InputIterator2> 1798e78f53d1SNikolas Klauser constexpr auto 1799e78f53d1SNikolas Klauser lexicographical_compare_three_way(InputIterator1 first1, InputIterator1 last1, 1800e78f53d1SNikolas Klauser InputIterator2 first2, InputIterator2 last2); // since C++20 1801e78f53d1SNikolas Klauser 1802e78f53d1SNikolas Klausertemplate <class BidirectionalIterator> 1803e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1804e78f53d1SNikolas Klauser next_permutation(BidirectionalIterator first, BidirectionalIterator last); 1805e78f53d1SNikolas Klauser 1806e78f53d1SNikolas Klausertemplate <class BidirectionalIterator, class Compare> 1807e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1808e78f53d1SNikolas Klauser next_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 1809e78f53d1SNikolas Klauser 1810e78f53d1SNikolas Klausertemplate <class BidirectionalIterator> 1811e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1812e78f53d1SNikolas Klauser prev_permutation(BidirectionalIterator first, BidirectionalIterator last); 1813e78f53d1SNikolas Klauser 1814e78f53d1SNikolas Klausertemplate <class BidirectionalIterator, class Compare> 1815e78f53d1SNikolas Klauser constexpr bool // constexpr in C++20 1816e78f53d1SNikolas Klauser prev_permutation(BidirectionalIterator first, BidirectionalIterator last, Compare comp); 1817e78f53d1SNikolas Klauser} // std 1818e78f53d1SNikolas Klauser 1819e78f53d1SNikolas Klauser*/ 1820e78f53d1SNikolas Klauser 182173fbae83SNikolas Klauser#include <__cxx03/__config> 1822e78f53d1SNikolas Klauser 182373fbae83SNikolas Klauser#include <__cxx03/__algorithm/adjacent_find.h> 182473fbae83SNikolas Klauser#include <__cxx03/__algorithm/all_of.h> 182573fbae83SNikolas Klauser#include <__cxx03/__algorithm/any_of.h> 182673fbae83SNikolas Klauser#include <__cxx03/__algorithm/binary_search.h> 182773fbae83SNikolas Klauser#include <__cxx03/__algorithm/copy.h> 182873fbae83SNikolas Klauser#include <__cxx03/__algorithm/copy_backward.h> 182973fbae83SNikolas Klauser#include <__cxx03/__algorithm/copy_if.h> 183073fbae83SNikolas Klauser#include <__cxx03/__algorithm/copy_n.h> 183173fbae83SNikolas Klauser#include <__cxx03/__algorithm/count.h> 183273fbae83SNikolas Klauser#include <__cxx03/__algorithm/count_if.h> 183373fbae83SNikolas Klauser#include <__cxx03/__algorithm/equal.h> 183473fbae83SNikolas Klauser#include <__cxx03/__algorithm/equal_range.h> 183573fbae83SNikolas Klauser#include <__cxx03/__algorithm/fill.h> 183673fbae83SNikolas Klauser#include <__cxx03/__algorithm/fill_n.h> 183773fbae83SNikolas Klauser#include <__cxx03/__algorithm/find.h> 183873fbae83SNikolas Klauser#include <__cxx03/__algorithm/find_end.h> 183973fbae83SNikolas Klauser#include <__cxx03/__algorithm/find_first_of.h> 184073fbae83SNikolas Klauser#include <__cxx03/__algorithm/find_if.h> 184173fbae83SNikolas Klauser#include <__cxx03/__algorithm/find_if_not.h> 184273fbae83SNikolas Klauser#include <__cxx03/__algorithm/for_each.h> 184373fbae83SNikolas Klauser#include <__cxx03/__algorithm/generate.h> 184473fbae83SNikolas Klauser#include <__cxx03/__algorithm/generate_n.h> 184573fbae83SNikolas Klauser#include <__cxx03/__algorithm/includes.h> 184673fbae83SNikolas Klauser#include <__cxx03/__algorithm/inplace_merge.h> 184773fbae83SNikolas Klauser#include <__cxx03/__algorithm/is_heap.h> 184873fbae83SNikolas Klauser#include <__cxx03/__algorithm/is_heap_until.h> 184973fbae83SNikolas Klauser#include <__cxx03/__algorithm/is_partitioned.h> 185073fbae83SNikolas Klauser#include <__cxx03/__algorithm/is_permutation.h> 185173fbae83SNikolas Klauser#include <__cxx03/__algorithm/is_sorted.h> 185273fbae83SNikolas Klauser#include <__cxx03/__algorithm/is_sorted_until.h> 185373fbae83SNikolas Klauser#include <__cxx03/__algorithm/iter_swap.h> 185473fbae83SNikolas Klauser#include <__cxx03/__algorithm/lexicographical_compare.h> 185573fbae83SNikolas Klauser#include <__cxx03/__algorithm/lower_bound.h> 185673fbae83SNikolas Klauser#include <__cxx03/__algorithm/make_heap.h> 185773fbae83SNikolas Klauser#include <__cxx03/__algorithm/max.h> 185873fbae83SNikolas Klauser#include <__cxx03/__algorithm/max_element.h> 185973fbae83SNikolas Klauser#include <__cxx03/__algorithm/merge.h> 186073fbae83SNikolas Klauser#include <__cxx03/__algorithm/min.h> 186173fbae83SNikolas Klauser#include <__cxx03/__algorithm/min_element.h> 186273fbae83SNikolas Klauser#include <__cxx03/__algorithm/minmax.h> 186373fbae83SNikolas Klauser#include <__cxx03/__algorithm/minmax_element.h> 186473fbae83SNikolas Klauser#include <__cxx03/__algorithm/mismatch.h> 186573fbae83SNikolas Klauser#include <__cxx03/__algorithm/move.h> 186673fbae83SNikolas Klauser#include <__cxx03/__algorithm/move_backward.h> 186773fbae83SNikolas Klauser#include <__cxx03/__algorithm/next_permutation.h> 186873fbae83SNikolas Klauser#include <__cxx03/__algorithm/none_of.h> 186973fbae83SNikolas Klauser#include <__cxx03/__algorithm/nth_element.h> 187073fbae83SNikolas Klauser#include <__cxx03/__algorithm/partial_sort.h> 187173fbae83SNikolas Klauser#include <__cxx03/__algorithm/partial_sort_copy.h> 187273fbae83SNikolas Klauser#include <__cxx03/__algorithm/partition.h> 187373fbae83SNikolas Klauser#include <__cxx03/__algorithm/partition_copy.h> 187473fbae83SNikolas Klauser#include <__cxx03/__algorithm/partition_point.h> 187573fbae83SNikolas Klauser#include <__cxx03/__algorithm/pop_heap.h> 187673fbae83SNikolas Klauser#include <__cxx03/__algorithm/prev_permutation.h> 187773fbae83SNikolas Klauser#include <__cxx03/__algorithm/push_heap.h> 187873fbae83SNikolas Klauser#include <__cxx03/__algorithm/remove.h> 187973fbae83SNikolas Klauser#include <__cxx03/__algorithm/remove_copy.h> 188073fbae83SNikolas Klauser#include <__cxx03/__algorithm/remove_copy_if.h> 188173fbae83SNikolas Klauser#include <__cxx03/__algorithm/remove_if.h> 188273fbae83SNikolas Klauser#include <__cxx03/__algorithm/replace.h> 188373fbae83SNikolas Klauser#include <__cxx03/__algorithm/replace_copy.h> 188473fbae83SNikolas Klauser#include <__cxx03/__algorithm/replace_copy_if.h> 188573fbae83SNikolas Klauser#include <__cxx03/__algorithm/replace_if.h> 188673fbae83SNikolas Klauser#include <__cxx03/__algorithm/reverse.h> 188773fbae83SNikolas Klauser#include <__cxx03/__algorithm/reverse_copy.h> 188873fbae83SNikolas Klauser#include <__cxx03/__algorithm/rotate.h> 188973fbae83SNikolas Klauser#include <__cxx03/__algorithm/rotate_copy.h> 189073fbae83SNikolas Klauser#include <__cxx03/__algorithm/search.h> 189173fbae83SNikolas Klauser#include <__cxx03/__algorithm/search_n.h> 189273fbae83SNikolas Klauser#include <__cxx03/__algorithm/set_difference.h> 189373fbae83SNikolas Klauser#include <__cxx03/__algorithm/set_intersection.h> 189473fbae83SNikolas Klauser#include <__cxx03/__algorithm/set_symmetric_difference.h> 189573fbae83SNikolas Klauser#include <__cxx03/__algorithm/set_union.h> 189673fbae83SNikolas Klauser#include <__cxx03/__algorithm/shuffle.h> 189773fbae83SNikolas Klauser#include <__cxx03/__algorithm/sort.h> 189873fbae83SNikolas Klauser#include <__cxx03/__algorithm/sort_heap.h> 189973fbae83SNikolas Klauser#include <__cxx03/__algorithm/stable_partition.h> 190073fbae83SNikolas Klauser#include <__cxx03/__algorithm/stable_sort.h> 190173fbae83SNikolas Klauser#include <__cxx03/__algorithm/swap_ranges.h> 190273fbae83SNikolas Klauser#include <__cxx03/__algorithm/transform.h> 190373fbae83SNikolas Klauser#include <__cxx03/__algorithm/unique.h> 190473fbae83SNikolas Klauser#include <__cxx03/__algorithm/unique_copy.h> 190573fbae83SNikolas Klauser#include <__cxx03/__algorithm/upper_bound.h> 1906e78f53d1SNikolas Klauser 1907e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 17 190873fbae83SNikolas Klauser# include <__cxx03/__algorithm/clamp.h> 190973fbae83SNikolas Klauser# include <__cxx03/__algorithm/for_each_n.h> 191073fbae83SNikolas Klauser# include <__cxx03/__algorithm/pstl.h> 191173fbae83SNikolas Klauser# include <__cxx03/__algorithm/sample.h> 1912e78f53d1SNikolas Klauser#endif // _LIBCPP_STD_VER >= 17 1913e78f53d1SNikolas Klauser 1914e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 20 191573fbae83SNikolas Klauser# include <__cxx03/__algorithm/in_found_result.h> 191673fbae83SNikolas Klauser# include <__cxx03/__algorithm/in_fun_result.h> 191773fbae83SNikolas Klauser# include <__cxx03/__algorithm/in_in_out_result.h> 191873fbae83SNikolas Klauser# include <__cxx03/__algorithm/in_in_result.h> 191973fbae83SNikolas Klauser# include <__cxx03/__algorithm/in_out_out_result.h> 192073fbae83SNikolas Klauser# include <__cxx03/__algorithm/in_out_result.h> 192173fbae83SNikolas Klauser# include <__cxx03/__algorithm/lexicographical_compare_three_way.h> 192273fbae83SNikolas Klauser# include <__cxx03/__algorithm/min_max_result.h> 192373fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_adjacent_find.h> 192473fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_all_of.h> 192573fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_any_of.h> 192673fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_binary_search.h> 192773fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_clamp.h> 192873fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_contains.h> 192973fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_copy.h> 193073fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_copy_backward.h> 193173fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_copy_if.h> 193273fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_copy_n.h> 193373fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_count.h> 193473fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_count_if.h> 193573fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_equal.h> 193673fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_equal_range.h> 193773fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_fill.h> 193873fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_fill_n.h> 193973fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_find.h> 194073fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_find_end.h> 194173fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_find_first_of.h> 194273fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_find_if.h> 194373fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_find_if_not.h> 194473fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_for_each.h> 194573fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_for_each_n.h> 194673fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_generate.h> 194773fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_generate_n.h> 194873fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_includes.h> 194973fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_inplace_merge.h> 195073fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_is_heap.h> 195173fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_is_heap_until.h> 195273fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_is_partitioned.h> 195373fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_is_permutation.h> 195473fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_is_sorted.h> 195573fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_is_sorted_until.h> 195673fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_lexicographical_compare.h> 195773fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_lower_bound.h> 195873fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_make_heap.h> 195973fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_max.h> 196073fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_max_element.h> 196173fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_merge.h> 196273fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_min.h> 196373fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_min_element.h> 196473fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_minmax.h> 196573fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_minmax_element.h> 196673fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_mismatch.h> 196773fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_move.h> 196873fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_move_backward.h> 196973fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_next_permutation.h> 197073fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_none_of.h> 197173fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_nth_element.h> 197273fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_partial_sort.h> 197373fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_partial_sort_copy.h> 197473fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_partition.h> 197573fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_partition_copy.h> 197673fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_partition_point.h> 197773fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_pop_heap.h> 197873fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_prev_permutation.h> 197973fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_push_heap.h> 198073fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_remove.h> 198173fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_remove_copy.h> 198273fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_remove_copy_if.h> 198373fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_remove_if.h> 198473fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_replace.h> 198573fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_replace_copy.h> 198673fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_replace_copy_if.h> 198773fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_replace_if.h> 198873fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_reverse.h> 198973fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_reverse_copy.h> 199073fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_rotate.h> 199173fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_rotate_copy.h> 199273fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_sample.h> 199373fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_search.h> 199473fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_search_n.h> 199573fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_set_difference.h> 199673fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_set_intersection.h> 199773fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_set_symmetric_difference.h> 199873fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_set_union.h> 199973fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_shuffle.h> 200073fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_sort.h> 200173fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_sort_heap.h> 200273fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_stable_partition.h> 200373fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_stable_sort.h> 200473fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_swap_ranges.h> 200573fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_transform.h> 200673fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_unique.h> 200773fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_unique_copy.h> 200873fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_upper_bound.h> 200973fbae83SNikolas Klauser# include <__cxx03/__algorithm/shift_left.h> 201073fbae83SNikolas Klauser# include <__cxx03/__algorithm/shift_right.h> 2011e78f53d1SNikolas Klauser#endif 2012e78f53d1SNikolas Klauser 2013e78f53d1SNikolas Klauser#if _LIBCPP_STD_VER >= 23 201473fbae83SNikolas Klauser# include <__cxx03/__algorithm/fold.h> 201573fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_contains_subrange.h> 201673fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_ends_with.h> 201773fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_find_last.h> 201873fbae83SNikolas Klauser# include <__cxx03/__algorithm/ranges_starts_with.h> 2019e78f53d1SNikolas Klauser#endif // _LIBCPP_STD_VER >= 23 2020e78f53d1SNikolas Klauser 202173fbae83SNikolas Klauser#include <__cxx03/version> 2022e78f53d1SNikolas Klauser 2023e78f53d1SNikolas Klauser// standard-mandated includes 2024e78f53d1SNikolas Klauser 2025e78f53d1SNikolas Klauser// [algorithm.syn] 202673fbae83SNikolas Klauser#include <__cxx03/initializer_list> 2027e78f53d1SNikolas Klauser 2028e78f53d1SNikolas Klauser#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 2029e78f53d1SNikolas Klauser# pragma GCC system_header 2030e78f53d1SNikolas Klauser#endif 2031e78f53d1SNikolas Klauser 2032e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 14 203373fbae83SNikolas Klauser# include <__cxx03/execution> 2034e78f53d1SNikolas Klauser#endif 2035e78f53d1SNikolas Klauser 2036e78f53d1SNikolas Klauser#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 203773fbae83SNikolas Klauser# include <__cxx03/atomic> 203873fbae83SNikolas Klauser# include <__cxx03/bit> 203973fbae83SNikolas Klauser# include <__cxx03/concepts> 204073fbae83SNikolas Klauser# include <__cxx03/cstdlib> 204173fbae83SNikolas Klauser# include <__cxx03/cstring> 204273fbae83SNikolas Klauser# include <__cxx03/iterator> 204373fbae83SNikolas Klauser# include <__cxx03/memory> 204473fbae83SNikolas Klauser# include <__cxx03/stdexcept> 204573fbae83SNikolas Klauser# include <__cxx03/type_traits> 204673fbae83SNikolas Klauser# include <__cxx03/utility> 2047e78f53d1SNikolas Klauser#endif 2048e78f53d1SNikolas Klauser 2049*ce777190SNikolas Klauser#endif // _LIBCPP___CXX03_ALGORITHM 2050