]> git.ipfire.org Git - thirdparty/gcc.git/blob - libstdc++-v3/testsuite/25_algorithms/headers/algorithm/synopsis.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 25_algorithms / headers / algorithm / synopsis.cc
1 // { dg-do compile }
2
3 // Copyright (C) 2007-2018 Free Software Foundation, Inc.
4 //
5 // This file is part of the GNU ISO C++ Library. This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 3, or (at your option)
9 // any later version.
10
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING3. If not see
18 // <http://www.gnu.org/licenses/>.
19
20 #include <algorithm>
21
22 namespace std
23 {
24 // 25.1, non-modifying sequence operations:
25 template<typename _IIter, typename _Funct>
26 _Funct
27 for_each(_IIter, _IIter, _Funct);
28
29 template<typename _IIter, typename _Tp>
30 _IIter
31 find(_IIter, _IIter, const _Tp&);
32
33 template<typename _IIter, typename _Predicate>
34 _IIter
35 find_if(_IIter, _IIter, _Predicate);
36
37 #if __cplusplus >= 201103L
38 template<typename _IIter, typename _Predicate>
39 bool
40 all_of(_IIter, _IIter, _Predicate);
41
42 template<typename _IIter, typename _Predicate>
43 bool
44 any_of(_IIter, _IIter, _Predicate);
45
46 template<typename _IIter, typename _Predicate>
47 bool
48 none_of(_IIter, _IIter, _Predicate);
49
50 template<typename _IIter, typename _Predicate>
51 _IIter
52 find_if_not(_IIter, _IIter, _Predicate);
53
54 template<typename _IIter, typename _Predicate>
55 bool
56 is_partitioned(_IIter, _IIter, _Predicate);
57
58 template<typename _FIter, typename _Predicate>
59 _FIter
60 partition_point(_FIter, _FIter, _Predicate);
61 #endif
62
63 template<typename _FIter1, typename _FIter2>
64 _FIter1
65 find_end(_FIter1, _FIter1, _FIter2, _FIter2);
66
67 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
68 _FIter1
69 find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
70
71 template<typename _FIter1, typename _FIter2>
72 _FIter1
73 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
74
75 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
76 _FIter1
77 find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
78
79 template<typename _FIter>
80 _FIter
81 adjacent_find(_FIter, _FIter);
82
83 template<typename _FIter, typename _BinaryPredicate>
84 _FIter
85 adjacent_find(_FIter, _FIter, _BinaryPredicate);
86
87 template<typename _IIter, typename _Tp>
88 typename iterator_traits<_IIter>::difference_type
89 count(_IIter, _IIter, const _Tp&);
90
91 template<typename _IIter, typename _Predicate>
92 typename iterator_traits<_IIter>::difference_type
93 count_if(_IIter, _IIter, _Predicate);
94
95 template<typename _IIter1, typename _IIter2>
96 pair<_IIter1, _IIter2>
97 mismatch(_IIter1, _IIter1, _IIter2);
98
99 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
100 pair<_IIter1, _IIter2>
101 mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
102
103 template<typename _IIter1, typename _IIter2>
104 bool
105 equal(_IIter1, _IIter1, _IIter2);
106
107 template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
108 bool
109 equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
110
111 template<typename _FIter1, typename _FIter2>
112 _FIter1
113 search(_FIter1, _FIter1, _FIter2, _FIter2);
114
115 template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
116 _FIter1
117 search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
118
119 template<typename _FIter, typename _Size, typename _Tp>
120 _FIter
121 search_n(_FIter, _FIter, _Size, const _Tp&);
122
123 template<typename _FIter, typename _Size, typename _Tp,
124 typename _BinaryPredicate>
125 _FIter
126 search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
127
128 // 25.2, modifying sequence operations:
129 // 25.2.1, copy:
130 template<typename _IIter, typename _OIter>
131 _OIter
132 copy(_IIter, _IIter, _OIter);
133
134 template<typename _BIter1, typename _BIter2>
135 _BIter2
136 copy_backward (_BIter1, _BIter1, _BIter2);
137
138 // 25.2.2, swap:
139 #if __cplusplus < 201103L
140 template<typename _Tp>
141 void
142 swap(_Tp&, _Tp& b);
143
144 template<typename _Tp, size_t _Nm>
145 void
146 swap(_Tp (&)[_Nm], _Tp (&)[_Nm]);
147 #else
148 // C++11 swap() has complicated SFINAE constraints, test signatures like so:
149 void (*swap_scalars)(int&, int&) = &swap;
150 void (*swap_arrays)(int(&)[5], int(&)[5]) = &swap;
151 #endif
152
153 template<typename _FIter1, typename _FIter2>
154 _FIter2
155 swap_ranges(_FIter1 first1, _FIter1, _FIter2);
156
157 template<typename _FIter1, typename _FIter2>
158 void
159 iter_swap(_FIter1, _FIter2 b);
160
161 template<typename _IIter, typename _OIter, typename _UnaryOperation>
162 _OIter
163 transform(_IIter, _IIter, _OIter, _UnaryOperation op);
164
165 template<typename _IIter1, typename _IIter2, typename _OIter,
166 typename _BinaryOperation>
167 _OIter
168 transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
169
170 template<typename _FIter, typename _Tp>
171 void
172 replace(_FIter, _FIter, const _Tp&, const _Tp&);
173
174 template<typename _FIter, typename _Predicate, typename _Tp>
175 void
176 replace_if(_FIter, _FIter, _Predicate, const _Tp&);
177
178 template<typename _IIter, typename _OIter, typename _Tp>
179 _OIter
180 replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
181
182 template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
183 _OIter
184 replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
185
186 template<typename _FIter, typename _Tp>
187 void
188 fill(_FIter, _FIter, const _Tp&);
189
190 template<typename _OIter, typename _Size, typename _Tp>
191 void
192 fill_n(_OIter, _Size n, const _Tp&);
193
194 template<typename _FIter, typename _Generator>
195 void
196 generate(_FIter, _FIter, _Generator);
197
198 template<typename _OIter, typename _Size, typename _Generator>
199 void
200 generate_n(_OIter, _Size, _Generator);
201
202 template<typename _FIter, typename _Tp>
203 _FIter
204 remove(_FIter, _FIter, const _Tp&);
205
206 template<typename _FIter, typename _Predicate>
207 _FIter
208 remove_if(_FIter, _FIter, _Predicate);
209
210 template<typename _IIter, typename _OIter, typename _Tp>
211 _OIter
212 remove_copy(_IIter, _IIter, _OIter, const _Tp&);
213
214 template<typename _IIter, typename _OIter, typename _Predicate>
215 _OIter
216 remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
217
218 #if __cplusplus >= 201103L
219 template<typename _IIter, typename _OIter, typename _Predicate>
220 _OIter
221 copy_if(_IIter, _IIter, _OIter, _Predicate);
222
223 template<typename _IIter, typename _Size, typename _OIter>
224 _OIter
225 copy_n(_IIter, _Size, _OIter);
226
227 template<typename _IIter, typename _OIter1,
228 typename _OIter2, typename _Predicate>
229 pair<_OIter1, _OIter2>
230 partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
231 #endif
232
233 template<typename _FIter>
234 _FIter
235 unique(_FIter, _FIter);
236
237 template<typename _FIter, typename _BinaryPredicate>
238 _FIter
239 unique(_FIter, _FIter, _BinaryPredicate);
240
241 template<typename _IIter, typename _OIter>
242 _OIter
243 unique_copy(_IIter, _IIter, _OIter);
244
245 template<typename _IIter, typename _OIter, typename _BinaryPredicate>
246 _OIter
247 unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
248
249 template<typename _BIter>
250 void
251 reverse(_BIter, _BIter);
252
253 template<typename _BIter, typename _OIter>
254 _OIter
255 reverse_copy(_BIter, _BIter, _OIter);
256
257 template<typename _FIter>
258 void
259 rotate(_FIter, _FIter, _FIter);
260
261 template<typename _FIter, typename _OIter>
262 _OIter
263 rotate_copy (_FIter, _FIter, _FIter, _OIter);
264
265 template<typename _RAIter>
266 void
267 random_shuffle(_RAIter, _RAIter);
268
269 template<typename _RAIter, typename _Generator>
270 void
271 random_shuffle(_RAIter, _RAIter, _Generator&);
272
273 // 25.2.12, partitions:
274 template<typename _BIter, typename _Predicate>
275 _BIter
276 partition(_BIter, _BIter, _Predicate);
277
278 template<typename _BIter, typename _Predicate>
279 _BIter
280 stable_partition(_BIter, _BIter, _Predicate);
281
282 // 25.3, sorting and related operations:
283 // 25.3.1, sorting:
284 template<typename _RAIter>
285 void
286 sort(_RAIter, _RAIter);
287
288 template<typename _RAIter, typename _Compare>
289 void
290 sort(_RAIter, _RAIter, _Compare);
291
292 template<typename _RAIter>
293 void
294 stable_sort(_RAIter, _RAIter);
295
296 template<typename _RAIter, typename _Compare>
297 void
298 stable_sort(_RAIter, _RAIter, _Compare);
299
300 template<typename _RAIter>
301 void
302 partial_sort(_RAIter, _RAIter, _RAIter);
303
304 template<typename _RAIter, typename _Compare>
305 void
306 partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
307
308 template<typename _IIter, typename _RAIter>
309 _RAIter
310 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
311
312 template<typename _IIter, typename _RAIter, typename _Compare>
313 _RAIter
314 partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
315
316 template<typename _RAIter>
317 void
318 nth_element(_RAIter, _RAIter, _RAIter);
319
320 template<typename _RAIter, typename _Compare>
321 void
322 nth_element(_RAIter, _RAIter, _RAIter, _Compare);
323
324 // 25.3.3, binary search:
325 template<typename _FIter, typename _Tp>
326 _FIter
327 lower_bound(_FIter, _FIter, const _Tp&);
328
329 template<typename _FIter, typename _Tp, typename _Compare>
330 _FIter
331 lower_bound(_FIter, _FIter, const _Tp&, _Compare);
332
333 template<typename _FIter, typename _Tp>
334 _FIter
335 upper_bound(_FIter, _FIter, const _Tp&);
336
337 template<typename _FIter, typename _Tp, typename _Compare>
338 _FIter
339 upper_bound(_FIter, _FIter, const _Tp&, _Compare);
340
341 template<typename _FIter, typename _Tp>
342 pair<_FIter, _FIter>
343 equal_range(_FIter, _FIter, const _Tp&);
344
345 template<typename _FIter, typename _Tp, typename _Compare>
346 pair<_FIter, _FIter>
347 equal_range(_FIter, _FIter, const _Tp&, _Compare);
348
349 template<typename _FIter, typename _Tp>
350 bool
351 binary_search(_FIter, _FIter, const _Tp&);
352
353 template<typename _FIter, typename _Tp, typename _Compare>
354 bool
355 binary_search(_FIter, _FIter, const _Tp&, _Compare);
356
357 // 25.3.4, merge:
358 template<typename _IIter1, typename _IIter2, typename _OIter>
359 _OIter
360 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
361
362 template<typename _IIter1, typename _IIter2, typename _OIter,
363 typename _Compare>
364 _OIter
365 merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
366
367 template<typename _BIter>
368 void
369 inplace_merge(_BIter, _BIter, _BIter);
370
371 template<typename _BIter, typename _Compare>
372 void
373 inplace_merge(_BIter, _BIter, _BIter, _Compare);
374
375 // 25.3.5, set operations:
376 template<typename _IIter1, typename _IIter2>
377 bool
378 includes(_IIter1, _IIter1, _IIter2, _IIter2);
379
380 template<typename _IIter1, typename _IIter2, typename _Compare>
381 bool
382 includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
383
384 template<typename _IIter1, typename _IIter2, typename _OIter>
385 _OIter
386 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
387
388 template<typename _IIter1, typename _IIter2, typename _OIter,
389 typename _Compare>
390 _OIter
391 set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
392
393 template<typename _IIter1, typename _IIter2, typename _OIter>
394 _OIter
395 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
396
397 template<typename _IIter1, typename _IIter2, typename _OIter,
398 typename _Compare>
399 _OIter
400 set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
401
402 template<typename _IIter1, typename _IIter2, typename _OIter>
403 _OIter
404 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
405
406 template<typename _IIter1, typename _IIter2, typename _OIter,
407 typename _Compare>
408 _OIter
409 set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
410
411 template<typename _IIter1, typename _IIter2, typename _OIter>
412 _OIter
413 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
414
415 template<typename _IIter1, typename _IIter2, typename _OIter,
416 typename _Compare>
417 _OIter
418 set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2,
419 _OIter, _Compare);
420
421 // 25.3.6, heap operations:
422 template<typename _RAIter>
423 void
424 push_heap(_RAIter, _RAIter);
425
426 template<typename _RAIter, typename _Compare>
427 void
428 push_heap(_RAIter, _RAIter, _Compare);
429
430 template<typename _RAIter>
431 void
432 pop_heap(_RAIter, _RAIter);
433
434 template<typename _RAIter, typename _Compare>
435 void
436 pop_heap(_RAIter, _RAIter, _Compare);
437
438 template<typename _RAIter>
439 void
440 make_heap(_RAIter, _RAIter);
441
442 template<typename _RAIter, typename _Compare>
443 void
444 make_heap(_RAIter, _RAIter, _Compare);
445
446 template<typename _RAIter>
447 void
448 sort_heap(_RAIter, _RAIter);
449
450 template<typename _RAIter, typename _Compare>
451 void
452 sort_heap(_RAIter, _RAIter, _Compare);
453
454 #if __cplusplus >= 201103L
455 template<typename _RAIter>
456 bool
457 is_heap(_RAIter, _RAIter);
458
459 template<typename _RAIter, typename _Compare>
460 bool
461 is_heap(_RAIter, _RAIter, _Compare);
462
463 template<typename _RAIter>
464 _RAIter
465 is_heap_until(_RAIter, _RAIter);
466
467 template<typename _RAIter, typename _Compare>
468 _RAIter
469 is_heap_until(_RAIter, _RAIter, _Compare);
470
471 template<typename _FIter>
472 bool
473 is_sorted(_FIter, _FIter);
474
475 template<typename _FIter, typename _Compare>
476 bool
477 is_sorted(_FIter, _FIter, _Compare);
478
479 template<typename _FIter>
480 _FIter
481 is_sorted_until(_FIter, _FIter);
482
483 template<typename _FIter, typename _Compare>
484 _FIter
485 is_sorted_until(_FIter, _FIter, _Compare);
486 #endif
487
488 // 25.3.7, minimum and maximum:
489 template<typename _Tp>
490 _GLIBCXX14_CONSTEXPR
491 const _Tp&
492 min(const _Tp&, const _Tp&);
493
494 template<typename _Tp, typename _Compare>
495 _GLIBCXX14_CONSTEXPR
496 const _Tp&
497 min(const _Tp&, const _Tp&, _Compare);
498
499 template<typename _Tp>
500 _GLIBCXX14_CONSTEXPR
501 const _Tp&
502 max(const _Tp&, const _Tp&);
503
504 template<typename _Tp, typename _Compare>
505 _GLIBCXX14_CONSTEXPR
506 const _Tp&
507 max(const _Tp&, const _Tp&, _Compare);
508
509 template<typename _FIter>
510 _GLIBCXX14_CONSTEXPR
511 _FIter
512 min_element(_FIter, _FIter);
513
514 template<typename _FIter, typename _Compare>
515 _GLIBCXX14_CONSTEXPR
516 _FIter
517 min_element(_FIter, _FIter, _Compare);
518
519 template<typename _FIter>
520 _GLIBCXX14_CONSTEXPR
521 _FIter
522 max_element(_FIter, _FIter);
523
524 template<typename _FIter, typename _Compare>
525 _GLIBCXX14_CONSTEXPR
526 _FIter
527 max_element(_FIter, _FIter, _Compare);
528
529 #if __cplusplus >= 201103L
530 template<typename _Tp>
531 _GLIBCXX14_CONSTEXPR
532 pair<const _Tp&, const _Tp&>
533 minmax(const _Tp&, const _Tp&);
534
535 template<typename _Tp, typename _Compare>
536 _GLIBCXX14_CONSTEXPR
537 pair<const _Tp&, const _Tp&>
538 minmax(const _Tp&, const _Tp&, _Compare);
539
540 template<typename _FIter>
541 _GLIBCXX14_CONSTEXPR
542 pair<_FIter, _FIter>
543 minmax_element(_FIter, _FIter);
544
545 template<typename _FIter, typename _Compare>
546 _GLIBCXX14_CONSTEXPR
547 pair<_FIter, _FIter>
548 minmax_element(_FIter, _FIter, _Compare);
549
550 template<typename _Tp>
551 _GLIBCXX14_CONSTEXPR
552 _Tp
553 min(initializer_list<_Tp>);
554
555 template<typename _Tp, typename _Compare>
556 _GLIBCXX14_CONSTEXPR
557 _Tp
558 min(initializer_list<_Tp>, _Compare);
559
560 template<typename _Tp>
561 _GLIBCXX14_CONSTEXPR
562 _Tp
563 max(initializer_list<_Tp>);
564
565 template<typename _Tp, typename _Compare>
566 _GLIBCXX14_CONSTEXPR
567 _Tp
568 max(initializer_list<_Tp>, _Compare);
569
570 template<typename _Tp>
571 _GLIBCXX14_CONSTEXPR
572 pair<_Tp, _Tp>
573 minmax(initializer_list<_Tp>);
574
575 template<typename _Tp, typename _Compare>
576 _GLIBCXX14_CONSTEXPR
577 pair<_Tp, _Tp>
578 minmax(initializer_list<_Tp>, _Compare);
579 #endif
580
581 template<typename _IIter1, typename _IIter2>
582 bool
583 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
584
585 template<typename _IIter1, typename _IIter2, typename _Compare>
586 bool
587 lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
588
589 // 25.3.9, permutations
590 template<typename _BIter>
591 bool
592 next_permutation(_BIter, _BIter);
593
594 template<typename _BIter, typename _Compare>
595 bool
596 next_permutation(_BIter, _BIter, _Compare);
597
598 template<typename _BIter>
599 bool
600 prev_permutation(_BIter, _BIter);
601
602 template<typename _BIter, typename _Compare>
603 bool
604 prev_permutation(_BIter, _BIter, _Compare);
605 }