(root)/
gcc-13.2.0/
libstdc++-v3/
include/
pstl/
glue_algorithm_defs.h
       1  // -*- C++ -*-
       2  //===-- glue_algorithm_defs.h ---------------------------------------------===//
       3  //
       4  // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
       5  // See https://llvm.org/LICENSE.txt for license information.
       6  // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
       7  //
       8  //===----------------------------------------------------------------------===//
       9  
      10  #ifndef _PSTL_GLUE_ALGORITHM_DEFS_H
      11  #define _PSTL_GLUE_ALGORITHM_DEFS_H
      12  
      13  #include <bits/stl_pair.h>
      14  
      15  #include "execution_defs.h"
      16  
      17  namespace std
      18  {
      19  
      20  // [alg.any_of]
      21  
      22  template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate>
      23  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
      24  any_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred);
      25  
      26  // [alg.all_of]
      27  
      28  template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate>
      29  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
      30  all_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred);
      31  
      32  // [alg.none_of]
      33  
      34  template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate>
      35  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
      36  none_of(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred);
      37  
      38  // [alg.foreach]
      39  
      40  template <class _ExecutionPolicy, class _ForwardIterator, class _Function>
      41  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
      42  for_each(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Function __f);
      43  
      44  template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Function>
      45  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
      46  for_each_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __n, _Function __f);
      47  
      48  // [alg.find]
      49  
      50  template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate>
      51  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
      52  find_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred);
      53  
      54  template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate>
      55  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
      56  find_if_not(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred);
      57  
      58  template <class _ExecutionPolicy, class _ForwardIterator, class _Tp>
      59  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
      60  find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value);
      61  
      62  // [alg.find.end]
      63  
      64  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
      65  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1>
      66  find_end(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first,
      67           _ForwardIterator2 __s_last, _BinaryPredicate __pred);
      68  
      69  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
      70  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1>
      71  find_end(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first,
      72           _ForwardIterator2 __s_last);
      73  
      74  // [alg.find_first_of]
      75  
      76  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
      77  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1>
      78  find_first_of(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
      79                _ForwardIterator2 __s_first, _ForwardIterator2 __s_last, _BinaryPredicate __pred);
      80  
      81  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
      82  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1>
      83  find_first_of(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
      84                _ForwardIterator2 __s_first, _ForwardIterator2 __s_last);
      85  
      86  // [alg.adjacent_find]
      87  
      88  template <class _ExecutionPolicy, class _ForwardIterator>
      89  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
      90  adjacent_find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last);
      91  
      92  template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate>
      93  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
      94  adjacent_find(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred);
      95  
      96  // [alg.count]
      97  
      98  template <class _ExecutionPolicy, class _ForwardIterator, class _Tp>
      99  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy,
     100                                                   typename iterator_traits<_ForwardIterator>::difference_type>
     101  count(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value);
     102  
     103  template <class _ExecutionPolicy, class _ForwardIterator, class _Predicate>
     104  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy,
     105                                                   typename iterator_traits<_ForwardIterator>::difference_type>
     106  count_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Predicate __pred);
     107  
     108  // [alg.search]
     109  
     110  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
     111  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1>
     112  search(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first,
     113         _ForwardIterator2 __s_last, _BinaryPredicate __pred);
     114  
     115  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
     116  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator1>
     117  search(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __s_first,
     118         _ForwardIterator2 __s_last);
     119  
     120  template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Tp, class _BinaryPredicate>
     121  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     122  search_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Size __count,
     123           const _Tp& __value, _BinaryPredicate __pred);
     124  
     125  template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Tp>
     126  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     127  search_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Size __count,
     128           const _Tp& __value);
     129  
     130  // [alg.copy]
     131  
     132  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
     133  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     134  copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result);
     135  
     136  template <class _ExecutionPolicy, class _ForwardIterator1, class _Size, class _ForwardIterator2>
     137  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     138  copy_n(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _Size __n, _ForwardIterator2 __result);
     139  
     140  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Predicate>
     141  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     142  copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 result,
     143          _Predicate __pred);
     144  
     145  // [alg.swap]
     146  
     147  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
     148  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     149  swap_ranges(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
     150              _ForwardIterator2 __first2);
     151  
     152  // [alg.transform]
     153  
     154  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _UnaryOperation>
     155  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     156  transform(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result,
     157            _UnaryOperation __op);
     158  
     159  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator,
     160            class _BinaryOperation>
     161  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     162  transform(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     163            _ForwardIterator __result, _BinaryOperation __op);
     164  
     165  // [alg.replace]
     166  
     167  template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate, class _Tp>
     168  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     169  replace_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred,
     170             const _Tp& __new_value);
     171  
     172  template <class _ExecutionPolicy, class _ForwardIterator, class _Tp>
     173  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     174  replace(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __old_value,
     175          const _Tp& __new_value);
     176  
     177  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _UnaryPredicate, class _Tp>
     178  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     179  replace_copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
     180                  _ForwardIterator2 __result, _UnaryPredicate __pred, const _Tp& __new_value);
     181  
     182  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp>
     183  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     184  replace_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result,
     185               const _Tp& __old_value, const _Tp& __new_value);
     186  
     187  // [alg.fill]
     188  
     189  template <class _ExecutionPolicy, class _ForwardIterator, class _Tp>
     190  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     191  fill(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value);
     192  
     193  template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Tp>
     194  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     195  fill_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size __count, const _Tp& __value);
     196  
     197  // [alg.generate]
     198  template <class _ExecutionPolicy, class _ForwardIterator, class _Generator>
     199  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     200  generate(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Generator __g);
     201  
     202  template <class _ExecutionPolicy, class _ForwardIterator, class _Size, class _Generator>
     203  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     204  generate_n(_ExecutionPolicy&& __exec, _ForwardIterator __first, _Size count, _Generator __g);
     205  
     206  // [alg.remove]
     207  
     208  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Predicate>
     209  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     210  remove_copy_if(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last,
     211                 _ForwardIterator2 __result, _Predicate __pred);
     212  
     213  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Tp>
     214  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     215  remove_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result,
     216              const _Tp& __value);
     217  
     218  template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate>
     219  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     220  remove_if(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred);
     221  
     222  template <class _ExecutionPolicy, class _ForwardIterator, class _Tp>
     223  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     224  remove(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, const _Tp& __value);
     225  
     226  // [alg.unique]
     227  
     228  template <class _ExecutionPolicy, class _ForwardIterator, class _BinaryPredicate>
     229  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     230  unique(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _BinaryPredicate __pred);
     231  
     232  template <class _ExecutionPolicy, class _ForwardIterator>
     233  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     234  unique(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last);
     235  
     236  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
     237  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     238  unique_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result,
     239              _BinaryPredicate __pred);
     240  
     241  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
     242  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     243  unique_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __result);
     244  
     245  // [alg.reverse]
     246  
     247  template <class _ExecutionPolicy, class _BidirectionalIterator>
     248  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     249  reverse(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last);
     250  
     251  template <class _ExecutionPolicy, class _BidirectionalIterator, class _ForwardIterator>
     252  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     253  reverse_copy(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last,
     254               _ForwardIterator __d_first);
     255  
     256  // [alg.rotate]
     257  
     258  template <class _ExecutionPolicy, class _ForwardIterator>
     259  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     260  rotate(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __middle, _ForwardIterator __last);
     261  
     262  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
     263  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     264  rotate_copy(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __middle, _ForwardIterator1 __last,
     265              _ForwardIterator2 __result);
     266  
     267  // [alg.partitions]
     268  
     269  template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate>
     270  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     271  is_partitioned(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred);
     272  
     273  template <class _ExecutionPolicy, class _ForwardIterator, class _UnaryPredicate>
     274  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     275  partition(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _UnaryPredicate __pred);
     276  
     277  template <class _ExecutionPolicy, class _BidirectionalIterator, class _UnaryPredicate>
     278  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _BidirectionalIterator>
     279  stable_partition(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __last,
     280                   _UnaryPredicate __pred);
     281  
     282  template <class _ExecutionPolicy, class _ForwardIterator, class _ForwardIterator1, class _ForwardIterator2,
     283            class _UnaryPredicate>
     284  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>>
     285  partition_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last,
     286                 _ForwardIterator1 __out_true, _ForwardIterator2 __out_false, _UnaryPredicate __pred);
     287  
     288  // [alg.sort]
     289  
     290  template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare>
     291  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     292  sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp);
     293  
     294  template <class _ExecutionPolicy, class _RandomAccessIterator>
     295  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     296  sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last);
     297  
     298  // [stable.sort]
     299  
     300  template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare>
     301  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     302  stable_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp);
     303  
     304  template <class _ExecutionPolicy, class _RandomAccessIterator>
     305  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     306  stable_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last);
     307  
     308  // [mismatch]
     309  
     310  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
     311  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>>
     312  mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     313           _ForwardIterator2 __last2, _BinaryPredicate __pred);
     314  
     315  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
     316  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>>
     317  mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     318           _BinaryPredicate __pred);
     319  
     320  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
     321  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>>
     322  mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     323           _ForwardIterator2 __last2);
     324  
     325  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
     326  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator1, _ForwardIterator2>>
     327  mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2);
     328  
     329  // [alg.equal]
     330  
     331  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
     332  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     333  equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     334        _BinaryPredicate __p);
     335  
     336  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
     337  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     338  equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2);
     339  
     340  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _BinaryPredicate>
     341  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     342  equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     343        _ForwardIterator2 __last2, _BinaryPredicate __p);
     344  
     345  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
     346  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     347  equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     348        _ForwardIterator2 __last2);
     349  
     350  // [alg.move]
     351  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
     352  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator2>
     353  move(_ExecutionPolicy&& __exec, _ForwardIterator1 __first, _ForwardIterator1 __last, _ForwardIterator2 __d_first);
     354  
     355  // [partial.sort]
     356  
     357  template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare>
     358  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     359  partial_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __middle,
     360               _RandomAccessIterator __last, _Compare __comp);
     361  
     362  template <class _ExecutionPolicy, class _RandomAccessIterator>
     363  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     364  partial_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __middle,
     365               _RandomAccessIterator __last);
     366  
     367  // [partial.sort.copy]
     368  
     369  template <class _ExecutionPolicy, class _ForwardIterator, class _RandomAccessIterator, class _Compare>
     370  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator>
     371  partial_sort_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last,
     372                    _RandomAccessIterator __d_first, _RandomAccessIterator __d_last, _Compare __comp);
     373  
     374  template <class _ExecutionPolicy, class _ForwardIterator, class _RandomAccessIterator>
     375  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator>
     376  partial_sort_copy(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last,
     377                    _RandomAccessIterator __d_first, _RandomAccessIterator __d_last);
     378  
     379  // [is.sorted]
     380  template <class _ExecutionPolicy, class _ForwardIterator, class _Compare>
     381  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     382  is_sorted_until(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp);
     383  
     384  template <class _ExecutionPolicy, class _ForwardIterator>
     385  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     386  is_sorted_until(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last);
     387  
     388  template <class _ExecutionPolicy, class _ForwardIterator, class _Compare>
     389  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     390  is_sorted(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp);
     391  
     392  template <class _ExecutionPolicy, class _ForwardIterator>
     393  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     394  is_sorted(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last);
     395  
     396  // [alg.nth.element]
     397  
     398  template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare>
     399  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     400  nth_element(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __nth,
     401              _RandomAccessIterator __last, _Compare __comp);
     402  
     403  template <class _ExecutionPolicy, class _RandomAccessIterator>
     404  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     405  nth_element(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __nth,
     406              _RandomAccessIterator __last);
     407  
     408  // [alg.merge]
     409  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator,
     410            class _Compare>
     411  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     412  merge(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     413        _ForwardIterator2 __last2, _ForwardIterator __d_first, _Compare __comp);
     414  
     415  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator>
     416  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     417  merge(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     418        _ForwardIterator2 __last2, _ForwardIterator __d_first);
     419  
     420  template <class _ExecutionPolicy, class _BidirectionalIterator, class _Compare>
     421  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     422  inplace_merge(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __middle,
     423                _BidirectionalIterator __last, _Compare __comp);
     424  
     425  template <class _ExecutionPolicy, class _BidirectionalIterator>
     426  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
     427  inplace_merge(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _BidirectionalIterator __middle,
     428                _BidirectionalIterator __last);
     429  
     430  // [includes]
     431  
     432  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare>
     433  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     434  includes(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     435           _ForwardIterator2 __last2, _Compare __comp);
     436  
     437  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
     438  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     439  includes(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     440           _ForwardIterator2 __last2);
     441  
     442  // [set.union]
     443  
     444  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator,
     445            class _Compare>
     446  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     447  set_union(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     448            _ForwardIterator2 __last2, _ForwardIterator __result, _Compare __comp);
     449  
     450  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator>
     451  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     452  set_union(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
     453            _ForwardIterator2 __last2, _ForwardIterator __result);
     454  
     455  // [set.intersection]
     456  
     457  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator,
     458            class _Compare>
     459  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     460  set_intersection(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
     461                   _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result, _Compare __comp);
     462  
     463  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator>
     464  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     465  set_intersection(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
     466                   _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result);
     467  
     468  // [set.difference]
     469  
     470  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator,
     471            class _Compare>
     472  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     473  set_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
     474                 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result, _Compare __comp);
     475  
     476  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator>
     477  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     478  set_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
     479                 _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result);
     480  
     481  // [set.symmetric.difference]
     482  
     483  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator,
     484            class _Compare>
     485  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     486  set_symmetric_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
     487                           _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator result,
     488                           _Compare __comp);
     489  
     490  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _ForwardIterator>
     491  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     492  set_symmetric_difference(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
     493                           _ForwardIterator2 __first2, _ForwardIterator2 __last2, _ForwardIterator __result);
     494  
     495  // [is.heap]
     496  template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare>
     497  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator>
     498  is_heap_until(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp);
     499  
     500  template <class _ExecutionPolicy, class _RandomAccessIterator>
     501  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _RandomAccessIterator>
     502  is_heap_until(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last);
     503  
     504  template <class _ExecutionPolicy, class _RandomAccessIterator, class _Compare>
     505  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     506  is_heap(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last, _Compare __comp);
     507  
     508  template <class _ExecutionPolicy, class _RandomAccessIterator>
     509  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     510  is_heap(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last);
     511  
     512  // [alg.min.max]
     513  
     514  template <class _ExecutionPolicy, class _ForwardIterator, class _Compare>
     515  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     516  min_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp);
     517  
     518  template <class _ExecutionPolicy, class _ForwardIterator>
     519  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     520  min_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last);
     521  
     522  template <class _ExecutionPolicy, class _ForwardIterator, class _Compare>
     523  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     524  max_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp);
     525  
     526  template <class _ExecutionPolicy, class _ForwardIterator>
     527  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, _ForwardIterator>
     528  max_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last);
     529  
     530  template <class _ExecutionPolicy, class _ForwardIterator, class _Compare>
     531  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator, _ForwardIterator>>
     532  minmax_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last, _Compare __comp);
     533  
     534  template <class _ExecutionPolicy, class _ForwardIterator>
     535  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_ForwardIterator, _ForwardIterator>>
     536  minmax_element(_ExecutionPolicy&& __exec, _ForwardIterator __first, _ForwardIterator __last);
     537  
     538  // [alg.lex.comparison]
     539  
     540  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2, class _Compare>
     541  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     542  lexicographical_compare(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
     543                          _ForwardIterator2 __first2, _ForwardIterator2 __last2, _Compare __comp);
     544  
     545  template <class _ExecutionPolicy, class _ForwardIterator1, class _ForwardIterator2>
     546  __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
     547  lexicographical_compare(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1,
     548                          _ForwardIterator2 __first2, _ForwardIterator2 __last2);
     549  
     550  } // namespace std
     551  #endif /* _PSTL_GLUE_ALGORITHM_DEFS_H */