xref: /netbsd-src/external/gpl3/gcc.old/dist/libstdc++-v3/include/bits/algorithmfwd.h (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
11debfc3dSmrg // <algorithm> Forward declarations  -*- C++ -*-
21debfc3dSmrg 
3*8feb0f0bSmrg // Copyright (C) 2007-2020 Free Software Foundation, Inc.
41debfc3dSmrg //
51debfc3dSmrg // This file is part of the GNU ISO C++ Library.  This library is free
61debfc3dSmrg // software; you can redistribute it and/or modify it under the
71debfc3dSmrg // terms of the GNU General Public License as published by the
81debfc3dSmrg // Free Software Foundation; either version 3, or (at your option)
91debfc3dSmrg // any later version.
101debfc3dSmrg 
111debfc3dSmrg // This library is distributed in the hope that it will be useful,
121debfc3dSmrg // but WITHOUT ANY WARRANTY; without even the implied warranty of
131debfc3dSmrg // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
141debfc3dSmrg // GNU General Public License for more details.
151debfc3dSmrg 
161debfc3dSmrg // Under Section 7 of GPL version 3, you are granted additional
171debfc3dSmrg // permissions described in the GCC Runtime Library Exception, version
181debfc3dSmrg // 3.1, as published by the Free Software Foundation.
191debfc3dSmrg 
201debfc3dSmrg // You should have received a copy of the GNU General Public License and
211debfc3dSmrg // a copy of the GCC Runtime Library Exception along with this program;
221debfc3dSmrg // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
231debfc3dSmrg // <http://www.gnu.org/licenses/>.
241debfc3dSmrg 
251debfc3dSmrg /** @file bits/algorithmfwd.h
261debfc3dSmrg  *  This is an internal header file, included by other library headers.
271debfc3dSmrg  *  Do not attempt to use it directly. @headername{algorithm}
281debfc3dSmrg  */
291debfc3dSmrg 
301debfc3dSmrg #ifndef _GLIBCXX_ALGORITHMFWD_H
311debfc3dSmrg #define _GLIBCXX_ALGORITHMFWD_H 1
321debfc3dSmrg 
331debfc3dSmrg #pragma GCC system_header
341debfc3dSmrg 
351debfc3dSmrg #include <bits/c++config.h>
361debfc3dSmrg #include <bits/stl_pair.h>
371debfc3dSmrg #include <bits/stl_iterator_base_types.h>
381debfc3dSmrg #if __cplusplus >= 201103L
391debfc3dSmrg #include <initializer_list>
401debfc3dSmrg #endif
411debfc3dSmrg 
_GLIBCXX_VISIBILITY(default)421debfc3dSmrg namespace std _GLIBCXX_VISIBILITY(default)
431debfc3dSmrg {
441debfc3dSmrg _GLIBCXX_BEGIN_NAMESPACE_VERSION
451debfc3dSmrg 
461debfc3dSmrg   /*
471debfc3dSmrg     adjacent_find
481debfc3dSmrg     all_of (C++11)
491debfc3dSmrg     any_of (C++11)
501debfc3dSmrg     binary_search
511debfc3dSmrg     clamp (C++17)
521debfc3dSmrg     copy
531debfc3dSmrg     copy_backward
541debfc3dSmrg     copy_if (C++11)
551debfc3dSmrg     copy_n (C++11)
561debfc3dSmrg     count
571debfc3dSmrg     count_if
581debfc3dSmrg     equal
591debfc3dSmrg     equal_range
601debfc3dSmrg     fill
611debfc3dSmrg     fill_n
621debfc3dSmrg     find
631debfc3dSmrg     find_end
641debfc3dSmrg     find_first_of
651debfc3dSmrg     find_if
661debfc3dSmrg     find_if_not (C++11)
671debfc3dSmrg     for_each
681debfc3dSmrg     generate
691debfc3dSmrg     generate_n
701debfc3dSmrg     includes
711debfc3dSmrg     inplace_merge
721debfc3dSmrg     is_heap (C++11)
731debfc3dSmrg     is_heap_until (C++11)
741debfc3dSmrg     is_partitioned (C++11)
751debfc3dSmrg     is_sorted (C++11)
761debfc3dSmrg     is_sorted_until (C++11)
771debfc3dSmrg     iter_swap
781debfc3dSmrg     lexicographical_compare
791debfc3dSmrg     lower_bound
801debfc3dSmrg     make_heap
811debfc3dSmrg     max
821debfc3dSmrg     max_element
831debfc3dSmrg     merge
841debfc3dSmrg     min
851debfc3dSmrg     min_element
861debfc3dSmrg     minmax (C++11)
871debfc3dSmrg     minmax_element (C++11)
881debfc3dSmrg     mismatch
891debfc3dSmrg     next_permutation
901debfc3dSmrg     none_of (C++11)
911debfc3dSmrg     nth_element
921debfc3dSmrg     partial_sort
931debfc3dSmrg     partial_sort_copy
941debfc3dSmrg     partition
951debfc3dSmrg     partition_copy (C++11)
961debfc3dSmrg     partition_point (C++11)
971debfc3dSmrg     pop_heap
981debfc3dSmrg     prev_permutation
991debfc3dSmrg     push_heap
1001debfc3dSmrg     random_shuffle
1011debfc3dSmrg     remove
1021debfc3dSmrg     remove_copy
1031debfc3dSmrg     remove_copy_if
1041debfc3dSmrg     remove_if
1051debfc3dSmrg     replace
1061debfc3dSmrg     replace_copy
1071debfc3dSmrg     replace_copy_if
1081debfc3dSmrg     replace_if
1091debfc3dSmrg     reverse
1101debfc3dSmrg     reverse_copy
1111debfc3dSmrg     rotate
1121debfc3dSmrg     rotate_copy
1131debfc3dSmrg     search
1141debfc3dSmrg     search_n
1151debfc3dSmrg     set_difference
1161debfc3dSmrg     set_intersection
1171debfc3dSmrg     set_symmetric_difference
1181debfc3dSmrg     set_union
1191debfc3dSmrg     shuffle (C++11)
1201debfc3dSmrg     sort
1211debfc3dSmrg     sort_heap
1221debfc3dSmrg     stable_partition
1231debfc3dSmrg     stable_sort
1241debfc3dSmrg     swap
1251debfc3dSmrg     swap_ranges
1261debfc3dSmrg     transform
1271debfc3dSmrg     unique
1281debfc3dSmrg     unique_copy
1291debfc3dSmrg     upper_bound
1301debfc3dSmrg   */
1311debfc3dSmrg 
1321debfc3dSmrg   /**
1331debfc3dSmrg    * @defgroup algorithms Algorithms
1341debfc3dSmrg    *
1351debfc3dSmrg    * Components for performing algorithmic operations. Includes
1361debfc3dSmrg    * non-modifying sequence, modifying (mutating) sequence, sorting,
1371debfc3dSmrg    * searching, merge, partition, heap, set, minima, maxima, and
1381debfc3dSmrg    * permutation operations.
1391debfc3dSmrg    */
1401debfc3dSmrg 
1411debfc3dSmrg   /**
1421debfc3dSmrg    * @defgroup mutating_algorithms Mutating
1431debfc3dSmrg    * @ingroup algorithms
1441debfc3dSmrg    */
1451debfc3dSmrg 
1461debfc3dSmrg   /**
1471debfc3dSmrg    * @defgroup non_mutating_algorithms Non-Mutating
1481debfc3dSmrg    * @ingroup algorithms
1491debfc3dSmrg    */
1501debfc3dSmrg 
1511debfc3dSmrg   /**
1521debfc3dSmrg    * @defgroup sorting_algorithms Sorting
1531debfc3dSmrg    * @ingroup algorithms
1541debfc3dSmrg    */
1551debfc3dSmrg 
1561debfc3dSmrg   /**
157c0a68be4Smrg    * @defgroup set_algorithms Set Operations
1581debfc3dSmrg    * @ingroup sorting_algorithms
1591debfc3dSmrg    *
1601debfc3dSmrg    * These algorithms are common set operations performed on sequences
1611debfc3dSmrg    * that are already sorted. The number of comparisons will be
1621debfc3dSmrg    * linear.
1631debfc3dSmrg    */
1641debfc3dSmrg 
1651debfc3dSmrg   /**
1661debfc3dSmrg    * @defgroup binary_search_algorithms Binary Search
1671debfc3dSmrg    * @ingroup sorting_algorithms
1681debfc3dSmrg    *
1691debfc3dSmrg    * These algorithms are variations of a classic binary search, and
1701debfc3dSmrg    * all assume that the sequence being searched is already sorted.
1711debfc3dSmrg    *
1721debfc3dSmrg    * The number of comparisons will be logarithmic (and as few as
1731debfc3dSmrg    * possible).  The number of steps through the sequence will be
1741debfc3dSmrg    * logarithmic for random-access iterators (e.g., pointers), and
1751debfc3dSmrg    * linear otherwise.
1761debfc3dSmrg    *
1771debfc3dSmrg    * The LWG has passed Defect Report 270, which notes: <em>The
1781debfc3dSmrg    * proposed resolution reinterprets binary search. Instead of
1791debfc3dSmrg    * thinking about searching for a value in a sorted range, we view
1801debfc3dSmrg    * that as an important special case of a more general algorithm:
1811debfc3dSmrg    * searching for the partition point in a partitioned range.  We
1821debfc3dSmrg    * also add a guarantee that the old wording did not: we ensure that
1831debfc3dSmrg    * the upper bound is no earlier than the lower bound, that the pair
1841debfc3dSmrg    * returned by equal_range is a valid range, and that the first part
1851debfc3dSmrg    * of that pair is the lower bound.</em>
1861debfc3dSmrg    *
1871debfc3dSmrg    * The actual effect of the first sentence is that a comparison
1881debfc3dSmrg    * functor passed by the user doesn't necessarily need to induce a
1891debfc3dSmrg    * strict weak ordering relation.  Rather, it partitions the range.
1901debfc3dSmrg    */
1911debfc3dSmrg 
1921debfc3dSmrg   // adjacent_find
1931debfc3dSmrg 
194*8feb0f0bSmrg #if __cplusplus > 201703L
195*8feb0f0bSmrg #  define __cpp_lib_constexpr_algorithms 201806L
196*8feb0f0bSmrg #endif
197*8feb0f0bSmrg 
1981debfc3dSmrg #if __cplusplus >= 201103L
1991debfc3dSmrg   template<typename _IIter, typename _Predicate>
200*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2011debfc3dSmrg     bool
2021debfc3dSmrg     all_of(_IIter, _IIter, _Predicate);
2031debfc3dSmrg 
2041debfc3dSmrg   template<typename _IIter, typename _Predicate>
205*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2061debfc3dSmrg     bool
2071debfc3dSmrg     any_of(_IIter, _IIter, _Predicate);
2081debfc3dSmrg #endif
2091debfc3dSmrg 
2101debfc3dSmrg   template<typename _FIter, typename _Tp>
211*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2121debfc3dSmrg     bool
2131debfc3dSmrg     binary_search(_FIter, _FIter, const _Tp&);
2141debfc3dSmrg 
2151debfc3dSmrg   template<typename _FIter, typename _Tp, typename _Compare>
216*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2171debfc3dSmrg     bool
2181debfc3dSmrg     binary_search(_FIter, _FIter, const _Tp&, _Compare);
2191debfc3dSmrg 
2201debfc3dSmrg #if __cplusplus > 201402L
2211debfc3dSmrg   template<typename _Tp>
2221debfc3dSmrg     _GLIBCXX14_CONSTEXPR
2231debfc3dSmrg     const _Tp&
2241debfc3dSmrg     clamp(const _Tp&, const _Tp&, const _Tp&);
2251debfc3dSmrg 
2261debfc3dSmrg   template<typename _Tp, typename _Compare>
2271debfc3dSmrg     _GLIBCXX14_CONSTEXPR
2281debfc3dSmrg     const _Tp&
2291debfc3dSmrg     clamp(const _Tp&, const _Tp&, const _Tp&, _Compare);
2301debfc3dSmrg #endif
2311debfc3dSmrg 
2321debfc3dSmrg   template<typename _IIter, typename _OIter>
233*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2341debfc3dSmrg     _OIter
2351debfc3dSmrg     copy(_IIter, _IIter, _OIter);
2361debfc3dSmrg 
2371debfc3dSmrg   template<typename _BIter1, typename _BIter2>
238*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2391debfc3dSmrg     _BIter2
2401debfc3dSmrg     copy_backward(_BIter1, _BIter1, _BIter2);
2411debfc3dSmrg 
2421debfc3dSmrg #if __cplusplus >= 201103L
2431debfc3dSmrg   template<typename _IIter, typename _OIter, typename _Predicate>
244*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2451debfc3dSmrg     _OIter
2461debfc3dSmrg     copy_if(_IIter, _IIter, _OIter, _Predicate);
2471debfc3dSmrg 
2481debfc3dSmrg   template<typename _IIter, typename _Size, typename _OIter>
249*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2501debfc3dSmrg     _OIter
2511debfc3dSmrg     copy_n(_IIter, _Size, _OIter);
2521debfc3dSmrg #endif
2531debfc3dSmrg 
2541debfc3dSmrg   // count
2551debfc3dSmrg   // count_if
2561debfc3dSmrg 
2571debfc3dSmrg   template<typename _FIter, typename _Tp>
258*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2591debfc3dSmrg     pair<_FIter, _FIter>
2601debfc3dSmrg     equal_range(_FIter, _FIter, const _Tp&);
2611debfc3dSmrg 
2621debfc3dSmrg   template<typename _FIter, typename _Tp, typename _Compare>
263*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2641debfc3dSmrg     pair<_FIter, _FIter>
2651debfc3dSmrg     equal_range(_FIter, _FIter, const _Tp&, _Compare);
2661debfc3dSmrg 
2671debfc3dSmrg   template<typename _FIter, typename _Tp>
268*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2691debfc3dSmrg     void
2701debfc3dSmrg     fill(_FIter, _FIter, const _Tp&);
2711debfc3dSmrg 
2721debfc3dSmrg   template<typename _OIter, typename _Size, typename _Tp>
273*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2741debfc3dSmrg     _OIter
2751debfc3dSmrg     fill_n(_OIter, _Size, const _Tp&);
2761debfc3dSmrg 
2771debfc3dSmrg   // find
2781debfc3dSmrg 
2791debfc3dSmrg   template<typename _FIter1, typename _FIter2>
280*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2811debfc3dSmrg     _FIter1
2821debfc3dSmrg     find_end(_FIter1, _FIter1, _FIter2, _FIter2);
2831debfc3dSmrg 
2841debfc3dSmrg   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
285*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2861debfc3dSmrg     _FIter1
2871debfc3dSmrg     find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
2881debfc3dSmrg 
2891debfc3dSmrg   // find_first_of
2901debfc3dSmrg   // find_if
2911debfc3dSmrg 
2921debfc3dSmrg #if __cplusplus >= 201103L
2931debfc3dSmrg   template<typename _IIter, typename _Predicate>
294*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
2951debfc3dSmrg     _IIter
2961debfc3dSmrg     find_if_not(_IIter, _IIter, _Predicate);
2971debfc3dSmrg #endif
2981debfc3dSmrg 
2991debfc3dSmrg   // for_each
3001debfc3dSmrg   // generate
3011debfc3dSmrg   // generate_n
3021debfc3dSmrg 
3031debfc3dSmrg   template<typename _IIter1, typename _IIter2>
304*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3051debfc3dSmrg     bool
3061debfc3dSmrg     includes(_IIter1, _IIter1, _IIter2, _IIter2);
3071debfc3dSmrg 
3081debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _Compare>
309*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3101debfc3dSmrg     bool
3111debfc3dSmrg     includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
3121debfc3dSmrg 
3131debfc3dSmrg   template<typename _BIter>
3141debfc3dSmrg     void
3151debfc3dSmrg     inplace_merge(_BIter, _BIter, _BIter);
3161debfc3dSmrg 
3171debfc3dSmrg   template<typename _BIter, typename _Compare>
3181debfc3dSmrg     void
3191debfc3dSmrg     inplace_merge(_BIter, _BIter, _BIter, _Compare);
3201debfc3dSmrg 
3211debfc3dSmrg #if __cplusplus >= 201103L
3221debfc3dSmrg   template<typename _RAIter>
323*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3241debfc3dSmrg     bool
3251debfc3dSmrg     is_heap(_RAIter, _RAIter);
3261debfc3dSmrg 
3271debfc3dSmrg   template<typename _RAIter, typename _Compare>
328*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3291debfc3dSmrg     bool
3301debfc3dSmrg     is_heap(_RAIter, _RAIter, _Compare);
3311debfc3dSmrg 
3321debfc3dSmrg   template<typename _RAIter>
333*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3341debfc3dSmrg     _RAIter
3351debfc3dSmrg     is_heap_until(_RAIter, _RAIter);
3361debfc3dSmrg 
3371debfc3dSmrg   template<typename _RAIter, typename _Compare>
338*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3391debfc3dSmrg     _RAIter
3401debfc3dSmrg     is_heap_until(_RAIter, _RAIter, _Compare);
3411debfc3dSmrg 
3421debfc3dSmrg   template<typename _IIter, typename _Predicate>
343*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3441debfc3dSmrg     bool
3451debfc3dSmrg     is_partitioned(_IIter, _IIter, _Predicate);
3461debfc3dSmrg 
3471debfc3dSmrg   template<typename _FIter1, typename _FIter2>
348*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3491debfc3dSmrg     bool
3501debfc3dSmrg     is_permutation(_FIter1, _FIter1, _FIter2);
3511debfc3dSmrg 
3521debfc3dSmrg   template<typename _FIter1, typename _FIter2,
3531debfc3dSmrg 	   typename _BinaryPredicate>
354*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3551debfc3dSmrg     bool
3561debfc3dSmrg     is_permutation(_FIter1, _FIter1, _FIter2, _BinaryPredicate);
3571debfc3dSmrg 
3581debfc3dSmrg   template<typename _FIter>
359*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3601debfc3dSmrg     bool
3611debfc3dSmrg     is_sorted(_FIter, _FIter);
3621debfc3dSmrg 
3631debfc3dSmrg   template<typename _FIter, typename _Compare>
364*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3651debfc3dSmrg     bool
3661debfc3dSmrg     is_sorted(_FIter, _FIter, _Compare);
3671debfc3dSmrg 
3681debfc3dSmrg   template<typename _FIter>
369*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3701debfc3dSmrg     _FIter
3711debfc3dSmrg     is_sorted_until(_FIter, _FIter);
3721debfc3dSmrg 
3731debfc3dSmrg   template<typename _FIter, typename _Compare>
374*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3751debfc3dSmrg     _FIter
3761debfc3dSmrg     is_sorted_until(_FIter, _FIter, _Compare);
3771debfc3dSmrg #endif
3781debfc3dSmrg 
3791debfc3dSmrg   template<typename _FIter1, typename _FIter2>
380*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3811debfc3dSmrg     void
3821debfc3dSmrg     iter_swap(_FIter1, _FIter2);
3831debfc3dSmrg 
3841debfc3dSmrg   template<typename _FIter, typename _Tp>
385*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3861debfc3dSmrg     _FIter
3871debfc3dSmrg     lower_bound(_FIter, _FIter, const _Tp&);
3881debfc3dSmrg 
3891debfc3dSmrg   template<typename _FIter, typename _Tp, typename _Compare>
390*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3911debfc3dSmrg     _FIter
3921debfc3dSmrg     lower_bound(_FIter, _FIter, const _Tp&, _Compare);
3931debfc3dSmrg 
3941debfc3dSmrg   template<typename _RAIter>
395*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
3961debfc3dSmrg     void
3971debfc3dSmrg     make_heap(_RAIter, _RAIter);
3981debfc3dSmrg 
3991debfc3dSmrg   template<typename _RAIter, typename _Compare>
400*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
4011debfc3dSmrg     void
4021debfc3dSmrg     make_heap(_RAIter, _RAIter, _Compare);
4031debfc3dSmrg 
4041debfc3dSmrg   template<typename _Tp>
4051debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4061debfc3dSmrg     const _Tp&
4071debfc3dSmrg     max(const _Tp&, const _Tp&);
4081debfc3dSmrg 
4091debfc3dSmrg   template<typename _Tp, typename _Compare>
4101debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4111debfc3dSmrg     const _Tp&
4121debfc3dSmrg     max(const _Tp&, const _Tp&, _Compare);
4131debfc3dSmrg 
4141debfc3dSmrg   // max_element
4151debfc3dSmrg   // merge
4161debfc3dSmrg 
4171debfc3dSmrg   template<typename _Tp>
4181debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4191debfc3dSmrg     const _Tp&
4201debfc3dSmrg     min(const _Tp&, const _Tp&);
4211debfc3dSmrg 
4221debfc3dSmrg   template<typename _Tp, typename _Compare>
4231debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4241debfc3dSmrg     const _Tp&
4251debfc3dSmrg     min(const _Tp&, const _Tp&, _Compare);
4261debfc3dSmrg 
4271debfc3dSmrg   // min_element
4281debfc3dSmrg 
4291debfc3dSmrg #if __cplusplus >= 201103L
4301debfc3dSmrg   template<typename _Tp>
4311debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4321debfc3dSmrg     pair<const _Tp&, const _Tp&>
4331debfc3dSmrg     minmax(const _Tp&, const _Tp&);
4341debfc3dSmrg 
4351debfc3dSmrg   template<typename _Tp, typename _Compare>
4361debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4371debfc3dSmrg     pair<const _Tp&, const _Tp&>
4381debfc3dSmrg     minmax(const _Tp&, const _Tp&, _Compare);
4391debfc3dSmrg 
4401debfc3dSmrg   template<typename _FIter>
4411debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4421debfc3dSmrg     pair<_FIter, _FIter>
4431debfc3dSmrg     minmax_element(_FIter, _FIter);
4441debfc3dSmrg 
4451debfc3dSmrg   template<typename _FIter, typename _Compare>
4461debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4471debfc3dSmrg     pair<_FIter, _FIter>
4481debfc3dSmrg     minmax_element(_FIter, _FIter, _Compare);
4491debfc3dSmrg 
4501debfc3dSmrg   template<typename _Tp>
4511debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4521debfc3dSmrg     _Tp
4531debfc3dSmrg     min(initializer_list<_Tp>);
4541debfc3dSmrg 
4551debfc3dSmrg   template<typename _Tp, typename _Compare>
4561debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4571debfc3dSmrg     _Tp
4581debfc3dSmrg     min(initializer_list<_Tp>, _Compare);
4591debfc3dSmrg 
4601debfc3dSmrg   template<typename _Tp>
4611debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4621debfc3dSmrg     _Tp
4631debfc3dSmrg     max(initializer_list<_Tp>);
4641debfc3dSmrg 
4651debfc3dSmrg   template<typename _Tp, typename _Compare>
4661debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4671debfc3dSmrg     _Tp
4681debfc3dSmrg     max(initializer_list<_Tp>, _Compare);
4691debfc3dSmrg 
4701debfc3dSmrg   template<typename _Tp>
4711debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4721debfc3dSmrg     pair<_Tp, _Tp>
4731debfc3dSmrg     minmax(initializer_list<_Tp>);
4741debfc3dSmrg 
4751debfc3dSmrg   template<typename _Tp, typename _Compare>
4761debfc3dSmrg     _GLIBCXX14_CONSTEXPR
4771debfc3dSmrg     pair<_Tp, _Tp>
4781debfc3dSmrg     minmax(initializer_list<_Tp>, _Compare);
4791debfc3dSmrg #endif
4801debfc3dSmrg 
4811debfc3dSmrg   // mismatch
4821debfc3dSmrg 
4831debfc3dSmrg   template<typename _BIter>
484*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
4851debfc3dSmrg     bool
4861debfc3dSmrg     next_permutation(_BIter, _BIter);
4871debfc3dSmrg 
4881debfc3dSmrg   template<typename _BIter, typename _Compare>
489*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
4901debfc3dSmrg     bool
4911debfc3dSmrg     next_permutation(_BIter, _BIter, _Compare);
4921debfc3dSmrg 
4931debfc3dSmrg #if __cplusplus >= 201103L
4941debfc3dSmrg   template<typename _IIter, typename _Predicate>
495*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
4961debfc3dSmrg     bool
4971debfc3dSmrg     none_of(_IIter, _IIter, _Predicate);
4981debfc3dSmrg #endif
4991debfc3dSmrg 
5001debfc3dSmrg   // nth_element
5011debfc3dSmrg   // partial_sort
5021debfc3dSmrg 
5031debfc3dSmrg   template<typename _IIter, typename _RAIter>
504*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5051debfc3dSmrg     _RAIter
5061debfc3dSmrg     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
5071debfc3dSmrg 
5081debfc3dSmrg   template<typename _IIter, typename _RAIter, typename _Compare>
509*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5101debfc3dSmrg     _RAIter
5111debfc3dSmrg     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
5121debfc3dSmrg 
5131debfc3dSmrg   // partition
5141debfc3dSmrg 
5151debfc3dSmrg #if __cplusplus >= 201103L
5161debfc3dSmrg   template<typename _IIter, typename _OIter1,
5171debfc3dSmrg 	   typename _OIter2, typename _Predicate>
518*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5191debfc3dSmrg     pair<_OIter1, _OIter2>
5201debfc3dSmrg     partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
5211debfc3dSmrg 
5221debfc3dSmrg   template<typename _FIter, typename _Predicate>
523*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5241debfc3dSmrg     _FIter
5251debfc3dSmrg     partition_point(_FIter, _FIter, _Predicate);
5261debfc3dSmrg #endif
5271debfc3dSmrg 
5281debfc3dSmrg   template<typename _RAIter>
529*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5301debfc3dSmrg     void
5311debfc3dSmrg     pop_heap(_RAIter, _RAIter);
5321debfc3dSmrg 
5331debfc3dSmrg   template<typename _RAIter, typename _Compare>
534*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5351debfc3dSmrg     void
5361debfc3dSmrg     pop_heap(_RAIter, _RAIter, _Compare);
5371debfc3dSmrg 
5381debfc3dSmrg   template<typename _BIter>
539*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5401debfc3dSmrg     bool
5411debfc3dSmrg     prev_permutation(_BIter, _BIter);
5421debfc3dSmrg 
5431debfc3dSmrg   template<typename _BIter, typename _Compare>
544*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5451debfc3dSmrg     bool
5461debfc3dSmrg     prev_permutation(_BIter, _BIter, _Compare);
5471debfc3dSmrg 
5481debfc3dSmrg   template<typename _RAIter>
549*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5501debfc3dSmrg     void
5511debfc3dSmrg     push_heap(_RAIter, _RAIter);
5521debfc3dSmrg 
5531debfc3dSmrg   template<typename _RAIter, typename _Compare>
554*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5551debfc3dSmrg     void
5561debfc3dSmrg     push_heap(_RAIter, _RAIter, _Compare);
5571debfc3dSmrg 
5581debfc3dSmrg   // random_shuffle
5591debfc3dSmrg 
5601debfc3dSmrg   template<typename _FIter, typename _Tp>
561*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5621debfc3dSmrg     _FIter
5631debfc3dSmrg     remove(_FIter, _FIter, const _Tp&);
5641debfc3dSmrg 
5651debfc3dSmrg   template<typename _FIter, typename _Predicate>
566*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5671debfc3dSmrg     _FIter
5681debfc3dSmrg     remove_if(_FIter, _FIter, _Predicate);
5691debfc3dSmrg 
5701debfc3dSmrg   template<typename _IIter, typename _OIter, typename _Tp>
571*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5721debfc3dSmrg     _OIter
5731debfc3dSmrg     remove_copy(_IIter, _IIter, _OIter, const _Tp&);
5741debfc3dSmrg 
5751debfc3dSmrg   template<typename _IIter, typename _OIter, typename _Predicate>
576*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5771debfc3dSmrg     _OIter
5781debfc3dSmrg     remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
5791debfc3dSmrg 
5801debfc3dSmrg   // replace
5811debfc3dSmrg 
5821debfc3dSmrg   template<typename _IIter, typename _OIter, typename _Tp>
583*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5841debfc3dSmrg     _OIter
5851debfc3dSmrg     replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
5861debfc3dSmrg 
5871debfc3dSmrg   template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
588*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5891debfc3dSmrg     _OIter
5901debfc3dSmrg     replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
5911debfc3dSmrg 
5921debfc3dSmrg   // replace_if
5931debfc3dSmrg 
5941debfc3dSmrg   template<typename _BIter>
595*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
5961debfc3dSmrg     void
5971debfc3dSmrg     reverse(_BIter, _BIter);
5981debfc3dSmrg 
5991debfc3dSmrg   template<typename _BIter, typename _OIter>
600*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6011debfc3dSmrg     _OIter
6021debfc3dSmrg     reverse_copy(_BIter, _BIter, _OIter);
6031debfc3dSmrg 
6041debfc3dSmrg   inline namespace _V2
6051debfc3dSmrg   {
6061debfc3dSmrg     template<typename _FIter>
607*8feb0f0bSmrg       _GLIBCXX20_CONSTEXPR
6081debfc3dSmrg       _FIter
6091debfc3dSmrg       rotate(_FIter, _FIter, _FIter);
6101debfc3dSmrg   }
6111debfc3dSmrg 
6121debfc3dSmrg   template<typename _FIter, typename _OIter>
613*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6141debfc3dSmrg     _OIter
6151debfc3dSmrg     rotate_copy(_FIter, _FIter, _FIter, _OIter);
6161debfc3dSmrg 
6171debfc3dSmrg   // search
6181debfc3dSmrg   // search_n
6191debfc3dSmrg   // set_difference
6201debfc3dSmrg   // set_intersection
6211debfc3dSmrg   // set_symmetric_difference
6221debfc3dSmrg   // set_union
6231debfc3dSmrg 
6241debfc3dSmrg #if (__cplusplus >= 201103L) && defined(_GLIBCXX_USE_C99_STDINT_TR1)
6251debfc3dSmrg   template<typename _RAIter, typename _UGenerator>
6261debfc3dSmrg     void
6271debfc3dSmrg     shuffle(_RAIter, _RAIter, _UGenerator&&);
6281debfc3dSmrg #endif
6291debfc3dSmrg 
6301debfc3dSmrg   template<typename _RAIter>
631*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6321debfc3dSmrg     void
6331debfc3dSmrg     sort_heap(_RAIter, _RAIter);
6341debfc3dSmrg 
6351debfc3dSmrg   template<typename _RAIter, typename _Compare>
636*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6371debfc3dSmrg     void
6381debfc3dSmrg     sort_heap(_RAIter, _RAIter, _Compare);
6391debfc3dSmrg 
6401debfc3dSmrg   template<typename _BIter, typename _Predicate>
6411debfc3dSmrg     _BIter
6421debfc3dSmrg     stable_partition(_BIter, _BIter, _Predicate);
6431debfc3dSmrg 
6441debfc3dSmrg #if __cplusplus < 201103L
6451debfc3dSmrg   // For C++11 swap() is declared in <type_traits>.
6461debfc3dSmrg 
6471debfc3dSmrg   template<typename _Tp, size_t _Nm>
648*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6491debfc3dSmrg     inline void
6501debfc3dSmrg     swap(_Tp& __a, _Tp& __b);
6511debfc3dSmrg 
6521debfc3dSmrg   template<typename _Tp, size_t _Nm>
653*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6541debfc3dSmrg     inline void
6551debfc3dSmrg     swap(_Tp (&__a)[_Nm], _Tp (&__b)[_Nm]);
6561debfc3dSmrg #endif
6571debfc3dSmrg 
6581debfc3dSmrg   template<typename _FIter1, typename _FIter2>
659*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6601debfc3dSmrg     _FIter2
6611debfc3dSmrg     swap_ranges(_FIter1, _FIter1, _FIter2);
6621debfc3dSmrg 
6631debfc3dSmrg   // transform
6641debfc3dSmrg 
6651debfc3dSmrg   template<typename _FIter>
666*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6671debfc3dSmrg     _FIter
6681debfc3dSmrg     unique(_FIter, _FIter);
6691debfc3dSmrg 
6701debfc3dSmrg   template<typename _FIter, typename _BinaryPredicate>
671*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6721debfc3dSmrg     _FIter
6731debfc3dSmrg     unique(_FIter, _FIter, _BinaryPredicate);
6741debfc3dSmrg 
6751debfc3dSmrg   // unique_copy
6761debfc3dSmrg 
6771debfc3dSmrg   template<typename _FIter, typename _Tp>
678*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6791debfc3dSmrg     _FIter
6801debfc3dSmrg     upper_bound(_FIter, _FIter, const _Tp&);
6811debfc3dSmrg 
6821debfc3dSmrg   template<typename _FIter, typename _Tp, typename _Compare>
683*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6841debfc3dSmrg     _FIter
6851debfc3dSmrg     upper_bound(_FIter, _FIter, const _Tp&, _Compare);
6861debfc3dSmrg 
6871debfc3dSmrg _GLIBCXX_BEGIN_NAMESPACE_ALGO
6881debfc3dSmrg 
6891debfc3dSmrg   template<typename _FIter>
690*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6911debfc3dSmrg     _FIter
6921debfc3dSmrg     adjacent_find(_FIter, _FIter);
6931debfc3dSmrg 
6941debfc3dSmrg   template<typename _FIter, typename _BinaryPredicate>
695*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
6961debfc3dSmrg     _FIter
6971debfc3dSmrg     adjacent_find(_FIter, _FIter, _BinaryPredicate);
6981debfc3dSmrg 
6991debfc3dSmrg   template<typename _IIter, typename _Tp>
700*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7011debfc3dSmrg     typename iterator_traits<_IIter>::difference_type
7021debfc3dSmrg     count(_IIter, _IIter, const _Tp&);
7031debfc3dSmrg 
7041debfc3dSmrg   template<typename _IIter, typename _Predicate>
705*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7061debfc3dSmrg     typename iterator_traits<_IIter>::difference_type
7071debfc3dSmrg     count_if(_IIter, _IIter, _Predicate);
7081debfc3dSmrg 
7091debfc3dSmrg   template<typename _IIter1, typename _IIter2>
710*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7111debfc3dSmrg     bool
7121debfc3dSmrg     equal(_IIter1, _IIter1, _IIter2);
7131debfc3dSmrg 
7141debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
715*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7161debfc3dSmrg     bool
7171debfc3dSmrg     equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
7181debfc3dSmrg 
7191debfc3dSmrg   template<typename _IIter, typename _Tp>
720*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7211debfc3dSmrg     _IIter
7221debfc3dSmrg     find(_IIter, _IIter, const _Tp&);
7231debfc3dSmrg 
7241debfc3dSmrg   template<typename _FIter1, typename _FIter2>
725*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7261debfc3dSmrg     _FIter1
7271debfc3dSmrg     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
7281debfc3dSmrg 
7291debfc3dSmrg   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
730*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7311debfc3dSmrg     _FIter1
7321debfc3dSmrg     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
7331debfc3dSmrg 
7341debfc3dSmrg   template<typename _IIter, typename _Predicate>
735*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7361debfc3dSmrg     _IIter
7371debfc3dSmrg     find_if(_IIter, _IIter, _Predicate);
7381debfc3dSmrg 
7391debfc3dSmrg   template<typename _IIter, typename _Funct>
740*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7411debfc3dSmrg     _Funct
7421debfc3dSmrg     for_each(_IIter, _IIter, _Funct);
7431debfc3dSmrg 
7441debfc3dSmrg   template<typename _FIter, typename _Generator>
745*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7461debfc3dSmrg     void
7471debfc3dSmrg     generate(_FIter, _FIter, _Generator);
7481debfc3dSmrg 
7491debfc3dSmrg   template<typename _OIter, typename _Size, typename _Generator>
750*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7511debfc3dSmrg     _OIter
7521debfc3dSmrg     generate_n(_OIter, _Size, _Generator);
7531debfc3dSmrg 
7541debfc3dSmrg   template<typename _IIter1, typename _IIter2>
755*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7561debfc3dSmrg     bool
7571debfc3dSmrg     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
7581debfc3dSmrg 
7591debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _Compare>
760*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7611debfc3dSmrg     bool
7621debfc3dSmrg     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
7631debfc3dSmrg 
7641debfc3dSmrg   template<typename _FIter>
7651debfc3dSmrg     _GLIBCXX14_CONSTEXPR
7661debfc3dSmrg     _FIter
7671debfc3dSmrg     max_element(_FIter, _FIter);
7681debfc3dSmrg 
7691debfc3dSmrg   template<typename _FIter, typename _Compare>
7701debfc3dSmrg     _GLIBCXX14_CONSTEXPR
7711debfc3dSmrg     _FIter
7721debfc3dSmrg     max_element(_FIter, _FIter, _Compare);
7731debfc3dSmrg 
7741debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
775*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7761debfc3dSmrg     _OIter
7771debfc3dSmrg     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
7781debfc3dSmrg 
7791debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
7801debfc3dSmrg 	   typename _Compare>
781*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7821debfc3dSmrg     _OIter
7831debfc3dSmrg     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
7841debfc3dSmrg 
7851debfc3dSmrg   template<typename _FIter>
7861debfc3dSmrg     _GLIBCXX14_CONSTEXPR
7871debfc3dSmrg     _FIter
7881debfc3dSmrg     min_element(_FIter, _FIter);
7891debfc3dSmrg 
7901debfc3dSmrg   template<typename _FIter, typename _Compare>
7911debfc3dSmrg     _GLIBCXX14_CONSTEXPR
7921debfc3dSmrg     _FIter
7931debfc3dSmrg     min_element(_FIter, _FIter, _Compare);
7941debfc3dSmrg 
7951debfc3dSmrg   template<typename _IIter1, typename _IIter2>
796*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
7971debfc3dSmrg     pair<_IIter1, _IIter2>
7981debfc3dSmrg     mismatch(_IIter1, _IIter1, _IIter2);
7991debfc3dSmrg 
8001debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
801*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8021debfc3dSmrg     pair<_IIter1, _IIter2>
8031debfc3dSmrg     mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
8041debfc3dSmrg 
8051debfc3dSmrg   template<typename _RAIter>
806*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8071debfc3dSmrg     void
8081debfc3dSmrg     nth_element(_RAIter, _RAIter, _RAIter);
8091debfc3dSmrg 
8101debfc3dSmrg   template<typename _RAIter, typename _Compare>
811*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8121debfc3dSmrg     void
8131debfc3dSmrg     nth_element(_RAIter, _RAIter, _RAIter, _Compare);
8141debfc3dSmrg 
8151debfc3dSmrg   template<typename _RAIter>
816*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8171debfc3dSmrg     void
8181debfc3dSmrg     partial_sort(_RAIter, _RAIter, _RAIter);
8191debfc3dSmrg 
8201debfc3dSmrg   template<typename _RAIter, typename _Compare>
821*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8221debfc3dSmrg     void
8231debfc3dSmrg     partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
8241debfc3dSmrg 
8251debfc3dSmrg   template<typename _BIter, typename _Predicate>
826*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8271debfc3dSmrg     _BIter
8281debfc3dSmrg     partition(_BIter, _BIter, _Predicate);
8291debfc3dSmrg 
8301debfc3dSmrg   template<typename _RAIter>
8311debfc3dSmrg     void
8321debfc3dSmrg     random_shuffle(_RAIter, _RAIter);
8331debfc3dSmrg 
8341debfc3dSmrg   template<typename _RAIter, typename _Generator>
8351debfc3dSmrg     void
8361debfc3dSmrg     random_shuffle(_RAIter, _RAIter,
8371debfc3dSmrg #if __cplusplus >= 201103L
8381debfc3dSmrg 		   _Generator&&);
8391debfc3dSmrg #else
8401debfc3dSmrg 		   _Generator&);
8411debfc3dSmrg #endif
8421debfc3dSmrg 
8431debfc3dSmrg   template<typename _FIter, typename _Tp>
844*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8451debfc3dSmrg     void
8461debfc3dSmrg     replace(_FIter, _FIter, const _Tp&, const _Tp&);
8471debfc3dSmrg 
8481debfc3dSmrg   template<typename _FIter, typename _Predicate, typename _Tp>
849*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8501debfc3dSmrg     void
8511debfc3dSmrg     replace_if(_FIter, _FIter, _Predicate, const _Tp&);
8521debfc3dSmrg 
8531debfc3dSmrg   template<typename _FIter1, typename _FIter2>
854*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8551debfc3dSmrg     _FIter1
8561debfc3dSmrg     search(_FIter1, _FIter1, _FIter2, _FIter2);
8571debfc3dSmrg 
8581debfc3dSmrg   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
859*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8601debfc3dSmrg     _FIter1
8611debfc3dSmrg     search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
8621debfc3dSmrg 
8631debfc3dSmrg   template<typename _FIter, typename _Size, typename _Tp>
864*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8651debfc3dSmrg     _FIter
8661debfc3dSmrg     search_n(_FIter, _FIter, _Size, const _Tp&);
8671debfc3dSmrg 
8681debfc3dSmrg   template<typename _FIter, typename _Size, typename _Tp,
8691debfc3dSmrg 	   typename _BinaryPredicate>
870*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8711debfc3dSmrg     _FIter
8721debfc3dSmrg     search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
8731debfc3dSmrg 
8741debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
875*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8761debfc3dSmrg     _OIter
8771debfc3dSmrg     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
8781debfc3dSmrg 
8791debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
8801debfc3dSmrg 	   typename _Compare>
881*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8821debfc3dSmrg     _OIter
8831debfc3dSmrg     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
8841debfc3dSmrg 
8851debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
886*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8871debfc3dSmrg     _OIter
8881debfc3dSmrg     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
8891debfc3dSmrg 
8901debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
8911debfc3dSmrg 	   typename _Compare>
892*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8931debfc3dSmrg     _OIter
8941debfc3dSmrg     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
8951debfc3dSmrg 
8961debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
897*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
8981debfc3dSmrg     _OIter
8991debfc3dSmrg     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
9001debfc3dSmrg 
9011debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
9021debfc3dSmrg 	   typename _Compare>
903*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
9041debfc3dSmrg     _OIter
9051debfc3dSmrg     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
9061debfc3dSmrg 			     _OIter, _Compare);
9071debfc3dSmrg 
9081debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter>
909*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
9101debfc3dSmrg     _OIter
9111debfc3dSmrg     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
9121debfc3dSmrg 
9131debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
9141debfc3dSmrg 	   typename _Compare>
915*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
9161debfc3dSmrg     _OIter
9171debfc3dSmrg     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
9181debfc3dSmrg 
9191debfc3dSmrg   template<typename _RAIter>
920*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
9211debfc3dSmrg     void
9221debfc3dSmrg     sort(_RAIter, _RAIter);
9231debfc3dSmrg 
9241debfc3dSmrg   template<typename _RAIter, typename _Compare>
925*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
9261debfc3dSmrg     void
9271debfc3dSmrg     sort(_RAIter, _RAIter, _Compare);
9281debfc3dSmrg 
9291debfc3dSmrg   template<typename _RAIter>
9301debfc3dSmrg     void
9311debfc3dSmrg     stable_sort(_RAIter, _RAIter);
9321debfc3dSmrg 
9331debfc3dSmrg   template<typename _RAIter, typename _Compare>
9341debfc3dSmrg     void
9351debfc3dSmrg     stable_sort(_RAIter, _RAIter, _Compare);
9361debfc3dSmrg 
9371debfc3dSmrg   template<typename _IIter, typename _OIter, typename _UnaryOperation>
938*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
9391debfc3dSmrg     _OIter
9401debfc3dSmrg     transform(_IIter, _IIter, _OIter, _UnaryOperation);
9411debfc3dSmrg 
9421debfc3dSmrg   template<typename _IIter1, typename _IIter2, typename _OIter,
9431debfc3dSmrg 	   typename _BinaryOperation>
944*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
9451debfc3dSmrg     _OIter
9461debfc3dSmrg     transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
9471debfc3dSmrg 
9481debfc3dSmrg   template<typename _IIter, typename _OIter>
949*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
9501debfc3dSmrg     _OIter
9511debfc3dSmrg     unique_copy(_IIter, _IIter, _OIter);
9521debfc3dSmrg 
9531debfc3dSmrg   template<typename _IIter, typename _OIter, typename _BinaryPredicate>
954*8feb0f0bSmrg     _GLIBCXX20_CONSTEXPR
9551debfc3dSmrg     _OIter
9561debfc3dSmrg     unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
9571debfc3dSmrg 
9581debfc3dSmrg _GLIBCXX_END_NAMESPACE_ALGO
959a2dc1f3fSmrg _GLIBCXX_END_NAMESPACE_VERSION
9601debfc3dSmrg } // namespace std
9611debfc3dSmrg 
9621debfc3dSmrg #ifdef _GLIBCXX_PARALLEL
9631debfc3dSmrg # include <parallel/algorithmfwd.h>
9641debfc3dSmrg #endif
9651debfc3dSmrg 
9661debfc3dSmrg #endif
9671debfc3dSmrg 
968