OSDN Git Service

2008-06-26 Paolo Carlini <paolo.carlini@oracle.com>
[pf3gnuchains/gcc-fork.git] / libstdc++-v3 / testsuite / 25_algorithms / headers / algorithm / synopsis.cc
1 // { dg-do compile }
2
3 // Copyright (C) 2007, 2008 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 2, 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 COPYING.  If not, write to the Free
18 // Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
19 // USA.
20
21 #include <algorithm>
22
23 namespace std
24  {
25   // 25.1, non-modifying sequence operations:
26   template<typename _IIter, typename _Funct>
27     _Funct 
28     for_each(_IIter, _IIter, _Funct);
29
30   template<typename _IIter, typename _Tp>
31     _IIter 
32     find(_IIter, _IIter, const _Tp&);
33
34   template<typename _IIter, typename _Predicate>
35     _IIter
36     find_if(_IIter, _IIter, _Predicate);
37
38 #ifdef __GXX_EXPERIMENTAL_CXX0X__
39   template<typename _IIter, typename _Predicate>
40     bool
41     all_of(_IIter, _IIter, _Predicate);
42
43   template<typename _IIter, typename _Predicate>
44     bool
45     any_of(_IIter, _IIter, _Predicate);
46
47   template<typename _IIter, typename _Predicate>
48     bool
49     none_of(_IIter, _IIter, _Predicate);
50
51   template<typename _IIter, typename _Predicate>
52     _IIter
53     find_if_not(_IIter, _IIter, _Predicate);
54 #endif
55
56   template<typename _FIter1, typename _FIter2>
57     _FIter1
58     find_end(_FIter1, _FIter1, _FIter2, _FIter2);
59
60   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
61     _FIter1
62     find_end(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
63
64   template<typename _FIter1, typename _FIter2>
65     _FIter1
66     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2);
67
68   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
69     _FIter1
70     find_first_of(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
71
72   template<typename _FIter>
73     _FIter 
74     adjacent_find(_FIter, _FIter);
75
76   template<typename _FIter, typename _BinaryPredicate>
77     _FIter 
78     adjacent_find(_FIter, _FIter, _BinaryPredicate);
79
80   template<typename _IIter, typename _Tp>
81     typename iterator_traits<_IIter>::difference_type
82     count(_IIter, _IIter, const _Tp&);
83
84   template<typename _IIter, typename _Predicate>
85     typename iterator_traits<_IIter>::difference_type
86     count_if(_IIter, _IIter, _Predicate);
87
88   template<typename _IIter1, typename _IIter2>
89     pair<_IIter1, _IIter2>
90     mismatch(_IIter1, _IIter1, _IIter2);
91
92   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
93     pair<_IIter1, _IIter2>
94     mismatch(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
95
96   template<typename _IIter1, typename _IIter2>
97     bool 
98     equal(_IIter1, _IIter1, _IIter2);
99
100   template<typename _IIter1, typename _IIter2, typename _BinaryPredicate>
101     bool 
102     equal(_IIter1, _IIter1, _IIter2, _BinaryPredicate);
103
104   template<typename _FIter1, typename _FIter2>
105     _FIter1 
106     search(_FIter1, _FIter1, _FIter2, _FIter2);
107
108   template<typename _FIter1, typename _FIter2, typename _BinaryPredicate>
109     _FIter1 
110     search(_FIter1, _FIter1, _FIter2, _FIter2, _BinaryPredicate);
111
112   template<typename _FIter, typename _Size, typename _Tp>
113     _FIter 
114     search_n(_FIter, _FIter, _Size, const _Tp&);
115
116   template<typename _FIter, typename _Size, typename _Tp, 
117            typename _BinaryPredicate>
118     _FIter 
119     search_n(_FIter, _FIter, _Size, const _Tp&, _BinaryPredicate);
120
121   // 25.2, modifying sequence operations:
122   // 25.2.1, copy:
123   template<typename _IIter, typename _OIter>
124     _OIter 
125     copy(_IIter, _IIter, _OIter);
126
127   template<typename _BIter1, typename _BIter2>
128     _BIter2
129     copy_backward (_BIter1, _BIter1, _BIter2);
130
131   // 25.2.2, swap:
132   template<typename _Tp> 
133     void 
134     swap(_Tp&, _Tp& b);
135
136 #ifdef __GXX_EXPERIMENTAL_CXX0X__
137   template<typename _Tp, size_t _Nm>
138     void
139     swap(_Tp (&)[_Nm], _Tp (&)[_Nm]);
140 #endif
141
142   template<typename _FIter1, typename _FIter2>
143     _FIter2 
144     swap_ranges(_FIter1 first1, _FIter1, _FIter2);
145
146   template<typename _FIter1, typename _FIter2>
147     void 
148     iter_swap(_FIter1, _FIter2 b);
149
150   template<typename _IIter, typename _OIter, typename _UnaryOperation>
151     _OIter 
152     transform(_IIter, _IIter, _OIter, _UnaryOperation op);
153
154   template<typename _IIter1, typename _IIter2, typename _OIter, 
155            typename _BinaryOperation>
156     _OIter 
157     transform(_IIter1, _IIter1, _IIter2, _OIter, _BinaryOperation);
158
159   template<typename _FIter, typename _Tp>
160     void 
161     replace(_FIter, _FIter, const _Tp&, const _Tp&);
162
163   template<typename _FIter, typename _Predicate, typename _Tp>
164     void 
165     replace_if(_FIter, _FIter, _Predicate, const _Tp&);
166
167   template<typename _IIter, typename _OIter, typename _Tp>
168     _OIter 
169     replace_copy(_IIter, _IIter, _OIter, const _Tp&, const _Tp&);
170
171   template<typename _Iter, typename _OIter, typename _Predicate, typename _Tp>
172     _OIter 
173     replace_copy_if(_Iter, _Iter, _OIter, _Predicate, const _Tp&);
174
175   template<typename _FIter, typename _Tp>
176     void 
177     fill(_FIter, _FIter, const _Tp&);
178
179   template<typename _OIter, typename _Size, typename _Tp>
180     void 
181     fill_n(_OIter, _Size n, const _Tp&);
182
183   template<typename _FIter, typename _Generator>
184     void 
185     generate(_FIter, _FIter, _Generator);
186
187   template<typename _OIter, typename _Size, typename _Generator>
188     void 
189     generate_n(_OIter, _Size, _Generator);
190
191   template<typename _FIter, typename _Tp>
192     _FIter 
193     remove(_FIter, _FIter, const _Tp&);
194
195   template<typename _FIter, typename _Predicate>
196     _FIter 
197     remove_if(_FIter, _FIter, _Predicate);
198
199   template<typename _IIter, typename _OIter, typename _Tp>
200     _OIter 
201     remove_copy(_IIter, _IIter, _OIter, const _Tp&);
202
203   template<typename _IIter, typename _OIter, typename _Predicate>
204     _OIter 
205     remove_copy_if(_IIter, _IIter, _OIter, _Predicate);
206
207 #ifdef __GXX_EXPERIMENTAL_CXX0X__
208   template<typename _IIter, typename _OIter, typename _Predicate>
209     _OIter 
210     copy_if(_IIter, _IIter, _OIter, _Predicate);
211
212   template<typename _IIter, typename _OIter1,
213            typename _OIter2, typename _Predicate>
214     pair<_OIter1, _OIter2>
215     partition_copy(_IIter, _IIter, _OIter1, _OIter2, _Predicate);
216 #endif
217
218   template<typename _FIter>
219     _FIter 
220     unique(_FIter, _FIter);
221
222   template<typename _FIter, typename _BinaryPredicate>
223     _FIter 
224     unique(_FIter, _FIter, _BinaryPredicate);
225
226   template<typename _IIter, typename _OIter>
227     _OIter 
228     unique_copy(_IIter, _IIter, _OIter);
229
230   template<typename _IIter, typename _OIter, typename _BinaryPredicate>
231     _OIter 
232     unique_copy(_IIter, _IIter, _OIter, _BinaryPredicate);
233
234   template<typename _BIter>
235     void 
236     reverse(_BIter, _BIter);
237
238   template<typename _BIter, typename _OIter>
239     _OIter 
240     reverse_copy(_BIter, _BIter, _OIter);
241
242   template<typename _FIter>
243     void 
244     rotate(_FIter, _FIter, _FIter);
245
246   template<typename _FIter, typename _OIter>
247     _OIter 
248     rotate_copy (_FIter, _FIter, _FIter, _OIter);
249
250   template<typename _RAIter>
251     void 
252     random_shuffle(_RAIter, _RAIter);
253
254   template<typename _RAIter, typename _Generator>
255     void 
256     random_shuffle(_RAIter, _RAIter, _Generator&);
257
258   // 25.2.12, partitions:
259   template<typename _BIter, typename _Predicate>
260     _BIter 
261     partition(_BIter, _BIter, _Predicate);
262
263   template<typename _BIter, typename _Predicate>
264     _BIter 
265     stable_partition(_BIter, _BIter, _Predicate);
266
267   // 25.3, sorting and related operations:
268   // 25.3.1, sorting:
269   template<typename _RAIter>
270     void 
271     sort(_RAIter, _RAIter);
272
273   template<typename _RAIter, typename _Compare>
274     void 
275     sort(_RAIter, _RAIter, _Compare);
276
277   template<typename _RAIter>
278     void 
279     stable_sort(_RAIter, _RAIter);
280
281   template<typename _RAIter, typename _Compare>
282     void 
283     stable_sort(_RAIter, _RAIter, _Compare);
284
285   template<typename _RAIter>
286     void 
287     partial_sort(_RAIter, _RAIter, _RAIter);
288
289   template<typename _RAIter, typename _Compare>
290     void 
291     partial_sort(_RAIter, _RAIter, _RAIter, _Compare);
292
293   template<typename _IIter, typename _RAIter>
294     _RAIter
295     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter);
296
297   template<typename _IIter, typename _RAIter, typename _Compare>
298     _RAIter
299     partial_sort_copy(_IIter, _IIter, _RAIter, _RAIter, _Compare);
300
301   template<typename _RAIter>
302     void 
303     nth_element(_RAIter, _RAIter, _RAIter);
304
305   template<typename _RAIter, typename _Compare>
306     void 
307     nth_element(_RAIter, _RAIter, _RAIter, _Compare);
308
309   // 25.3.3, binary search:
310   template<typename _FIter, typename _Tp>
311     _FIter 
312     lower_bound(_FIter, _FIter, const _Tp&);
313
314   template<typename _FIter, typename _Tp, typename _Compare>
315     _FIter 
316     lower_bound(_FIter, _FIter, const _Tp&, _Compare);
317
318   template<typename _FIter, typename _Tp>
319     _FIter 
320     upper_bound(_FIter, _FIter, const _Tp&);
321
322   template<typename _FIter, typename _Tp, typename _Compare>
323     _FIter 
324     upper_bound(_FIter, _FIter, const _Tp&, _Compare);
325
326   template<typename _FIter, typename _Tp>
327     pair<_FIter, _FIter>
328     equal_range(_FIter, _FIter, const _Tp&);
329
330   template<typename _FIter, typename _Tp, typename _Compare>
331     pair<_FIter, _FIter>
332     equal_range(_FIter, _FIter, const _Tp&, _Compare);
333
334   template<typename _FIter, typename _Tp>
335     bool 
336     binary_search(_FIter, _FIter, const _Tp&);
337
338   template<typename _FIter, typename _Tp, typename _Compare>
339     bool 
340     binary_search(_FIter, _FIter, const _Tp&, _Compare);
341
342   // 25.3.4, merge:
343   template<typename _IIter1, typename _IIter2, typename _OIter>
344     _OIter 
345     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
346
347   template<typename _IIter1, typename _IIter2, typename _OIter, 
348            typename _Compare>
349     _OIter 
350     merge(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
351
352   template<typename _BIter>
353     void 
354     inplace_merge(_BIter, _BIter, _BIter);
355
356   template<typename _BIter, typename _Compare>
357     void 
358     inplace_merge(_BIter, _BIter, _BIter, _Compare);
359
360   // 25.3.5, set operations:
361   template<typename _IIter1, typename _IIter2>
362     bool 
363     includes(_IIter1, _IIter1, _IIter2, _IIter2);
364
365   template<typename _IIter1, typename _IIter2, typename _Compare>
366     bool 
367     includes(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
368
369   template<typename _IIter1, typename _IIter2, typename _OIter>
370     _OIter 
371     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
372
373   template<typename _IIter1, typename _IIter2, typename _OIter,
374            typename _Compare>
375     _OIter 
376     set_union(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
377
378   template<typename _IIter1, typename _IIter2, typename _OIter>
379     _OIter 
380     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
381
382   template<typename _IIter1, typename _IIter2, typename _OIter,
383            typename _Compare>
384     _OIter 
385     set_intersection(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
386
387   template<typename _IIter1, typename _IIter2, typename _OIter>
388     _OIter 
389     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
390
391   template<typename _IIter1, typename _IIter2, typename _OIter, 
392            typename _Compare>
393     _OIter 
394     set_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter, _Compare);
395
396   template<typename _IIter1, typename _IIter2, typename _OIter>
397     _OIter
398     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, _OIter);
399
400   template<typename _IIter1, typename _IIter2, typename _OIter, 
401            typename _Compare>
402     _OIter
403     set_symmetric_difference(_IIter1, _IIter1, _IIter2, _IIter2, 
404                              _OIter, _Compare);
405
406   // 25.3.6, heap operations:
407   template<typename _RAIter>
408     void 
409     push_heap(_RAIter, _RAIter);
410
411   template<typename _RAIter, typename _Compare>
412     void 
413     push_heap(_RAIter, _RAIter, _Compare);
414
415   template<typename _RAIter>
416     void 
417     pop_heap(_RAIter, _RAIter);
418
419   template<typename _RAIter, typename _Compare>
420     void 
421     pop_heap(_RAIter, _RAIter, _Compare);
422
423   template<typename _RAIter>
424     void 
425     make_heap(_RAIter, _RAIter);
426
427   template<typename _RAIter, typename _Compare>
428     void 
429     make_heap(_RAIter, _RAIter, _Compare);
430
431   template<typename _RAIter>
432     void 
433     sort_heap(_RAIter, _RAIter);
434
435   template<typename _RAIter, typename _Compare>
436     void 
437     sort_heap(_RAIter, _RAIter, _Compare);
438
439 #ifdef __GXX_EXPERIMENTAL_CXX0X__
440   template<typename _RAIter>
441     bool 
442     is_heap(_RAIter, _RAIter);
443
444   template<typename _RAIter, typename _Compare>
445     bool 
446     is_heap(_RAIter, _RAIter, _Compare);
447
448   template<typename _RAIter>
449     _RAIter 
450     is_heap_until(_RAIter, _RAIter);
451
452   template<typename _RAIter, typename _Compare>
453     _RAIter 
454     is_heap_until(_RAIter, _RAIter, _Compare);
455
456   template<typename _FIter>
457     bool 
458     is_sorted(_FIter, _FIter);
459
460   template<typename _FIter, typename _Compare>
461     bool 
462     is_sorted(_FIter, _FIter, _Compare);
463
464   template<typename _FIter>
465     _FIter 
466     is_sorted_until(_FIter, _FIter);
467
468   template<typename _FIter, typename _Compare>
469     _FIter 
470     is_sorted_until(_FIter, _FIter, _Compare);
471 #endif
472
473   // 25.3.7, minimum and maximum:
474   template<typename _Tp> 
475     const _Tp& 
476     min(const _Tp&, const _Tp&);
477
478   template<typename _Tp, typename _Compare>
479     const _Tp& 
480     min(const _Tp&, const _Tp&, _Compare);
481
482   template<typename _Tp> 
483     const _Tp& 
484     max(const _Tp&, const _Tp&);
485
486   template<typename _Tp, typename _Compare>
487     const _Tp& 
488     max(const _Tp&, const _Tp&, _Compare);
489
490   template<typename _FIter>
491     _FIter 
492     min_element(_FIter, _FIter);
493
494   template<typename _FIter, typename _Compare>
495     _FIter 
496     min_element(_FIter, _FIter, _Compare);
497
498   template<typename _FIter>
499     _FIter 
500     max_element(_FIter, _FIter);
501
502   template<typename _FIter, typename _Compare>
503     _FIter 
504     max_element(_FIter, _FIter, _Compare);
505
506 #ifdef __GXX_EXPERIMENTAL_CXX0X__
507   template<typename _Tp>
508     pair<const _Tp&, const _Tp&>
509     minmax(const _Tp&, const _Tp&);
510
511   template<typename _Tp, typename _Compare>
512     pair<const _Tp&, const _Tp&>
513     minmax(const _Tp&, const _Tp&, _Compare);
514
515   template<typename _FIter>
516     pair<_FIter, _FIter>
517     minmax_element(_FIter, _FIter);
518
519   template<typename _FIter, typename _Compare>
520     pair<_FIter, _FIter> 
521     minmax_element(_FIter, _FIter, _Compare);
522 #endif
523
524   template<typename _IIter1, typename _IIter2>
525     bool 
526     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2);
527
528   template<typename _IIter1, typename _IIter2, typename _Compare>
529     bool 
530     lexicographical_compare(_IIter1, _IIter1, _IIter2, _IIter2, _Compare);
531
532   // 25.3.9, permutations
533   template<typename _BIter>
534     bool 
535     next_permutation(_BIter, _BIter);
536
537   template<typename _BIter, typename _Compare>
538     bool 
539     next_permutation(_BIter, _BIter, _Compare);
540
541   template<typename _BIter>
542     bool 
543     prev_permutation(_BIter, _BIter);
544
545   template<typename _BIter, typename _Compare>
546     bool 
547     prev_permutation(_BIter, _BIter, _Compare);
548 }