2 Completion Checklist for the Standard C++ Library
8 X - Partially implemented, or buggy.
9 T - Implemented, pending test/inspection.
10 V - Verified to pass all available test suites.
11 Q - Qualified by inspection for non-testable correctness.
12 P - Portability verified.
16 Only status codes appear in column 0. Notes relating to conformance
17 issues appear [in brackets].
19 Note that this checklist does not (yet) include all emendations
20 recommended by the ISO Library Working Group:
21 http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-toc.html
23 Detailed explanation of status codes:
25 M - Missing: The name is not visible to programs that include
26 the specified header, either at compile or link stage.
28 S - Present as stub: A program can use the name, but no implementation
29 is provided. Programs that use the name link correctly, but
30 cannot usefully be run.
32 X - Partially implemented, or buggy: Some implementation has been
33 provided, but it is known or believed not to conform fully.
34 It may have an incorrect base class, wrong namespace, wrong
35 storage class, or simply not fully implement requirements.
36 However, it may be sufficiently usable to help test other
39 T - Implemented, pending test/inspection: Implementation believed
40 to be complete, and informal testing suggests it is ready for
43 V - Verified, passes all test suites: Verified to satisfy all
44 generically testable conformance requirements.
46 Q - Qualified by inspection for non-testable correctness:
47 Inspected, "implementation-defined" documentation accepted,
48 local usability criteria satisfied, formally inspected for
49 other untestable conformance. (Untestable requirements
50 include exception-safety, thread-safety, worst-case
51 complexity, memory cleanliness, usefulness.)
53 P - Portability verified: Qualified on all primary target platforms.
55 C - Certified: Formally certified to have passed all tests,
56 inspections, qualifications; approved under "signing authority"
57 to be used to satisfy contractual guarantees.
59 ----------------------------------------------------------------------
60 <algorithm> <iomanip> <list> <ostream> <streambuf>
61 <bitset> <ios> <locale> <queue> <string>
62 <complex> <iosfwd> <map> <set> <typeinfo>
63 X <deque> <iostream> <memory> <sstream> <utility>
64 <exception> <istream> <new> <stack> <valarray>
65 <fstream> <iterator> <numeric> <stdexcept> <vector>
68 [C header names must be in std:: to qualify. Related to shadow/ dir.]
69 <cassert> <ciso646> <csetjmp> <cstdio> <ctime>
70 <cctype> <climits> <csignal> <cstdlib> <cwchar>
71 X <cerrno> <clocale> <cstdarg> <cstring> <cwctype>
72 <cfloat> <cmath> <cstddef>
75 X errno, declared or defined in <cerrno>.
78 X setjmp(jmp_buf), declared or defined in <csetjmp>
79 X va_end(va_list), declared or defined in <cstdarg>
82 X clock_t, div_t, FILE, fpos_t, lconv, ldiv_t, mbstate_t,
83 X ptrdiff_t, sig_atomic_t, size_t, time_t, tm, va_list,
84 X wctrans_t, wctype_t, and wint_t.
86 1 Which of the functions in the C++ Standard Library are not reentrant
87 subroutines is implementation-defined.
89 18.1 Types [lib.support.types]
96 18.2 Implementation properties [lib.support.limits]
98 <limits>, <climits>, and <cfloat>
100 18.2.1 Numeric limits [lib.limits]
102 X template<class T> class numeric_limits;
104 T enum float_round_style;
105 T enum float_denorm_style;
107 T template<> class numeric_limits<bool>;
109 T template<> class numeric_limits<char>;
110 T template<> class numeric_limits<signed char>;
111 T template<> class numeric_limits<unsigned char>;
112 T template<> class numeric_limits<wchar_t>;
114 T template<> class numeric_limits<short>;
115 T template<> class numeric_limits<int>;
116 T template<> class numeric_limits<long>;
117 T template<> class numeric_limits<unsigned short>;
118 T template<> class numeric_limits<unsigned int>;
119 T template<> class numeric_limits<unsigned long>;
121 X template<> class numeric_limits<float>;
122 X template<> class numeric_limits<double>;
123 X template<> class numeric_limits<long double>;
125 18.2.1.1 Template class numeric_limits [lib.numeric.limits]
126 T template<class T> class numeric_limits {
128 T static const bool is_specialized = false;
129 T static T min() throw();
130 T static T max() throw();
131 T static const int digits = 0;
132 T static const int digits10 = 0;
133 T static const bool is_signed = false;
134 T static const bool is_integer = false;
135 T static const bool is_exact = false;
136 T static const int radix = 0;
137 T static T epsilon() throw();
138 T static T round_error() throw();
140 T static const int min_exponent = 0;
141 T static const int min_exponent10 = 0;
142 T static const int max_exponent = 0;
143 T static const int max_exponent10 = 0;
145 T static const bool has_infinity = false;
146 T static const bool has_quiet_NaN = false;
147 T static const bool has_signaling_NaN = false;
148 T static const float_denorm_style has_denorm = denorm_absent;
149 T static const bool has_denorm_loss = false;
150 T static T infinity() throw();
151 T static T quiet_NaN() throw();
152 T static T signaling_NaN() throw();
153 T static T denorm_min() throw();
155 T static const bool is_iec559 = false;
156 T static const bool is_bounded = false;
157 T static const bool is_modulo = false;
159 T static const bool traps = false;
160 T static const bool tinyness_before = false;
161 T static const float_round_style round_style = round_toward_zero;
164 18.2.1.3 Type float_round_style [lib.round.style]
166 T enum float_round_style {
167 T round_indeterminate = -1,
168 T round_toward_zero = 0,
169 T round_to_nearest = 1,
170 T round_toward_infinity = 2,
171 T round_toward_neg_infinity = 3
174 18.2.1.4 Type float_denorm_style [lib.denorm.style]
176 T enum float_denorm_style {
177 T denorm_indeterminate = -1;
179 T denorm present = 1;
182 18.2.1.5 numeric_limits specializations [lib.numeric.special]
184 [Note: see Note at 18.2.1. ]
186 18.2.2 C Library [lib.c.limits]
188 1 Header <climits> (Table 3):
189 CHAR_BIT INT_MAX LONG_MIN SCHAR_MIN UCHAR_MAX USHRT_MAX
190 X CHAR_MAX INT_MIN MB_LEN_MAX SHRT_MAX UINT_MAX
191 CHAR_MIN LONG_MAX SCHAR_MAX SHRT_MIN ULONG_MAX
193 3 Header <cfloat> (Table 4):
195 DBL_DIG DBL_MIN_EXP FLT_MIN_10_EXP LDBL_MAX_10_EXP
196 DBL_EPSILON FLT_DIG FLT_MIN_EXP LDBL_MAX_EXP
197 DBL_MANT_DIG FLT_EPSILON FLT_RADIX LDBL_MIN
198 X DBL_MAX FLT_MANT_DIG FLT_ROUNDS LDBL_MIN_10_EXP
199 DBL_MAX_10_EXP FLT_MAX LDBL_DIG LDBL_MIN_EXP
200 DBL_MAX_EXP FLT_MAX_10_EXP LDBL_EPSILON
201 DBL_MIN FLT_MAX_EXP LDBL_MANT_DIG
202 DBL_MIN_10_EXP FLT_MIN LDBL_MAX
205 1 Header <cstdlib> (partial), Table 5:
206 X EXIT_FAILURE EXIT_SUCCESS
210 S extern "C" int atexit(void (*f)(void))
211 S extern "C++" int atexit(void (*f)(void))
214 18.4 Dynamic memory management [lib.support.dynamic]
216 Header <new> synopsis
219 T struct nothrow_t {};
220 T extern const nothrow_t nothrow;
221 T typedef void (*new_handler)();
222 T new_handler set_new_handler(new_handler new_p) throw();
224 T void* operator new(std::size_t size) throw(std::bad_alloc);
225 T void* operator new(std::size_t size, const std::nothrow_t&) throw();
226 T void operator delete(void* ptr) throw();
227 T void operator delete(void* ptr, const std::nothrow_t&) throw();
228 T void* operator new[](std::size_t size) throw(std::bad_alloc);
229 T void* operator new[](std::size_t size, const std::nothrow_t&) throw();
230 T void operator delete[](void* ptr) throw();
231 T void operator delete[](void* ptr, const std::nothrow_t&) throw();
232 T void* operator new (std::size_t size, void* ptr) throw();
233 T void* operator new[](std::size_t size, void* ptr) throw();
234 T void operator delete (void* ptr, void*) throw();
235 T void operator delete[](void* ptr, void*) throw();
237 18.4.2.1 Class bad_alloc [lib.bad.alloc]
239 T class bad_alloc : public exception {
241 T bad_alloc() throw();
242 T bad_alloc(const bad_alloc&) throw();
243 T bad_alloc& operator=(const bad_alloc&) throw();
244 T virtual ~bad_alloc() throw();
245 T virtual const char* what() const throw();
249 T new_handler set_new_handler(new_handler new_p) throw();
252 Header <typeinfo> synopsis
258 18.5.1 - Class type_info [lib.type.info]
262 T virtual ~type_info();
263 T bool operator==(const type_info& rhs) const;
264 T bool operator!=(const type_info& rhs) const;
265 T bool before(const type_info& rhs) const;
266 T const char* name() const;
268 T type_info(const type_info& rhs);
269 T type_info& operator=(const type_info& rhs);
272 18.5.2 - Class bad_cast [lib.bad.cast]
274 T bad_cast() throw();
275 T virtual const char* bad_cast::what() const throw();
277 18.5.3 Class bad_typeid [lib.bad.typeid]
279 T class bad_typeid : public exception {
281 T bad_typeid() throw();
282 T bad_typeid(const bad_typeid&) throw();
283 T bad_typeid& operator=(const bad_typeid&) throw();
284 T virtual ~bad_typeid() throw();
285 T virtual const char* what() const throw();
288 18.6 Exception handling [lib.support.exception]
290 T Header <exception> synopsis
293 T class bad_exception;
295 T typedef void (*unexpected_handler)();
296 T unexpected_handler set_unexpected(unexpected_handler f) throw();
298 T typedef void (*terminate_handler)();
299 T terminate_handler set_terminate(terminate_handler f) throw();
301 T bool uncaught_exception();
303 18.6.1 Class exception [lib.exception]
307 T exception() throw();
308 T exception(const exception&) throw();
309 T exception& operator=(const exception&) throw();
310 T virtual ~exception() throw();
311 T virtual const char* what() const throw();
314 18.6.2.1 Class bad_exception [lib.bad.exception]
315 T class bad_exception : public exception {
317 T bad_exception() throw();
318 T bad_exception(const bad_exception&) throw();
319 T bad_exception& operator=(const bad_exception&) throw();
320 T virtual ~bad_exception() throw();
321 T virtual const char* what() const throw();
324 18.7 Other runtime support [lib.support.runtime]
326 1 Headers <cstdarg> (variable arguments), <csetjmp> (nonlocal jumps),
327 <ctime> (system clock clock(), time()), <csignal> (signal handling),
328 and <cstdlib> (runtime environment getenv(), system()).
330 Table 6--Header <cstdarg> synopsis
331 Macros: va_arg va_end va_start
334 Table 7--Header <csetjmp> synopsis
340 Table 8--Header <ctime> synopsis
342 Macros: CLOCKS_PER_SEC
346 Table 9--Header <csignal> synopsis
348 X Macros: SIGABRT SIGILL SIGSEGV SIG_DFL
349 SIG_IGN SIGFPE SIGINT SIGTERM SIG_ERR
351 Functions: raise signal
353 Table 10--Header <cstdlib> synopsis
355 X Functions: getenv system
357 19.1 Exception classes [lib.std.exceptions]
359 Header <stdexcept> synopsis
362 T class domain_error;
363 T class invalid_argument;
364 T class length_error;
365 T class out_of_range;
366 T class runtime_error;
368 T class overflow_error;
369 T class underflow_error;
371 19.1.1 Class logic_error [lib.logic.error]
372 T class logic_error : public exception {
374 T explicit logic_error(const string& what_arg);
377 19.1.2 Class domain_error [lib.domain.error]
379 T class domain_error : public logic_error {
381 T explicit domain_error(const string& what_arg);
384 19.1.3 Class invalid_argument [lib.invalid.argument]
386 T class invalid_argument : public logic_error {
388 T explicit invalid_argument(const string& what_arg);
391 19.1.4 Class length_error [lib.length.error]
393 T class length_error : public logic_error {
395 T explicit length_error(const string& what_arg);
398 19.1.5 Class out_of_range [lib.out.of.range]
400 T class out_of_range : public logic_error {
402 T explicit out_of_range(const string& what_arg);
406 19.1.6 Class runtime_error [lib.runtime.error]
408 T class runtime_error : public exception {
410 T explicit runtime_error(const string& what_arg);
414 19.1.7 Class range_error [lib.range.error]
416 T class range_error : public runtime_error {
418 T explicit range_error(const string& what_arg);
421 19.1.8 Class overflow_error [lib.overflow.error]
423 T class overflow_error : public runtime_error {
425 T explicit overflow_error(const string& what_arg);
429 19.1.9 Class underflow_error [lib.underflow.error]
431 T class underflow_error : public runtime_error {
433 T explicit underflow_error(const string& what_arg);
437 19.2 Assertions [lib.assertions]
439 Table 2--Header <cassert> synopsis
443 19.3 Error numbers [lib.errno]
445 Table 3--Header <cerrno> synopsis
447 X |Macros: EDOM ERANGE errno |
450 20.2 Utility components [lib.utility]
452 Header <utility> synopsis
454 // _lib.operators_, operators:
455 T namespace rel_ops {
456 T template<class T> bool operator!=(const T&, const T&);
457 T template<class T> bool operator> (const T&, const T&);
458 T template<class T> bool operator<=(const T&, const T&);
459 T template<class T> bool operator>=(const T&, const T&);
461 // _lib.pairs_, pairs:
462 T template <class T1, class T2> struct pair;
463 T template <class T1, class T2>
464 bool operator==(const pair<T1,T2>&, const pair<T1,T2>&);
465 T template <class T1, class T2>
466 bool operator< (const pair<T1,T2>&, const pair<T1,T2>&);
467 T template <class T1, class T2>
468 bool operator!=(const pair<T1,T2>&, const pair<T1,T2>&);
469 T template <class T1, class T2>
470 bool operator> (const pair<T1,T2>&, const pair<T1,T2>&);
471 T template <class T1, class T2>
472 bool operator>=(const pair<T1,T2>&, const pair<T1,T2>&);
473 T template <class T1, class T2>
474 bool operator<=(const pair<T1,T2>&, const pair<T1,T2>&);
475 T template <class T1, class T2> pair<T1,T2> make_pair(const T1&, const T2&);
478 20.2.2 Pairs [lib.pairs]
480 T template <class T1, class T2>
482 T typedef T1 first_type;
483 T typedef T2 second_type;
488 T pair(const T1& x, const T2& y);
489 T template<class U, class V> pair(const pair<U, V> &p);
492 20.3 Function objects [lib.function.objects]
494 Header <functional> synopsis
497 V template <class Arg, class Result> struct unary_function;
498 V template <class Arg1, class Arg2, class Result> struct binary_function;
500 // _lib.arithmetic.operations_, arithmetic operations:
501 V template <class T> struct plus;
502 V template <class T> struct minus;
503 V template <class T> struct multiplies;
504 V template <class T> struct divides;
505 V template <class T> struct modulus;
506 V template <class T> struct negate;
507 // _lib.comparisons_, comparisons:
508 V template <class T> struct equal_to;
509 V template <class T> struct not_equal_to;
510 V template <class T> struct greater;
511 V template <class T> struct less;
512 V template <class T> struct greater_equal;
513 V template <class T> struct less_equal;
514 // _lib.logical.operations_, logical operations:
515 V template <class T> struct logical_and;
516 V template <class T> struct logical_or;
517 V template <class T> struct logical_not;
518 // _lib.negators_, negators:
519 template <class Predicate> struct unary_negate;
520 V template <class Predicate>
521 unary_negate<Predicate> not1(const Predicate&);
522 V template <class Predicate> struct binary_negate;
523 V template <class Predicate>
524 binary_negate<Predicate> not2(const Predicate&);
525 // _lib.binders_, binders:
526 V template <class Operation> class binder1st;
527 V template <class Operation, class T>
528 binder1st<Operation> bind1st(const Operation&, const T&);
529 V template <class Operation> class binder2nd;
530 V template <class Operation, class T>
531 binder2nd<Operation> bind2nd(const Operation&, const T&);
532 // _lib.function.pointer.adaptors_, adaptors:
533 V template <class Arg, class Result> class pointer_to_unary_function;
534 V template <class Arg, class Result>
535 pointer_to_unary_function<Arg,Result> ptr_fun(Result (*)(Arg));
536 V template <class Arg1, class Arg2, class Result>
537 class pointer_to_binary_function;
538 V template <class Arg1, class Arg2, class Result>
539 pointer_to_binary_function<Arg1,Arg2,Result>
540 ptr_fun(Result (*)(Arg1,Arg2));
542 // _lib.member.pointer.adaptors_, adaptors:
543 V template<class S, class T> class mem_fun_t;
544 V template<class S, class T, class A> class mem_fun1_t;
545 V template<class S, class T>
546 mem_fun_t<S,T> mem_fun(S (T::*f)());
547 V template<class S, class T, class A>
548 mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A));
549 V template<class S, class T> class mem_fun_ref_t;
550 V template<class S, class T, class A> class mem_fun1_ref_t;
551 V template<class S, class T>
552 mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)());
553 V template<class S, class T, class A>
554 mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A));
556 V template <class S, class T> class const_mem_fun_t;
557 V template <class S, class T, class A> class const_mem_fun1_t;
558 V template <class S, class T>
559 const_mem_fun_t<S,T> mem_fun(S (T::*f)() const);
560 V template <class S, class T, class A>
561 const_mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A) const);
562 V template <class S, class T> class const_mem_fun_ref_t;
563 V template <class S, class T, class A> class const_mem_fun1_ref_t;
564 V template <class S, class T>
565 const_mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)() const);
566 V template <class S, class T, class A>
567 const_mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A) const);
570 20.3.1 Base [lib.base]
572 V template <class Arg, class Result>
573 struct unary_function {
574 V typedef Arg argument_type;
575 V typedef Result result_type;
577 V template <class Arg1, class Arg2, class Result>
578 struct binary_function {
579 V typedef Arg1 first_argument_type;
580 V typedef Arg2 second_argument_type;
581 V typedef Result result_type;
584 20.3.2 Arithmetic operations [lib.arithmetic.operations]
586 T template <class T> struct plus : binary_function<T,T,T> {
587 V T operator()(const T& x, const T& y) const;
590 T template <class T> struct minus : binary_function<T,T,T> {
591 V T operator()(const T& x, const T& y) const;
594 T template <class T> struct multiplies : binary_function<T,T,T> {
595 V T operator()(const T& x, const T& y) const;
598 T template <class T> struct divides : binary_function<T,T,T> {
599 V T operator()(const T& x, const T& y) const;
602 T template <class T> struct modulus : binary_function<T,T,T> {
603 V T operator()(const T& x, const T& y) const;
606 T template <class T> struct negate : unary_function<T,T> {
607 V T operator()(const T& x) const;
610 20.3.3 Comparisons [lib.comparisons]
612 T template <class T> struct equal_to : binary_function<T,T,bool> {
613 V bool operator()(const T& x, const T& y) const;
616 T template <class T> struct not_equal_to : binary_function<T,T,bool> {
617 V bool operator()(const T& x, const T& y) const;
620 T template <class T> struct greater : binary_function<T,T,bool> {
621 V bool operator()(const T& x, const T& y) const;
624 T template <class T> struct less : binary_function<T,T,bool> {
625 V bool operator()(const T& x, const T& y) const;
628 T template <class T> struct greater_equal : binary_function<T,T,bool> {
629 V bool operator()(const T& x, const T& y) const;
632 T template <class T> struct less_equal : binary_function<T,T,bool> {
633 V bool operator()(const T& x, const T& y) const;
636 20.3.4 Logical operations [lib.logical.operations]
638 T template <class T> struct logical_and : binary_function<T,T,bool> {
639 V bool operator()(const T& x, const T& y) const;
642 T template <class T> struct logical_or : binary_function<T,T,bool> {
643 V bool operator()(const T& x, const T& y) const;
646 T template <class T> struct logical_not : unary_function<T,bool> {
647 V bool operator()(const T& x) const;
650 20.3.5 Negators [lib.negators]
652 T template <class Predicate>
654 : public unary_function<typename Predicate::argument_type,bool> {
656 T explicit unary_negate(const Predicate& pred);
657 V bool operator()(const typename Predicate::argument_type& x) const;
660 T template <class Predicate>
662 : public binary_function<typename Predicate::first_argument_type,
663 typename Predicate::second_argument_type, bool> {
665 T explicit binary_negate(const Predicate& pred);
666 V bool operator()(const typename Predicate::first_argument_type& x,
667 const typename Predicate::second_argument_type& y) const;
671 20.3.6 Binders [lib.binders]
673 20.3.6.1 Template class binder1st [lib.binder.1st]
674 T template <class Operation>
676 : public unary_function<typename Operation::second_argument_type,
677 typename Operation::result_type> {
680 T typename Operation::first_argument_type value;
682 V binder1st(const Operation& x,
683 const typename Operation::first_argument_type& y);
684 V typename Operation::result_type
685 operator()(const typename Operation::second_argument_type& x) const;
688 20.3.6.2 bind1st [lib.bind.1st]
690 V template <class Operation, class T>
691 binder1st<Operation> bind1st(const Operation& op, const T& x);
693 20.3.6.3 Template class binder2nd [lib.binder.2nd]
694 T template <class Operation>
696 : public unary_function<typename Operation::first_argument_type,
697 typename Operation::result_type> {
700 T typename Operation::second_argument_type value;
702 V binder2nd(const Operation& x,
703 const typename Operation::second_argument_type& y);
704 V typename Operation::result_type
705 operator()(const typename Operation::first_argument_type& x) const;
708 20.3.6.4 bind2nd [lib.bind.2nd]
710 T template <class Operation, class T>
711 binder2nd<Operation> bind2nd(const Operation& op, const T& x);
714 20.3.7 Adaptors for pointers to [lib.function.pointer.adaptors]
717 1 To allow pointers to (unary and binary) functions to work with func-
718 tion adaptors the library provides:
720 T template <class Arg, class Result>
721 class pointer_to_unary_function : public unary_function<Arg, Result> {
723 T explicit pointer_to_unary_function(Result (*f)(Arg));
724 V Result operator()(Arg x) const;
727 T template <class Arg, class Result>
728 pointer_to_unary_function<Arg, Result> ptr_fun(Result (*f)(Arg));
730 T template <class Arg1, class Arg2, class Result>
731 class pointer_to_binary_function :
732 public binary_function<Arg1,Arg2,Result> {
734 T explicit pointer_to_binary_function(Result (*f)(Arg1, Arg2));
735 V Result operator()(Arg1 x, Arg2 y) const;
739 20.3.8 Adaptors for pointers to [lib.member.pointer.adaptors]
742 T template <class S, class T> class mem_fun_t
743 : public unary_function<T*, S> {
745 T explicit mem_fun_t(S (T::*p)());
746 V S operator()(T* p) const;
749 T template <class S, class T, class A> class mem_fun1_t
750 : public binary_function<T*, A, S> {
752 T explicit mem_fun1_t(S (T::*p)(A));
753 V S operator()(T* p, A x) const;
756 V template<class S, class T> mem_fun_t<S,T>
757 mem_fun(S (T::*f)());
758 V template<class S, class T, class A> mem_fun1_t<S,T,A>
759 mem_fun(S (T::*f)(A));
761 T template <class S, class T> class mem_fun_ref_t
762 : public unary_function<T, S> {
764 T explicit mem_fun_ref_t(S (T::*p)());
765 V S operator()(T& p) const;
768 T template <class S, class T, class A> class mem_fun1_ref_t
769 : public binary_function<T, A, S> {
771 T explicit mem_fun1_ref_t(S (T::*p)(A));
772 V S operator()(T& p, A x) const;
775 T template<class S, class T> mem_fun_ref_t<S,T>
776 mem_fun_ref(S (T::*f)());
778 T template<class S, class T, class A> mem_fun1_ref_t<S,T,A>
779 mem_fun_ref(S (T::*f)(A));
781 T template <class S, class T> class const_mem_fun_t
782 : public unary_function<T*, S> {
784 T explicit const_mem_fun_t(S (T::*p)() const);
785 V S operator()(const T* p) const;
788 T template <class S, class T, class A> class const_mem_fun1_t
789 : public binary_function<T*, A, S> {
791 T explicit const mem_fun1_t(S (T::*p)(A) const);
792 V S operator()(const T* p, A x) const;
795 V template<class S, class T> const_mem_fun_t<S,T>
796 mem_fun(S (T::*f)() const);
797 V template<class S, class T, class A> const_mem_fun1_t<S,T,A>
798 mem_fun(S (T::*f)(A) const);
800 T template <class S, class T> class const_mem_fun_ref_t
801 : public unary_function<T, S> {
803 T explicit const_mem_fun_ref_t(S (T::*p)() const);
804 V S operator()(const T& p) const;
807 T template <class S, class T, class A> class const_mem_fun1_ref_t
808 : public binary_function<T, A, S> {
810 T explicit const_mem_fun1_ref_t(S (T::*p)(A) const);
811 V S operator()(const T& p, A x) const;
814 T template<class S, class T> const_mem_fun_ref_t<S,T>
815 mem_fun_ref(S (T::*f)() const);
817 T template<class S, class T, class A> const_mem_fun1_ref_t<S,T,A>
818 mem_fun_ref(S (T::*f)(A) const);
820 20.4 Memory [lib.memory]
822 Header <memory> synopsis
824 // _lib.default.allocator_, the default allocator:
825 T template <class T> class allocator;
826 T template <> class allocator<void>;
827 T template <class T, class U>
828 bool operator==(const allocator<T>&, const allocator<U>&) throw();
829 T template <class T, class U>
830 bool operator!=(const allocator<T>&, const allocator<U>&) throw();
831 // _lib.storage.iterator_, raw storage iterator:
832 T template <class OutputIterator, class T> class raw_storage_iterator;
833 // _lib.temporary.buffer_, temporary buffers:
835 pair<T*,ptrdiff_t> get_temporary_buffer(ptrdiff_t n);
837 void return_temporary_buffer(T* p);
838 // _lib.specialized.algorithms_, specialized algorithms:
839 T template <class InputIterator, class ForwardIterator>
841 uninitialized_copy(InputIterator first, InputIterator last,
842 ForwardIterator result);
843 T template <class ForwardIterator, class T>
844 void uninitialized_fill(ForwardIterator first, ForwardIterator last,
846 T template <class ForwardIterator, class Size, class T>
847 void uninitialized_fill_n(ForwardIterator first, Size n, const T& x);
848 // _lib.auto.ptr_, pointers:
849 X template<class X> class auto_ptr;
852 20.4.1 The default allocator [lib.default.allocator]
854 T template <class T> class allocator;
855 // specialize for void:
856 T template <> class allocator<void> {
858 T typedef void* pointer;
859 T typedef const void* const_pointer;
860 // reference-to-void members are impossible.
861 T typedef void value_type;
862 T template <class U> struct rebind { typedef allocator<U> other; };
865 T template <class T> class allocator {
867 T typedef size_t size_type;
868 T typedef ptrdiff_t difference_type;
869 T typedef T* pointer;
870 T typedef const T* const_pointer;
871 T typedef T& reference;
872 T typedef const T& const_reference;
873 T typedef T value_type;
874 T template <class U> struct rebind { typedef allocator<U> other; };
875 T allocator() throw();
876 T allocator(const allocator&) throw();
877 T template <class U> allocator(const allocator<U>&) throw();
878 T ~allocator() throw();
879 T pointer address(reference x) const;
880 T const_pointer address(const_reference x) const;
882 size_type, allocator<void>::const_pointer hint = 0);
883 T void deallocate(pointer p, size_type n);
884 T size_type max_size() const throw();
885 T void construct(pointer p, const T& val);
886 T void destroy(pointer p);
889 20.4.1.2 allocator globals [lib.allocator.globals]
891 T template <class T1, class T2>
892 bool operator==(const allocator<T1>&, const allocator<T2>&) throw();
893 T template <class T1, class T2>
894 bool operator!=(const allocator<T1>&, const allocator<T2>&) throw();
896 20.4.2 Raw storage iterator [lib.storage.iterator]
898 T template <class OutputIterator, class T>
899 class raw_storage_iterator
900 : public iterator<output_iterator_tag,void,void,void,void> {
902 T explicit raw_storage_iterator(OutputIterator x);
903 T raw_storage_iterator<OutputIterator,T>& operator*();
904 T raw_storage_iterator<OutputIterator,T>& operator=(const T& element);
905 T raw_storage_iterator<OutputIterator,T>& operator++();
906 T raw_storage_iterator<OutputIterator,T> operator++(int);
909 20.4.3 Temporary buffers [lib.temporary.buffer]
912 pair<T*, ptrdiff_t> get_temporary_buffer(ptrdiff_t n);
914 T template <class T> void return_temporary_buffer(T* p);
916 20.4.4 Specialized algorithms [lib.specialized.algorithms]
918 20.4.4.1 uninitialized_copy [lib.uninitialized.copy]
920 V template <class InputIterator, class ForwardIterator>
922 uninitialized_copy(InputIterator first, InputIterator last,
923 ForwardIterator result);
925 20.4.4.2 uninitialized_fill [lib.uninitialized.fill]
927 V template <class ForwardIterator, class T>
928 void uninitialized_fill(ForwardIterator first, ForwardIterator last,
931 20.4.4.3 uninitialized_fill_n [lib.uninitialized.fill.n]
933 V template <class ForwardIterator, class Size, class T>
934 void uninitialized_fill_n(ForwardIterator first, Size n, const T& x);
936 20.4.5 Template class auto_ptr [lib.auto.ptr]
938 X template<class X> class auto_ptr {
939 template <class Y> struct auto_ptr_ref {};
941 T typedef X element_type;
942 // _lib.auto.ptr.cons_ construct/copy/destroy:
943 T explicit auto_ptr(X* p =0) throw();
944 T auto_ptr(auto_ptr&) throw();
945 T template<class Y> auto_ptr(auto_ptr<Y>&) throw();
946 T auto_ptr& operator=(auto_ptr&) throw();
947 T template<class Y> auto_ptr& operator=(auto_ptr<Y>&) throw();
948 T ~auto_ptr() throw();
949 // _lib.auto.ptr.members_ members:
950 T X& operator*() const throw();
951 T X* operator->() const throw();
952 T X* get() const throw();
953 T X* release() throw();
954 T void reset(X* p =0) throw();
956 // _lib.auto.ptr.conv_ conversions:
957 X auto_ptr(auto_ptr_ref<X>) throw();
958 X template<class Y> operator auto_ptr_ref<Y>() throw();
959 X template<class Y> operator auto_ptr<Y>() throw();
962 20.4.6 C Library [lib.c.malloc]
964 Table 7--Header <cstdlib> synopsis
966 X Functions: calloc malloc
970 Table 8--Header <cstring> synopsis
974 X Functions: memchr memcmp
975 X memcpy memmove memset
977 Table 9--Header <ctime> synopsis
980 X Types: size_t clock_t time_t
983 X asctime clock difftime localtime strftime
984 X ctime gmtime mktime time
986 21.1.1 Character traits requirements [lib.char.traits.require]
988 2 The struct template
989 T template<class charT> struct char_traits;
990 shall be provided in the header <string> as a basis for explicit spe-
994 21.1.3.1 struct [lib.char.traits.specializations.char]
998 struct char_traits<char> {
999 T typedef char char_type;
1000 T typedef int int_type;
1001 T typedef streamoff off_type;
1002 T typedef streampos pos_type;
1003 T typedef mbstate_t state_type;
1005 T static void assign(char_type& c1, const char_type& c2);
1006 T static bool eq(const char_type& c1, const char_type& c2);
1007 T static bool lt(const char_type& c1, const char_type& c2);
1009 T static int compare(const char_type* s1, const char_type* s2, size_t n);
1010 T static size_t length(const char_type* s);
1011 T static const char_type* find(const char_type* s, size_t n,
1012 const char_type& a);
1013 T static char_type* move(char_type* s1, const char_type* s2, size_t n);
1014 T static char_type* copy(char_type* s1, const char_type* s2, size_t n);
1015 T static char_type* assign(char_type* s, size_t n, char_type a);
1017 T static int_type not_eof(const int_type& c);
1018 T static char_type to_char_type(const int_type& c);
1019 T static int_type to_int_type(const char_type& c);
1020 T static bool eq_int_type(const int_type& c1, const int_type& c2);
1021 T static int_type eof();
1024 21.1.3.2 struct [lib.char.traits.specializations.wchar.t]
1025 char_traits<wchar_t>
1028 struct char_traits<wchar_t> {
1029 V typedef wchar_t char_type;
1030 V typedef wint_t int_type;
1031 V typedef streamoff off_type;
1032 V typedef wstreampos pos_type;
1033 V typedef mbstate_t state_type;
1035 V static void assign(char_type& c1, const char_type& c2);
1036 V static bool eq(const char_type& c1, const char_type& c2);
1037 V static bool lt(const char_type& c1, const char_type& c2);
1039 V static int compare(const char_type* s1, const char_type* s2, size_t n);
1040 V static size_t length(const char_type* s);
1041 V static const char_type* find(const char_type* s, size_t n,
1042 const char_type& a);
1043 V static char_type* move(char_type* s1, const char_type* s2, size_t n);
1044 V static char_type* copy(char_type* s1, const char_type* s2, size_t n);
1045 V static char_type* assign(char_type* s, size_t n, char_type a);
1047 V static int_type not_eof(const int_type& c);
1048 V static char_type to_char_type(const int_type& c);
1049 V static int_type to_int_type(const char_type& c);
1050 V static bool eq_int_type(const int_type& c1, const int_type& c2);
1051 V static int_type eof();
1054 21.2 String classes [lib.string.classes]
1056 // _lib.char.traits_, character traits:
1057 V template<class charT>
1059 V template <> struct char_traits<char>;
1060 V template <> struct char_traits<wchar_t>;
1062 // _lib.basic.string_, basic_string:
1063 V template<class charT, class traits = char_traits<charT>,
1064 class Allocator = allocator<charT> >
1066 V template<class charT, class traits, class Allocator>
1067 basic_string<charT,traits,Allocator>
1068 operator+(const basic_string<charT,traits,Allocator>& lhs,
1069 const basic_string<charT,traits,Allocator>& rhs);
1070 V template<class charT, class traits, class Allocator>
1071 basic_string<charT,traits,Allocator>
1072 operator+(const charT* lhs,
1073 const basic_string<charT,traits,Allocator>& rhs);
1074 V template<class charT, class traits, class Allocator>
1075 basic_string<charT,traits,Allocator>
1076 operator+(charT lhs, const basic_string<charT,traits,Allocator>& rhs);
1077 V template<class charT, class traits, class Allocator>
1078 basic_string<charT,traits,Allocator>
1079 operator+(const basic_string<charT,traits,Allocator>& lhs,
1081 V template<class charT, class traits, class Allocator>
1082 basic_string<charT,traits,Allocator>
1083 operator+(const basic_string<charT,traits,Allocator>& lhs, charT rhs);
1085 V template<class charT, class traits, class Allocator>
1086 bool operator==(const basic_string<charT,traits,Allocator>& lhs,
1087 const basic_string<charT,traits,Allocator>& rhs);
1088 V template<class charT, class traits, class Allocator>
1089 bool operator==(const charT* lhs,
1090 const basic_string<charT,traits,Allocator>& rhs);
1091 V template<class charT, class traits, class Allocator>
1092 bool operator==(const basic_string<charT,traits,Allocator>& lhs,
1094 V template<class charT, class traits, class Allocator>
1095 bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
1096 const basic_string<charT,traits,Allocator>& rhs);
1097 V template<class charT, class traits, class Allocator>
1098 bool operator!=(const charT* lhs,
1099 const basic_string<charT,traits,Allocator>& rhs);
1100 V template<class charT, class traits, class Allocator>
1101 bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
1103 V template<class charT, class traits, class Allocator>
1104 bool operator< (const basic_string<charT,traits,Allocator>& lhs,
1105 const basic_string<charT,traits,Allocator>& rhs);
1106 V template<class charT, class traits, class Allocator>
1107 bool operator< (const basic_string<charT,traits,Allocator>& lhs,
1109 V template<class charT, class traits, class Allocator>
1110 bool operator< (const charT* lhs,
1111 const basic_string<charT,traits,Allocator>& rhs);
1112 V template<class charT, class traits, class Allocator>
1113 bool operator> (const basic_string<charT,traits,Allocator>& lhs,
1114 const basic_string<charT,traits,Allocator>& rhs);
1115 V template<class charT, class traits, class Allocator>
1116 bool operator> (const basic_string<charT,traits,Allocator>& lhs,
1118 V template<class charT, class traits, class Allocator>
1119 bool operator> (const charT* lhs,
1120 const basic_string<charT,traits,Allocator>& rhs);
1121 V template<class charT, class traits, class Allocator>
1122 bool operator<=(const basic_string<charT,traits,Allocator>& lhs,
1123 const basic_string<charT,traits,Allocator>& rhs);
1124 V template<class charT, class traits, class Allocator>
1125 bool operator<=(const basic_string<charT,traits,Allocator>& lhs,
1127 V template<class charT, class traits, class Allocator>
1128 bool operator<=(const charT* lhs,
1129 const basic_string<charT,traits,Allocator>& rhs);
1130 V template<class charT, class traits, class Allocator>
1131 bool operator>=(const basic_string<charT,traits,Allocator>& lhs,
1132 const basic_string<charT,traits,Allocator>& rhs);
1133 V template<class charT, class traits, class Allocator>
1134 bool operator>=(const basic_string<charT,traits,Allocator>& lhs,
1136 V template<class charT, class traits, class Allocator>
1137 bool operator>=(const charT* lhs,
1138 const basic_string<charT,traits,Allocator>& rhs);
1140 // _lib.string.special_:
1141 V template<class charT, class traits, class Allocator>
1142 void swap(basic_string<charT,traits,Allocator>& lhs,
1143 basic_string<charT,traits,Allocator>& rhs);
1144 V template<class charT, class traits, class Allocator>
1145 basic_istream<charT,traits>&
1146 operator>>(basic_istream<charT,traits>& is,
1147 basic_string<charT,traits,Allocator>& str);
1148 T template<class charT, class traits, class Allocator>
1149 basic_ostream<charT, traits>&
1150 operator<<(basic_ostream<charT, traits>& os,
1151 const basic_string<charT,traits,Allocator>& str);
1152 V template<class charT, class traits, class Allocator>
1153 basic_istream<charT,traits>&
1154 getline(basic_istream<charT,traits>& is,
1155 basic_string<charT,traits,Allocator>& str,
1157 V template<class charT, class traits, class Allocator>
1158 basic_istream<charT,traits>&
1159 getline(basic_istream<charT,traits>& is,
1160 basic_string<charT,traits,Allocator>& str);
1161 V typedef basic_string<char> string;
1162 T typedef basic_string<wchar_t> wstring;
1165 21.3 Template class basic_string [lib.basic.string]
1168 template<class charT, class traits = char_traits<charT>,
1169 class Allocator = allocator<charT> >
1170 class basic_string {
1173 typedef traits traits_type;
1174 typedef typename traits::char_type value_type;
1175 typedef Allocator allocator_type;
1176 typedef typename Allocator::size_type size_type;
1177 typedef typename Allocator::difference_type difference_type;
1178 typedef typename Allocator::reference reference;
1179 typedef typename Allocator::const_reference const_reference;
1180 typedef typename Allocator::pointer pointer;
1181 typedef typename Allocator::const_pointer const_pointer;
1182 typedef implementation defined iterator;
1183 typedef implementation defined const_iterator;
1184 typedef std::reverse_iterator<iterator> reverse_iterator;
1185 typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
1186 static const size_type npos = -1;
1188 // _lib.string.cons_ construct/copy/destroy:
1189 V explicit basic_string(const Allocator& a = Allocator());
1190 V basic_string(const basic_string& str, size_type pos = 0,
1191 size_type n = npos, const Allocator& a = Allocator());
1192 V basic_string(const charT* s,
1193 size_type n, const Allocator& a = Allocator());
1194 V basic_string(const charT* s, const Allocator& a = Allocator());
1195 V basic_string(size_type n, charT c, const Allocator& a = Allocator());
1196 V template<class InputIterator>
1197 basic_string(InputIterator begin, InputIterator end,
1198 const Allocator& a = Allocator());
1200 V basic_string& operator=(const basic_string& str);
1201 V basic_string& operator=(const charT* s);
1202 V basic_string& operator=(charT c);
1203 // _lib.string.iterators_ iterators:
1205 V const_iterator begin() const;
1207 V const_iterator end() const;
1209 V reverse_iterator rbegin();
1210 V const_reverse_iterator rbegin() const;
1211 V reverse_iterator rend();
1212 V const_reverse_iterator rend() const;
1213 // _lib.string.capacity_ capacity:
1214 V size_type size() const;
1215 V size_type length() const;
1216 V size_type max_size() const;
1217 V void resize(size_type n, charT c);
1218 V void resize(size_type n);
1219 V size_type capacity() const;
1220 V void reserve(size_type res_arg = 0);
1222 V bool empty() const;
1223 // _lib.string.access_ element access:
1224 V const_reference operator[](size_type pos) const;
1225 V reference operator[](size_type pos);
1226 V const_reference at(size_type n) const;
1227 V reference at(size_type n);
1228 // _lib.string.modifiers_ modifiers:
1229 V basic_string& operator+=(const basic_string& str);
1230 V basic_string& operator+=(const charT* s);
1231 V basic_string& operator+=(charT c);
1232 V basic_string& append(const basic_string& str);
1233 V basic_string& append(const basic_string& str, size_type pos,
1235 V basic_string& append(const charT* s, size_type n);
1236 V basic_string& append(const charT* s);
1237 V basic_string& append(size_type n, charT c);
1238 V template<class InputIterator>
1239 basic_string& append(InputIterator first, InputIterator last);
1240 V void push_back(const charT);
1242 V basic_string& assign(const basic_string&);
1243 V basic_string& assign(const basic_string& str, size_type pos,
1245 V basic_string& assign(const charT* s, size_type n);
1246 V basic_string& assign(const charT* s);
1247 V basic_string& assign(size_type n, charT c);
1248 V template<class InputIterator>
1249 basic_string& assign(InputIterator first, InputIterator last);
1250 V basic_string& insert(size_type pos1, const basic_string& str);
1251 V basic_string& insert(size_type pos1, const basic_string& str,
1252 size_type pos2, size_type n);
1253 V basic_string& insert(size_type pos, const charT* s, size_type n);
1254 V basic_string& insert(size_type pos, const charT* s);
1255 V basic_string& insert(size_type pos, size_type n, charT c);
1256 V iterator insert(iterator p, charT c);
1257 V void insert(iterator p, size_type n, charT c);
1258 V template<class InputIterator>
1259 void insert(iterator p, InputIterator first, InputIterator last);
1260 V basic_string& erase(size_type pos = 0, size_type n = npos);
1261 V iterator erase(iterator position);
1262 V iterator erase(iterator first, iterator last);
1263 V basic_string& replace(size_type pos1, size_type n1,
1264 const basic_string& str);
1265 V basic_string& replace(size_type pos1, size_type n1,
1266 const basic_string& str,
1267 size_type pos2, size_type n2);
1268 V basic_string& replace(size_type pos, size_type n1, const charT* s,
1270 V basic_string& replace(size_type pos, size_type n1, const charT* s);
1271 V basic_string& replace(size_type pos, size_type n1, size_type n2,
1273 V basic_string& replace(iterator i1, iterator i2, const basic_string& str);
1274 V basic_string& replace(iterator i1, iterator i2, const charT* s,
1276 V basic_string& replace(iterator i1, iterator i2, const charT* s);
1277 V basic_string& replace(iterator i1, iterator i2,
1278 size_type n, charT c);
1279 V template<class InputIterator>
1280 basic_string& replace(iterator i1, iterator i2,
1281 InputIterator j1, InputIterator j2);
1282 V size_type copy(charT* s, size_type n, size_type pos = 0) const;
1283 V void swap(basic_string<charT,traits,Allocator>&);
1284 // _lib.string.ops_ string operations:
1285 V const charT* c_str() const; // explicit
1286 V const charT* data() const;
1287 V allocator_type get_allocator() const;
1288 V size_type find (const basic_string& str, size_type pos = 0) const;
1289 V size_type find (const charT* s, size_type pos, size_type n) const;
1290 V size_type find (const charT* s, size_type pos = 0) const;
1291 V size_type find (charT c, size_type pos = 0) const;
1292 V size_type rfind(const basic_string& str, size_type pos = npos) const;
1293 V size_type rfind(const charT* s, size_type pos, size_type n) const;
1294 V size_type rfind(const charT* s, size_type pos = npos) const;
1295 V size_type rfind(charT c, size_type pos = npos) const;
1297 V size_type find_first_of(const basic_string& str,
1298 size_type pos = 0) const;
1299 V size_type find_first_of(const charT* s,
1300 size_type pos, size_type n) const;
1301 V size_type find_first_of(const charT* s, size_type pos = 0) const;
1302 V size_type find_first_of(charT c, size_type pos = 0) const;
1303 V size_type find_last_of (const basic_string& str,
1304 size_type pos = npos) const;
1305 V size_type find_last_of (const charT* s,
1306 size_type pos, size_type n) const;
1307 V size_type find_last_of (const charT* s, size_type pos = npos) const;
1308 V size_type find_last_of (charT c, size_type pos = npos) const;
1309 V size_type find_first_not_of(const basic_string& str,
1310 size_type pos = 0) const;
1311 V size_type find_first_not_of(const charT* s, size_type pos,
1313 V size_type find_first_not_of(const charT* s, size_type pos = 0) const;
1314 V size_type find_first_not_of(charT c, size_type pos = 0) const;
1315 V size_type find_last_not_of (const basic_string& str,
1316 size_type pos = npos) const;
1317 V size_type find_last_not_of (const charT* s, size_type pos,
1319 V size_type find_last_not_of (const charT* s,
1320 size_type pos = npos) const;
1321 V size_type find_last_not_of (charT c, size_type pos = npos) const;
1322 V basic_string substr(size_type pos = 0, size_type n = npos) const;
1323 V int compare(const basic_string& str) const;
1324 V int compare(size_type pos1, size_type n1,
1325 const basic_string& str) const;
1326 V int compare(size_type pos1, size_type n1,
1327 const basic_string& str,
1328 size_type pos2, size_type n2) const;
1329 V int compare(const charT* s) const;
1330 V int compare(size_type pos1, size_type n1,
1331 const charT* s, size_type n2 = npos) const;
1335 21.4 Null-terminated sequence utilities [lib.c.strings]
1337 Table 10--Header <cctype> synopsis
1339 isalnum isdigit isprint isupper tolower
1340 X isalpha isgraph ispunct isxdigit toupper
1341 iscntrl islower isspace
1343 Table 11--Header <cwctype> synopsis
1345 X Macro: WEOF <cwctype>
1346 X Types: wctrans_t wctype_t wint_t <cwctype>
1348 X iswalnum iswctype iswlower iswspace towctrans wctrans
1349 X iswalpha iswdigit iswprint iswupper towlower wctype
1350 X iswcntrl iswgraph iswpunct iswxdigit towupper
1352 Table 12--Header <cstring> synopsis
1354 X Macro: NULL <cstring>
1355 X Type: size_t <cstring>
1357 X memchr strcat strcspn strncpy strtok
1358 X memcmp strchr strerror strpbrk strxfrm
1359 X memcpy strcmp strlen strrchr
1360 X memmove strcoll strncat strspn
1361 X memset strcpy strncmp strstr
1363 Table 13--Header <cwchar> synopsis
1364 Macros: NULL <cwchar> WCHAR_MAX WCHAR_MIN WEOF <cwchar>
1365 Types: mbstate_t wint_t <cwchar> size_t
1367 X btowc getwchar ungetwc wcscpy wcsrtombs wmemchr
1368 X fgetwc mbrlen vfwprintf wcscspn wcsspn wmemcmp
1369 X fgetws mbrtowc vswprintf wcsftime wcsstr wmemcpy
1370 X fputwc mbsinit vwprintf wcslen wcstod wmemmove
1371 X fputws mbsrtowcs wcrtomb wcsncat wcstok wmemset
1372 X fwide putwc wcscat wcsncmp wcstol wprintf
1373 X fwprintf putwchar wcschr wcsncpy wcstoul wscanf
1374 X fwscanf swprintf wcscmp wcspbrk wcsxfrm
1375 X getwc swscanf wcscoll wcsrchr wctob
1377 Table 14--Header <cstdlib> synopsis
1381 X atol mblen strtod wctomb
1382 X atof mbstowcs strtol wcstombs
1383 X atoi mbtowc strtoul
1385 X const char* strchr(const char* s, int c);
1386 X char* strchr( char* s, int c);
1388 X const char* strpbrk(const char* s1, const char* s2);
1389 X char* strpbrk( char* s1, const char* s2);
1391 X const char* strrchr(const char* s, int c);
1392 X char* strrchr( char* s, int c);
1394 X const char* strstr(const char* s1, const char* s2);
1395 X char* strstr( char* s1, const char* s2);
1397 X const void* memchr(const void* s, int c, size_t n);
1398 X void* memchr( void* s, int c, size_t n);
1400 X const wchar_t* wcschr(const wchar_t* s, wchar_t c);
1401 X wchar_t* wcschr( wchar_t* s, wchar_t c);
1403 X const wchar_t* wcspbrk(const wchar_t* s1, const wchar_t* s2);
1404 X wchar_t* wcspbrk( wchar_t* s1, const wchar_t* s2);
1406 X const wchar_t* wcsrchr(const wchar_t* s, wchar_t c);
1407 X wchar_t* wcsrchr( wchar_t* s, wchar_t c);
1409 X const wchar_t* wcsstr(const wchar_t* s1, const wchar_t* s2);
1410 X wchar_t* wcsstr( wchar_t* s1, const wchar_t* s2);
1412 X const wchar_t* wmemchr(const wchar_t* s, wchar_t c, size_t n);
1413 X wchar_t* wmemchr( wchar_t* s, wchar_t c, size_t n);
1415 [for initial efforts on the above, see shadow/string.h]
1417 22.1 Locales [lib.locales]
1419 Header <locale> synopsis
1421 // _lib.locale_, locale:
1423 T template <class Facet> const Facet& use_facet(const locale&);
1424 T template <class Facet> bool has_facet(const locale&) throw();
1426 // _lib.locale.convenience_, convenience interfaces:
1427 T template <class charT> bool isspace (charT c, const locale& loc);
1428 T template <class charT> bool isprint (charT c, const locale& loc);
1429 T template <class charT> bool iscntrl (charT c, const locale& loc);
1430 T template <class charT> bool isupper (charT c, const locale& loc);
1431 T template <class charT> bool islower (charT c, const locale& loc);
1432 T template <class charT> bool isalpha (charT c, const locale& loc);
1433 T template <class charT> bool isdigit (charT c, const locale& loc);
1434 T template <class charT> bool ispunct (charT c, const locale& loc);
1435 T template <class charT> bool isxdigit(charT c, const locale& loc);
1436 T template <class charT> bool isalnum (charT c, const locale& loc);
1437 T template <class charT> bool isgraph (charT c, const locale& loc);
1438 T template <class charT> charT toupper(charT c, const locale& loc);
1439 T template <class charT> charT tolower(charT c, const locale& loc);
1440 // _lib.category.ctype_ and _lib.facet.ctype.special_, ctype:
1442 T template <class charT> class ctype;
1443 T template <> class ctype<char>; // specialization
1444 S template <class charT> class ctype_byname;
1445 S template <> class ctype_byname<char>; // specialization
1446 T class codecvt_base;
1447 X template <class internT, class externT, class stateT> class codecvt;
1448 S template <class internT, class externT, class stateT> class codecvt_byname;
1449 // _lib.category.numeric_ and _lib.facet.numpunct_, numeric:
1450 X template <class charT, class InputIterator> class num_get;
1451 X template <class charT, class OutputIterator> class num_put;
1452 T template <class charT> class numpunct;
1453 S template <class charT> class numpunct_byname;
1454 // _lib.category.collate_, collation:
1455 T template <class charT> class collate;
1456 S template <class charT> class collate_byname;
1457 // _lib.category.time_, date and time:
1459 S template <class charT, class InputIterator> class time_get;
1460 S template <class charT, class InputIterator> class time_get_byname;
1461 S template <class charT, class OutputIterator> class time_put;
1462 S template <class charT, class OutputIterator> class time_put_byname;
1463 // _lib.category.monetary_, money:
1465 S template <class charT, class InputIterator> class money_get;
1466 S template <class charT, class OutputIterator> class money_put;
1467 S template <class charT, bool Intl> class moneypunct;
1468 S template <class charT, bool Intl> class moneypunct_byname;
1469 // _lib.category.messages_, message retrieval:
1470 T class messages_base;
1471 S template <class charT> class messages;
1472 S template <class charT> class messages_byname;
1475 22.1.1 Class locale [lib.locale]
1482 T typedef int category;
1483 T static const category // values assigned here are for exposition only
1485 T collate = 0x010, ctype = 0x020,
1486 T monetary = 0x040, numeric = 0x080,
1487 T time = 0x100, messages = 0x200,
1488 T all = collate | ctype | monetary | numeric | time | messages;
1489 // construct/copy/destroy:
1491 T locale(const locale& other) throw()
1492 X explicit locale(const char* std_name);
1493 X locale(const locale& other, const char* std_name, category);
1494 T template <class Facet> locale(const locale& other, Facet* f);
1495 T locale(const locale& other, const locale& one, category);
1496 T ~locale() throw(); // non-virtual
1497 T const locale& operator=(const locale& other) throw();
1498 T template <class Facet> locale combine(const locale& other) const;
1499 // locale operations:
1500 X basic_string<char> name() const;
1501 T bool operator==(const locale& other) const;
1502 T bool operator!=(const locale& other) const;
1503 T template <class charT, class Traits, class Allocator>
1504 bool operator()(const basic_string<charT,Traits,Allocator>& s1,
1505 const basic_string<charT,Traits,Allocator>& s2) const;
1506 // global locale objects:
1507 T static locale global(const locale&);
1508 T static const locale& classic();
1511 22.1.1.1 locale types [lib.locale.types]
1513 22.1.1.1.1 Type locale::category [lib.locale.category]
1515 T typedef int category;
1517 T none, collate, ctype, monetary, numeric, time, and messages
1519 [required locale members]
1520 T collate<char>, collate<wchar_t>
1521 T ctype<char>, ctype<wchar_t>
1522 T codecvt<char,char,mbstate_t>,
1523 S codecvt<wchar_t,char,mbstate_t>
1524 T moneypunct<char>, moneypunct<wchar_t>
1525 T moneypunct<char,true>, moneypunct<wchar_t,true>,
1526 S money_get<char>, money_get<wchar_t
1527 S money_put<char>, money_put<wchar_t>
1528 T numpunct<char>, numpunct<wchar_t>,
1529 X num_get<char>, num_get<wchar_t>
1530 X num_put<char>, num_put<wchar_t>
1531 S time_get<char>, time_get<wchar_t>,
1532 S time_put<char>, time_put<wchar_t>
1533 S messages<char>, messages<wchar_t>
1535 [required instantiations]
1536 S collate_byname<char>, collate_byname<wchar_t>
1537 S ctype_byname<char>, ctype_byname<wchar_t>
1538 S codecvt_byname<char,char,mbstate_t>,
1539 S codecvt_byname<wchar_t,char,mbstate_t>
1540 S moneypunct_byname<char,International>,
1541 S moneypunct_byname<wchar_t,International>,
1542 S money_get<C,InputIterator>,
1543 S money_put<C,OutputIterator>
1544 S numpunct_byname<char>, numpunct_byname<wchar_t>
1545 X num_get<C,InputIterator>, num_put<C,OutputIterator>
1546 S time_get<char,InputIterator>,
1547 S time_get_byname<char,InputIterator>,
1548 S time_get<wchar_t,OutputIterator>,
1549 S time_get_byname<wchar_t,OutputIterator>,
1550 S time_put<char,OutputIterator>,
1551 S time_put_byname<char,OutputIterator>,
1552 S time_put<wchar_t,OutputIterator>
1553 S time_put_byname<wchar_t,OutputIterator>
1554 S messages_byname<char>, messages_byname<wchar_t>
1557 22.1.1.1.2 Class locale::facet [lib.locale.facet]
1559 T class locale::facet {
1561 T explicit facet(size_t refs = 0);
1564 T facet(const facet&); // not defined
1565 T void operator=(const facet&); // not defined
1570 22.1.1.1.3 Class locale::id [lib.locale.id]
1572 T class locale::id {
1576 T void operator=(const id&); // not defined
1577 T id(const id&); // not defined
1582 22.2.1 The ctype category [lib.category.ctype]
1584 T class ctype_base {
1586 T enum mask { // numeric values are for exposition only.
1587 T space=, print=, cntrl=, upper=, lower=,
1588 T alpha=, digit=, punct=, xdigit=,
1594 22.2.1.1 Template class ctype [lib.locale.ctype]
1596 T template <class charT>
1597 class ctype : public locale::facet, public ctype_base {
1599 T typedef charT char_type;
1600 T explicit ctype(size_t refs = 0);
1601 T bool is(mask m, charT c) const;
1602 T const charT* is(const charT* low, const charT* high, mask* vec) const;
1603 T const charT* scan_is(mask m,
1604 const charT* low, const charT* high) const;
1605 T const charT* scan_not(mask m,
1606 const charT* low, const charT* high) const;
1607 T charT toupper(charT c) const;
1608 T const charT* toupper(charT* low, const charT* high) const;
1609 T charT tolower(charT c) const;
1610 T const charT* tolower(charT* low, const charT* high) const;
1611 T charT widen(char c) const;
1612 T const char* widen(const char* low, const char* high, charT* to) const;
1613 T char narrow(charT c, char dfault) const;
1614 T const charT* narrow(const charT* low, const charT*, char dfault,
1616 T static locale::id id;
1619 T ~ctype(); // virtual
1620 T virtual bool do_is(mask m, charT c) const;
1621 T virtual const charT* do_is(const charT* low, const charT* high,
1623 T virtual const charT* do_scan_is(mask m,
1624 const charT* low, const charT* high) const;
1625 T virtual const charT* do_scan_not(mask m,
1626 const charT* low, const charT* high) const;
1627 T virtual charT do_toupper(charT) const;
1628 T virtual const charT* do_toupper(charT* low, const charT* high) const;
1629 T virtual charT do_tolower(charT) const;
1630 T virtual const charT* do_tolower(charT* low, const charT* high) const;
1631 T virtual charT do_widen(char) const;
1632 T virtual const char* do_widen(const char* low, const char* high,
1634 T virtual char do_narrow(charT, char dfault) const;
1635 T virtual const charT* do_narrow(const charT* low, const charT* high,
1636 char dfault, char* dest) const;
1640 22.2.1.2 Template class ctype_byname [lib.locale.ctype.byname]
1642 X template <class charT>
1643 class ctype_byname : public ctype<charT> {
1645 T typedef ctype<charT>::mask mask;
1646 S explicit ctype_byname(const char*, size_t refs = 0);
1648 S ~ctype_byname(); // virtual
1649 S virtual bool do_is(mask m, charT c) const;
1650 S virtual const charT* do_is(const charT* low, const charT* high,
1652 S virtual const char* do_scan_is(mask m,
1653 const charT* low, const charT* high) const;
1654 S virtual const char* do_scan_not(mask m,
1655 const charT* low, const charT* high) const;
1656 S virtual charT do_toupper(charT) const;
1657 S virtual const charT* do_toupper(charT* low, const charT* high) const;
1658 S virtual charT do_tolower(charT) const;
1659 S virtual const charT* do_tolower(charT* low, const charT* high) const;
1660 S virtual charT do_widen(char) const;
1661 S virtual const char* do_widen(const char* low, const char* high,
1663 S virtual char do_narrow(charT, char dfault) const;
1664 S virtual const charT* do_narrow(const charT* low, const charT* high,
1665 char dfault, char* dest) const;
1668 22.2.1.3 ctype specializations [lib.facet.ctype.special]
1670 T template <> class ctype<char>
1671 : public locale::facet, public ctype_base {
1673 T typedef char char_type;
1674 T explicit ctype(const mask* tab = 0, bool del = false,
1676 T bool is(mask m, char c) const;
1677 T const char* is(const char* low, const char* high, mask* vec) const;
1678 T const char* scan_is (mask m,
1679 const char* low, const char* high) const;
1680 T const char* scan_not(mask m,
1681 const char* low, const char* high) const;
1682 T char toupper(char c) const;
1683 T const char* toupper(char* low, const char* high) const;
1684 T char tolower(char c) const;
1685 T const char* tolower(char* low, const char* high) const;
1686 T char widen(char c) const;
1687 T const char* widen(const char* low, const char* high, char* to) const;
1688 T char narrow(char c, char dfault) const;
1689 T const char* narrow(const char* low, const char* high, char dfault,
1691 T static locale::id id;
1692 T static const size_t table_size = IMPLEMENTATION_DEFINED;
1695 T const mask* table() const throw();
1696 T static const mask* classic_table() throw();
1697 T ~ctype(); // virtual
1698 T virtual char do_toupper(char c) const;
1699 T virtual const char* do_toupper(char* low, const char* high) const;
1700 T virtual char do_tolower(char c) const;
1701 T virtual const char* do_tolower(char* low, const char* high) const;
1703 T virtual char do_widen(char c) const;
1704 T virtual const char* do_widen(const char* low,
1707 T virtual char do_narrow(char c, char dfault) const;
1708 T virtual const char* do_narrow(const char* low,
1710 char dfault, char* to) const;
1714 22.2.1.4 Class [lib.locale.ctype.byname.special]
1717 X template <> class ctype_byname<char> : public ctype<char> {
1719 S explicit ctype_byname(const char*, size_t refs = 0);
1721 S ~ctype_byname(); // virtual
1722 S virtual char do_toupper(char c) const;
1723 S virtual const char* do_toupper(char* low, const char* high) const;
1724 S virtual char do_tolower(char c) const;
1725 S virtual const char* do_tolower(char* low, const char* high) const;
1727 S virtual char do_widen(char c) const;
1728 S virtual const char* do_widen(char* low,
1731 S virtual char do_widen(char c) const;
1732 S virtual const char* do_widen(char* low, const char* high) const;
1738 22.2.1.5 Template class codecvt [lib.locale.codecvt]
1740 T class codecvt_base {
1742 T enum result { ok, partial, error, noconv };
1745 T template <class internT, class externT, class stateT>
1746 class codecvt : public locale::facet, public codecvt_base {
1748 T typedef internT intern_type;
1749 T typedef externT extern_type;
1750 T typedef stateT state_type;
1751 T explicit codecvt(size_t refs = 0)
1752 T result out(stateT& state,
1753 const internT* from, const internT* from_end, const internT*& from_next,
1754 externT* to, externT* to_limit, externT*& to_next) const;
1755 T result unshift(stateT& state,
1756 externT* to, externT* to_limit, externT*& to_next) const;
1757 T result in(stateT& state,
1758 const externT* from, const externT* from_end, const externT*& from_next,
1759 internT* to, internT* to_limit, internT*& to_next) const;
1760 T int encoding() const throw();
1761 T bool always_noconv() const throw();
1762 T int length(const stateT&, const externT* from, const externT* end,
1764 T int max_length() const throw();
1765 T static locale::id id;
1768 T ~codecvt(); // virtual
1769 T virtual result do_out(stateT& state,
1770 const internT* from, const internT* from_end, const internT*& from_next,
1771 externT* to, externT* to_limit, externT*& to_next) const;
1772 T virtual result do_in(stateT& state,
1773 T const externT* from, const externT* from_end, const externT*& from_next,
1774 internT* to, internT* to_limit, internT*& to_next) const;
1775 T virtual result do_unshift(stateT& state,
1776 externT* to, externT* to_limit, externT*& to_next) const;
1777 T virtual int do_encoding() const throw();
1778 T virtual bool do_always_noconv() const throw();
1779 T virtual int do_length(const stateT&, const externT* from,
1780 const externT* end, size_t max) const;
1781 T virtual int do_max_length() const throw();
1786 22.2.1.6 Template class [lib.locale.codecvt.byname]
1789 X template <class internT, class externT, class stateT>
1790 class codecvt_byname : public codecvt<internT, externT, stateT> {
1792 S explicit codecvt_byname(const char*, size_t refs = 0);
1794 S ~codecvt_byname(); // virtual
1795 S virtual result do_out(stateT& state,
1796 const internT* from, const internT* from_end, const internT*& from_next,
1797 externT* to, externT* to_limit, externT*& to_next) const;
1798 S virtual result do_in(stateT& state,
1799 const externT* from, const externT* from_end, const externT*& from_next,
1800 internT* to, internT* to_limit, internT*& to_next) const;
1801 S virtual result do_unshift(stateT& state,
1802 externT* to, externT* to_limit, externT*& to_next) const;
1803 S virtual int do_encoding() const throw();
1804 S virtual bool do_always_noconv() const throw();
1805 S virtual int do_length(const stateT&, const externT* from,
1806 const externT* end, size_t max) const;
1807 S virtual result do_unshift(stateT& state,
1808 externT* to, externT* to_limit, externT*& to_next) const;
1809 S virtual int do_max_length() const throw();
1813 22.2.2.1 Template class num_get [lib.locale.num.get]
1815 X template <class charT, class InputIterator = istreambuf_iterator<charT> >
1816 class num_get : public locale::facet {
1818 T typedef charT char_type;
1819 T typedef InputIterator iter_type;
1820 T explicit num_get(size_t refs = 0);
1821 T iter_type get(iter_type in, iter_type end, ios_base&,
1822 ios_base::iostate& err, bool& v) const;
1823 T iter_type get(iter_type in, iter_type end, ios_base& ,
1824 ios_base::iostate& err, long& v) const;
1825 T iter_type get(iter_type in, iter_type end, ios_base&,
1826 ios_base::iostate& err, unsigned short& v) const;
1827 T iter_type get(iter_type in, iter_type end, ios_base&,
1828 ios_base::iostate& err, unsigned int& v) const;
1829 T iter_type get(iter_type in, iter_type end, ios_base&,
1830 ios_base::iostate& err, unsigned long& v) const;
1831 T iter_type get(iter_type in, iter_type end, ios_base&,
1832 ios_base::iostate& err, float& v) const;
1833 T iter_type get(iter_type in, iter_type end, ios_base&,
1834 ios_base::iostate& err, double& v) const;
1835 T iter_type get(iter_type in, iter_type end, ios_base&,
1836 ios_base::iostate& err, long double& v) const;
1837 T iter_type get(iter_type in, iter_type end, ios_base&,
1838 ios_base::iostate& err, void*& v) const;
1839 T static locale::id id;
1842 T ~num_get(); // virtual
1843 T virtual iter_type do_get(iter_type, iter_type, ios_base&,
1844 ios_base::iostate& err, bool& v) const;
1845 S virtual iter_type do_get(iter_type, iter_type, ios_base&,
1846 ios_base::iostate& err, long& v) const;
1847 S virtual iter_type do_get(iter_type, iter_type, ios_base&,
1848 ios_base::iostate& err, unsigned short& v) const;
1849 S virtual iter_type do_get(iter_type, iter_type, ios_base&,
1850 ios_base::iostate& err, unsigned int& v) const;
1851 S virtual iter_type do_get(iter_type, iter_type, ios_base&,
1852 ios_base::iostate& err, unsigned long& v) const;
1853 S virtual iter_type do_get(iter_type, iter_type, ios_base&,
1854 ios_base::iostate& err, float& v) const;
1855 S virtual iter_type do_get(iter_type, iter_type, ios_base&,
1856 ios_base::iostate& err, double& v) const;
1857 S virtual iter_type do_get(iter_type, iter_type, ios_base&,
1858 ios_base::iostate& err, long double& v) const;
1859 S virtual iter_type do_get(iter_type, iter_type, ios_base&,
1860 ios_base::iostate& err, void*& v) const;
1865 22.2.2.2 Template class num_put [lib.locale.nm.put]
1867 X template <class charT, class OutputIterator = ostreambuf_iterator<charT> >
1868 class num_put : public locale::facet {
1870 T typedef charT char_type;
1871 T typedef OutputIterator iter_type;
1872 T explicit num_put(size_t refs = 0);
1873 T iter_type put(iter_type s, ios_base& f, char_type fill, bool v) const;
1874 T iter_type put(iter_type s, ios_base& f, char_type fill, long v) const;
1875 T iter_type put(iter_type s, ios_base& f, char_type fill,
1876 unsigned long v) const;
1877 T iter_type put(iter_type s, ios_base& f, char_type fill,
1879 T iter_type put(iter_type s, ios_base& f, char_type fill,
1880 long double v) const;
1881 T iter_type put(iter_type s, ios_base& f, char_type fill,
1882 const void* v) const;
1883 T static locale::id id;
1885 T ~num_put(); // virtual
1886 T virtual iter_type do_put(iter_type, ios_base&, char_type fill,
1888 T virtual iter_type do_put(iter_type, ios_base&, char_type fill,
1890 T virtual iter_type do_put(iter_type, ios_base&, char_type fill,
1891 unsigned long) const;
1892 S virtual iter_type do_put(iter_type, ios_base&, char_type fill,
1894 S virtual iter_type do_put(iter_type, ios_base&, char_type fill,
1895 long double v) const;
1896 T virtual iter_type do_put(iter_type, ios_base&, char_type fill,
1897 const void* v) const;
1901 22.2.3.1 Template class numpunct [lib.locale.numpunct]
1903 T template <class charT>
1904 class numpunct : public locale::facet {
1906 T typedef charT char_type;
1907 T typedef basic_string<charT> string_type;
1908 T explicit numpunct(size_t refs = 0);
1909 T char_type decimal_point() const;
1910 T char_type thousands_sep() const;
1911 T string grouping() const;
1912 T string_type truename() const;
1913 T string_type falsename() const;
1914 T static locale::id id;
1916 T ~numpunct(); // virtual
1917 T virtual char_type do_decimal_point() const;
1918 T virtual char_type do_thousands_sep() const;
1919 T virtual string do_grouping() const;
1920 T virtual string_type do_truename() const; // for bool
1921 T virtual string_type do_falsename() const; // for bool
1927 22.2.3.2 Template class [lib.locale.numpunct.byname]
1930 X template <class charT>
1931 class numpunct_byname : public numpunct<charT> {
1932 // this class is specialized for char and wchar_t.
1934 T typedef charT char_type;
1935 T typedef basic_string<charT> string_type;
1936 S explicit numpunct_byname(const char*, size_t refs = 0);
1938 S ~numpunct_byname(); // virtual
1939 S virtual char_type do_decimal_point() const;
1940 S virtual char_type do_thousands_sep() const;
1941 S virtual string do_grouping() const;
1942 S virtual string_type do_truename() const; // for bool
1943 S virtual string_type do_falsename() const; // for bool
1947 22.2.4.1 Template class collate [lib.locale.collate]
1949 T template <class charT>
1950 class collate : public locale::facet {
1952 T typedef charT char_type;
1953 T typedef basic_string<charT> string_type;
1954 T explicit collate(size_t refs = 0);
1955 T int compare(const charT* low1, const charT* high1,
1956 const charT* low2, const charT* high2) const;
1957 T string_type transform(const charT* low, const charT* high) const;
1958 T long hash(const charT* low, const charT* high) const;
1959 T static locale::id id;
1961 T ~collate(); // virtual
1962 T virtual int do_compare(const charT* low1, const charT* high1,
1963 const charT* low2, const charT* high2) const;
1964 T virtual string_type do_transform
1965 (const charT* low, const charT* high) const;
1966 T virtual long do_hash (const charT* low, const charT* high) const;
1970 22.2.4.2 Template class [lib.locale.collate.byname]
1973 X template <class charT>
1974 class collate_byname : public collate<charT> {
1976 T typedef basic_string<charT> string_type;
1977 T explicit collate_byname(const char*, size_t refs = 0);
1979 S ~collate_byname(); // virtual
1980 S virtual int do_compare(const charT* low1, const charT* high1,
1981 const charT* low2, const charT* high2) const;
1982 S virtual string_type do_transform
1983 (const charT* low, const charT* high) const;
1984 S virtual long do_hash (const charT* low, const charT* high) const;
1988 22.2.5.1 Template class time_get [lib.locale.time.get]
1992 T enum dateorder { no_order, dmy, mdy, ymd, ydm };
1995 [Note: semantics of time_get members are implementation-defined.
1996 To complete implementation requires documenting behavior.]
1998 X template <class charT, class InputIterator = istreambuf_iterator<charT> >
1999 class time_get : public locale::facet, public time_base {
2001 T typedef charT char_type;
2002 T typedef InputIterator iter_type;
2003 T explicit time_get(size_t refs = 0);
2005 T dateorder date_order() const { return do_date_order(); }
2006 T iter_type get_time(iter_type s, iter_type end, ios_base& f,
2007 ios_base::iostate& err, tm* t) const;
2008 T iter_type get_date(iter_type s, iter_type end, ios_base& f,
2009 ios_base::iostate& err, tm* t) const;
2010 T iter_type get_weekday(iter_type s, iter_type end, ios_base& f,
2011 ios_base::iostate& err, tm* t) const;
2012 T iter_type get_monthname(iter_type s, iter_type end, ios_base& f,
2013 ios_base::iostate& err, tm* t) const;
2014 T iter_type get_year(iter_type s, iter_type end, ios_base& f,
2015 ios_base::iostate& err, tm* t) const;
2016 T static locale::id id;
2018 ~time_get(); // virtual
2019 X virtual dateorder do_date_order() const;
2020 S virtual iter_type do_get_time(iter_type s, iter_type end, ios_base&,
2021 ios_base::iostate& err, tm* t) const;
2022 S virtual iter_type do_get_date(iter_type s, iter_type end, ios_base&,
2023 ios_base::iostate& err, tm* t) const;
2024 S virtual iter_type do_get_weekday(iter_type s, iter_type end, ios_base&,
2025 ios_base::iostate& err, tm* t) const;
2026 S virtual iter_type do_get_monthname(iter_type s, ios_base&,
2027 ios_base::iostate& err, tm* t) const;
2028 S virtual iter_type do_get_year(iter_type s, iter_type end, ios_base&,
2029 ios_base::iostate& err, tm* t) const;
2034 22.2.5.2 Template class [lib.locale.time.get.byname]
2037 X template <class charT, class InputIterator = istreambuf_iterator<charT> >
2038 class time_get_byname : public time_get<charT, InputIterator> {
2040 T typedef time_base::dateorder dateorder;
2041 T typedef InputIterator iter_type
2043 S explicit time_get_byname(const char*, size_t refs = 0);
2045 S ~time_get_byname(); // virtual
2046 S virtual dateorder do_date_order() const;
2047 S virtual iter_type do_get_time(iter_type s, iter_type end, ios_base&,
2048 ios_base::iostate& err, tm* t) const;
2049 S virtual iter_type do_get_date(iter_type s, iter_type end, ios_base&,
2050 ios_base::iostate& err, tm* t) const;
2051 T virtual iter_type do_get_weekday(iter_type s, iter_type end, ios_base&,
2052 ios_base::iostate& err, tm* t) const;
2053 T virtual iter_type do_get_monthname(iter_type s, iter_type end, ios_base&,
2054 ios_base::iostate& err, tm* t) const;
2055 S virtual iter_type do_get_year(iter_type s, iter_type end, ios_base&,
2056 ios_base::iostate& err, tm* t) const;
2060 22.2.5.3 Template class time_put [lib.locale.time.put]
2062 X template <class charT, class OutputIterator = ostreambuf_iterator<charT> >
2063 class time_put : public locale::facet {
2065 T typedef charT char_type;
2066 T typedef OutputIterator iter_type;
2067 T explicit time_put(size_t refs = 0);
2068 // the following is implemented in terms of other member functions.
2069 S iter_type put(iter_type s, ios_base& f, char_type fill, const tm* tmb,
2070 const charT* pattern, const charT* pat_end) const;
2071 T iter_type put(iter_type s, ios_base& f, char_type fill,
2072 const tm* tmb, char format, char modifier = 0) const;
2073 T static locale::id id;
2075 T ~time_put(); // virtual
2076 S virtual iter_type do_put(iter_type s, ios_base&, char_type, const tm* t,
2077 char format, char modifier) const;
2082 22.2.5.4 Template class [lib.locale.time.put.byname]
2085 T template <class charT, class OutputIterator = ostreambuf_iterator<charT> >
2086 class time_put_byname : public time_put<charT, OutputIterator>
2089 T typedef charT char_type;
2090 T typedef OutputIterator iter_type;
2092 T explicit time_put_byname(const char*, size_t refs = 0);
2094 T ~time_put_byname(); // virtual
2095 S virtual iter_type do_put(iter_type s, ios_base&, char_type, const tm* t,
2096 char format, char modifier) const;
2100 22.2.6.1 Template class money_get [lib.locale.money.get]
2102 X template <class charT,
2103 class InputIterator = istreambuf_iterator<charT> >
2104 class money_get : public locale::facet {
2106 T typedef charT char_type;
2107 T typedef InputIterator iter_type;
2108 T typedef basic_string<charT> string_type;
2109 T explicit money_get(size_t refs = 0);
2110 T iter_type get(iter_type s, iter_type end, bool intl,
2111 ios_base& f, ios_base::iostate& err,
2112 long double& units) const;
2113 T iter_type get(iter_type s, iter_type end, bool intl,
2114 ios_base& f, ios_base::iostate& err,
2115 string_type& digits) const;
2116 T static locale::id id;
2118 T ~money_get(); // virtual
2119 S virtual iter_type do_get(iter_type, iter_type, bool, ios_base&,
2120 ios_base::iostate& err, long double& units) const;
2121 S virtual iter_type do_get(iter_type, iter_type, bool, ios_base&,
2122 ios_base::iostate& err, string_type& digits) const;
2125 22.2.6.2 Template class money_put [lib.locale.money.put]
2127 X template <class charT,
2128 class OutputIterator = ostreambuf_iterator<charT> >
2129 class money_put : public locale::facet {
2131 T typedef charT char_type;
2132 T typedef OutputIterator iter_type;
2133 T typedef basic_string<charT> string_type;
2134 T explicit money_put(size_t refs = 0);
2135 T iter_type put(iter_type s, bool intl, ios_base& f,
2136 char_type fill, long double units) const;
2137 T iter_type put(iter_type s, bool intl, ios_base& f,
2138 char_type fill, const string_type& digits) const;
2139 T static locale::id id;
2142 T ~money_put(); // virtual
2144 do_put(iter_type, bool, ios_base&, char_type fill,
2145 long double units) const;
2147 do_put(iter_type, bool, ios_base&, char_type fill,
2148 const string_type& digits) const;
2152 22.2.6.3 Template class moneypunct [lib.locale.moneypunct]
2154 T class money_base {
2156 T enum part { none, space, symbol, sign, value };
2157 T struct pattern { char field[4]; };
2160 X template <class charT, bool International = false>
2161 class moneypunct : public locale::facet, public money_base {
2163 T typedef charT char_type;
2164 T typedef basic_string<charT> string_type;
2165 T explicit moneypunct(size_t refs = 0);
2166 T charT decimal_point() const;
2167 T charT thousands_sep() const;
2168 T string grouping() const;
2169 T string_type curr_symbol() const;
2170 T string_type positive_sign() const;
2171 T string_type negative_sign() const;
2172 T int frac_digits() const;
2173 T pattern pos_format() const;
2174 T pattern neg_format() const;
2175 T static locale::id id;
2176 T static const bool intl = International;
2178 T ~moneypunct(); // virtual
2179 S virtual charT do_decimal_point() const;
2180 S virtual charT do_thousands_sep() const;
2181 S virtual string do_grouping() const;
2182 S virtual string_type do_curr_symbol() const;
2183 S virtual string_type do_positive_sign() const;
2184 S virtual string_type do_negative_sign() const;
2185 S virtual int do_frac_digits() const;
2186 T virtual pattern do_pos_format() const;
2187 T virtual pattern do_neg_format() const;
2191 22.2.6.4 Template class [lib.locale.moneypunct.byname]
2194 X template <class charT, bool Intl = false>
2195 class moneypunct_byname : public moneypunct<charT, Intl> {
2197 T typedef money_base::pattern pattern;
2198 T typedef basic_string<charT> string_type;
2200 T explicit moneypunct_byname(const char*, size_t refs = 0);
2202 T ~moneypunct_byname(); // virtual
2203 S virtual charT do_decimal_point() const;
2204 S virtual charT do_thousands_sep() const;
2205 S virtual string do_grouping() const;
2206 S virtual string_type do_curr_symbol() const;
2207 S virtual string_type do_positive_sign() const;
2208 S virtual string_type do_negative_sign() const;
2209 S virtual int do_frac_digits() const;
2210 S virtual pattern do_pos_format() const;
2211 S virtual pattern do_neg_format() const;
2214 22.2.7.1 Template class messages [lib.locale.messages]
2216 T class messages_base {
2218 T typedef int catalog;
2221 X template <class charT>
2222 class messages : public locale::facet, public messages_base {
2224 T typedef charT char_type;
2225 T typedef basic_string<charT> string_type;
2226 T explicit messages(size_t refs = 0);
2227 T catalog open(const basic_string<char>& fn, const locale&) const;
2228 T string_type get(catalog c, int set, int msgid,
2229 const string_type& dfault) const;
2230 T void close(catalog c) const;
2231 T static locale::id id;
2233 T ~messages(); // virtual
2234 S virtual catalog do_open(const basic_string<char>&, const locale&) const;
2235 S virtual string_type do_get(catalog, int set, int msgid,
2236 const string_type& dfault) const;
2237 S virtual void do_close(catalog) const;
2240 22.2.7.2 Template class [lib.locale.messages.byname]
2244 X template <class charT>
2245 class messages_byname : public messages<charT> {
2247 T typedef messages_base::catalog catalog;
2248 T typedef basic_string<charT> string_type;
2250 T explicit messages_byname(const char*, size_t refs = 0);
2252 T ~messages_byname(); // virtual
2253 S virtual catalog do_open(const basic_string<char>&, const locale&) const;
2254 S virtual string_type do_get(catalog, int set, int msgid,
2255 const string_type& dfault) const;
2256 S virtual void do_close(catalog) const;
2260 22.3 C Library Locales [lib.c.locales]
2263 Table 13--Header <clocale> synopsis
2265 X LC_ALL LC_COLLATE LC_CTYPE
2266 X LC_MONETARY LC_NUMERIC LC_TIME
2269 X Functions: localeconv setlocale
2272 23.2 Sequences [lib.sequences]
2274 <deque>, <list>, <queue>, <stack>, and <vector>.
2276 Header <deque> synopsis
2278 T template <class T, class Allocator = allocator<T> > class deque;
2279 T template <class T, class Allocator>
2280 bool operator==(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
2281 T template <class T, class Allocator>
2282 bool operator< (const deque<T,Allocator>& x, const deque<T,Allocator>& y);
2283 T template <class T, class Allocator>
2284 bool operator!=(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
2285 T template <class T, class Allocator>
2286 bool operator> (const deque<T,Allocator>& x, const deque<T,Allocator>& y);
2287 T template <class T, class Allocator>
2288 bool operator>=(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
2289 T template <class T, class Allocator>
2290 bool operator<=(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
2291 T template <class T, class Allocator>
2292 void swap(deque<T,Allocator>& x, deque<T,Allocator>& y);
2295 Header <list> synopsis
2297 T template <class T, class Allocator = allocator<T> > class list;
2298 T template <class T, class Allocator>
2299 bool operator==(const list<T,Allocator>& x, const list<T,Allocator>& y);
2300 T template <class T, class Allocator>
2301 bool operator< (const list<T,Allocator>& x, const list<T,Allocator>& y);
2302 T template <class T, class Allocator>
2303 bool operator!=(const list<T,Allocator>& x, const list<T,Allocator>& y);
2304 T template <class T, class Allocator>
2305 bool operator> (const list<T,Allocator>& x, const list<T,Allocator>& y);
2306 T template <class T, class Allocator>
2307 bool operator>=(const list<T,Allocator>& x, const list<T,Allocator>& y);
2308 T template <class T, class Allocator>
2309 bool operator<=(const list<T,Allocator>& x, const list<T,Allocator>& y);
2310 T template <class T, class Allocator>
2311 void swap(list<T,Allocator>& x, list<T,Allocator>& y);
2314 Header <queue> synopsis
2317 T template <class T, class Container = deque<T> > class queue;
2318 T template <class T, class Container>
2319 bool operator==(const queue<T, Container>& x,
2320 const queue<T, Container>& y);
2321 T template <class T, class Container>
2322 bool operator< (const queue<T, Container>& x,
2323 const queue<T, Container>& y);
2324 T template <class T, class Container>
2325 bool operator!=(const queue<T, Container>& x,
2326 const queue<T, Container>& y);
2327 T template <class T, class Container>
2328 bool operator> (const queue<T, Container>& x,
2329 const queue<T, Container>& y);
2330 T template <class T, class Container>
2331 bool operator>=(const queue<T, Container>& x,
2332 const queue<T, Container>& y);
2333 T template <class T, class Container>
2334 bool operator<=(const queue<T, Container>& x,
2335 const queue<T, Container>& y);
2336 T template <class T, class Container = vector<T>,
2337 class Compare = less<typename Container::value_type> >
2338 T class priority_queue;
2341 Header <stack> synopsis
2344 T template <class T, class Container = deque<T> > class stack;
2345 T template <class T, class Container>
2346 bool operator==(const stack<T, Container>& x,
2347 const stack<T, Container>& y);
2348 T template <class T, class Container>
2349 bool operator< (const stack<T, Container>& x,
2350 const stack<T, Container>& y);
2351 T template <class T, class Container>
2352 bool operator!=(const stack<T, Container>& x,
2353 const stack<T, Container>& y);
2354 T template <class T, class Container>
2355 bool operator> (const stack<T, Container>& x,
2356 const stack<T, Container>& y);
2357 T template <class T, class Container>
2358 bool operator>=(const stack<T, Container>& x,
2359 const stack<T, Container>& y);
2360 T template <class T, class Container>
2361 bool operator<=(const stack<T, Container>& x,
2362 const stack<T, Container>& y);
2365 Header <vector> synopsis
2367 T template <class T, class Allocator = allocator<T> > class vector;
2369 T template <class T, class Allocator>
2370 bool operator==(const vector<T,Allocator>& x,
2371 const vector<T,Allocator>& y);
2372 T template <class T, class Allocator>
2373 bool operator< (const vector<T,Allocator>& x,
2374 const vector<T,Allocator>& y);
2375 T template <class T, class Allocator>
2376 bool operator!=(const vector<T,Allocator>& x,
2377 const vector<T,Allocator>& y);
2378 T template <class T, class Allocator>
2379 bool operator> (const vector<T,Allocator>& x,
2380 const vector<T,Allocator>& y);
2381 T template <class T, class Allocator>
2382 bool operator>=(const vector<T,Allocator>& x,
2383 const vector<T,Allocator>& y);
2384 T template <class T, class Allocator>
2385 bool operator<=(const vector<T,Allocator>& x,
2386 const vector<T,Allocator>& y);
2387 T template <class T, class Allocator>
2388 void swap(vector<T,Allocator>& x, vector<T,Allocator>& y);
2390 T template <class Allocator> class vector<bool,Allocator>;
2391 T template <class Allocator>
2392 bool operator==(const vector<bool,Allocator>& x,
2393 const vector<bool,Allocator>& y);
2394 T template <class Allocator>
2395 bool operator< (const vector<bool,Allocator>& x,
2396 const vector<bool,Allocator>& y);
2397 T template <class Allocator>
2398 bool operator!=(const vector<bool,Allocator>& x,
2399 const vector<bool,Allocator>& y);
2400 T template <class Allocator>
2401 bool operator> (const vector<bool,Allocator>& x,
2402 const vector<bool,Allocator>& y);
2403 T template <class Allocator>
2404 bool operator>=(const vector<bool,Allocator>& x,
2405 const vector<bool,Allocator>& y);
2406 T template <class Allocator>
2407 bool operator<=(const vector<bool,Allocator>& x,
2408 const vector<bool,Allocator>& y);
2409 T template <class Allocator>
2410 void swap(vector<bool,Allocator>& x, vector<bool,Allocator>& y);
2413 23.2.1 Template class deque [lib.deque]
2415 template <class T, class Allocator = allocator<T> >
2419 T typedef typename Allocator::reference reference;
2420 T typedef typename Allocator::const_reference const_reference;
2421 T typedef implementation defined iterator;
2422 T typedef implementation defined const_iterator;
2423 T typedef implementation defined size_type;
2424 T typedef implementation defined difference_type;
2425 T typedef T value_type;
2426 T typedef Allocator allocator_type;
2427 T typedef typename Allocator::pointer pointer;
2428 T typedef typename Allocator::const_pointer const_pointer;
2429 T typedef std::reverse_iterator<iterator> reverse_iterator;
2430 T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
2431 // _lib.deque.cons_ construct/copy/destroy:
2432 T explicit deque(const Allocator& = Allocator());
2433 T explicit deque(size_type n, const T& value = T(),
2434 const Allocator& = Allocator());
2435 T template <class InputIterator>
2436 deque(InputIterator first, InputIterator last,
2437 const Allocator& = Allocator());
2438 T deque(const deque<T,Allocator>& x);
2440 T deque<T,Allocator>& operator=(const deque<T,Allocator>& x);
2441 T template <class InputIterator>
2442 void assign(InputIterator first, InputIterator last);
2443 T void assign(size_type n, const T& t);
2444 T allocator_type get_allocator() const;
2447 T const_iterator begin() const;
2449 T const_iterator end() const;
2450 T reverse_iterator rbegin();
2451 T const_reverse_iterator rbegin() const;
2452 T reverse_iterator rend();
2453 T const_reverse_iterator rend() const;
2454 // _lib.deque.capacity_ capacity:
2455 T size_type size() const;
2456 T size_type max_size() const;
2457 T void resize(size_type sz, T c = T());
2458 T bool empty() const;
2461 T reference operator[](size_type n);
2462 T const_reference operator[](size_type n) const;
2463 T reference at(size_type n);
2464 T const_reference at(size_type n) const;
2465 T reference front();
2466 T const_reference front() const;
2468 T const_reference back() const;
2469 // _lib.deque.modifiers_ modifiers:
2470 T void push_front(const T& x);
2471 T void push_back(const T& x);
2472 T iterator insert(iterator position, const T& x);
2473 T void insert(iterator position, size_type n, const T& x);
2474 T template <class InputIterator>
2475 void insert (iterator position,
2476 InputIterator first, InputIterator last);
2479 T iterator erase(iterator position);
2480 T iterator erase(iterator first, iterator last);
2481 T void swap(deque<T,Allocator>&);
2484 T template <class T, class Allocator>
2485 bool operator==(const deque<T,Allocator>& x,
2486 const deque<T,Allocator>& y);
2487 T template <class T, class Allocator>
2488 bool operator< (const deque<T,Allocator>& x,
2489 const deque<T,Allocator>& y);
2490 T template <class T, class Allocator>
2491 bool operator!=(const deque<T,Allocator>& x,
2492 const deque<T,Allocator>& y);
2493 T template <class T, class Allocator>
2494 bool operator> (const deque<T,Allocator>& x,
2495 const deque<T,Allocator>& y);
2496 T template <class T, class Allocator>
2497 bool operator>=(const deque<T,Allocator>& x,
2498 const deque<T,Allocator>& y);
2499 T template <class T, class Allocator>
2500 bool operator<=(const deque<T,Allocator>& x,
2501 const deque<T,Allocator>& y);
2502 // specialized algorithms:
2503 T template <class T, class Allocator>
2504 void swap(deque<T,Allocator>& x, deque<T,Allocator>& y);
2507 23.2.2 Template class list [lib.list]
2509 T template <class T, class Allocator = allocator<T> >
2513 T typedef typename Allocator::reference reference;
2514 T typedef typename Allocator::const_reference const_reference;
2515 T typedef implementation defined iterator;
2516 T typedef implementation defined const_iterator;
2517 T typedef implementation defined size_type;
2518 T typedef implementation defined difference_type;
2519 T typedef T value_type;
2520 T typedef Allocator allocator_type;
2521 T typedef typename Allocator::pointer pointer;
2522 T typedef typename Allocator::const_pointer const_pointer;
2523 T typedef std::reverse_iterator<iterator> reverse_iterator;
2524 T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
2526 // _lib.list.cons_ construct/copy/destroy:
2527 T explicit list(const Allocator& = Allocator());
2528 T explicit list(size_type n, const T& value = T(),
2529 const Allocator& = Allocator());
2530 T template <class InputIterator>
2531 list(InputIterator first, InputIterator last,
2532 const Allocator& = Allocator());
2533 T list(const list<T,Allocator>& x);
2535 T list<T,Allocator>& operator=(const list<T,Allocator>& x);
2536 T template <class InputIterator>
2537 void assign(InputIterator first, InputIterator last);
2538 T void assign(size_type n, const T& t);
2539 T allocator_type get_allocator() const;
2542 T const_iterator begin() const;
2544 T const_iterator end() const;
2545 T reverse_iterator rbegin();
2546 T const_reverse_iterator rbegin() const;
2547 T reverse_iterator rend();
2548 T const_reverse_iterator rend() const;
2549 // _lib.list.capacity_ capacity:
2550 T bool empty() const;
2551 T size_type size() const;
2552 T size_type max_size() const;
2553 T void resize(size_type sz, T c = T());
2555 T reference front();
2556 T const_reference front() const;
2558 T const_reference back() const;
2559 // _lib.list.modifiers_ modifiers:
2560 T void push_front(const T& x);
2562 T void push_back(const T& x);
2564 T iterator insert(iterator position, const T& x);
2565 T void insert(iterator position, size_type n, const T& x);
2566 T template <class InputIterator>
2567 void insert(iterator position, InputIterator first,
2568 InputIterator last);
2569 T iterator erase(iterator position);
2570 T iterator erase(iterator position, iterator last);
2571 T void swap(list<T,Allocator>&);
2573 // _lib.list.ops_ list operations:
2574 T void splice(iterator position, list<T,Allocator>& x);
2575 T void splice(iterator position, list<T,Allocator>& x, iterator i);
2576 T void splice(iterator position, list<T,Allocator>& x, iterator first,
2578 T void remove(const T& value);
2579 T template <class Predicate> void remove_if(Predicate pred);
2582 T template <class BinaryPredicate>
2583 void unique(BinaryPredicate binary_pred);
2584 T void merge(list<T,Allocator>& x);
2585 T template <class Compare> void merge(list<T,Allocator>& x, Compare comp);
2587 T template <class Compare> void sort(Compare comp);
2590 T template <class T, class Allocator>
2591 bool operator==(const list<T,Allocator>& x, const list<T,Allocator>& y);
2592 T template <class T, class Allocator>
2593 bool operator< (const list<T,Allocator>& x, const list<T,Allocator>& y);
2594 T template <class T, class Allocator>
2595 bool operator!=(const list<T,Allocator>& x, const list<T,Allocator>& y);
2596 T template <class T, class Allocator>
2597 bool operator> (const list<T,Allocator>& x, const list<T,Allocator>& y);
2598 T template <class T, class Allocator>
2599 bool operator>=(const list<T,Allocator>& x, const list<T,Allocator>& y);
2600 T template <class T, class Allocator>
2601 bool operator<=(const list<T,Allocator>& x, const list<T,Allocator>& y);
2602 // specialized algorithms:
2603 T template <class T, class Allocator>
2604 void swap(list<T,Allocator>& x, list<T,Allocator>& y);
2607 23.2.3.1 Template class queue [lib.queue]
2609 T template <class T, class Container = deque<T> >
2612 T typedef typename Container::value_type value_type;
2613 T typedef typename Container::size_type size_type;
2614 T typedef Container container_type;
2618 T explicit queue(const Container& = Container());
2620 T bool empty() const { return c.empty(); }
2621 T size_type size() const { return c.size(); }
2622 T value_type& front() { return c.front(); }
2623 T const value_type& front() const { return c.front(); }
2624 T value_type& back() { return c.back(); }
2625 T const value_type& back() const { return c.back(); }
2626 T void push(const value_type& x) { c.push_back(x); }
2627 T void pop() { c.pop_front(); }
2630 T template <class T, class Container>
2631 bool operator==(const queue<T, Container>& x,
2632 const queue<T, Container>& y);
2633 T template <class T, class Container>
2634 bool operator< (const queue<T, Container>& x,
2635 const queue<T, Container>& y);
2636 T template <class T, class Container>
2637 bool operator!=(const queue<T, Container>& x,
2638 const queue<T, Container>& y);
2639 T template <class T, class Container>
2640 bool operator> (const queue<T, Container>& x,
2641 const queue<T, Container>& y);
2642 T template <class T, class Container>
2643 bool operator>=(const queue<T, Container>& x,
2644 const queue<T, Container>& y);
2645 T template <class T, class Container>
2646 bool operator<=(const queue<T, Container>& x,
2647 const queue<T, Container>& y);
2649 23.2.3.2 Template class priority_queue [lib.priority.queue]
2651 T template <class T, class Container = vector<T>,
2652 class Compare = less<typename Container::value_type> >
2653 class priority_queue {
2655 T typedef typename Container::value_type value_type;
2656 T typedef typename Container::size_type size_type;
2657 T typedef Container container_type;
2662 T explicit priority_queue(const Compare& x = Compare(),
2663 const Container& = Container());
2664 T template <class InputIterator>
2665 priority_queue(InputIterator first, InputIterator last,
2666 const Compare& x = Compare(),
2667 const Container& = Container());
2669 T bool empty() const { return c.empty(); }
2670 T size_type size() const { return c.size(); }
2671 T const value_type& top() const { return c.front(); }
2672 T void push(const value_type& x);
2676 23.2.3.3 Template class stack [lib.stack]
2678 T template <class T, class Container = deque<T> >
2681 T typedef typename Container::value_type value_type;
2682 T typedef typename Container::size_type size_type;
2683 T typedef Container container_type;
2687 T explicit stack(const Container& = Container());
2689 T bool empty() const { return c.empty(); }
2690 T size_type size() const { return c.size(); }
2691 T value_type& top() { return c.back(); }
2692 T const value_type& top() const { return c.back(); }
2693 T void push(const value_type& x) { c.push_back(x); }
2694 T void pop() { c.pop_back(); }
2696 T template <class T, class Container>
2697 bool operator==(const stack<T, Container>& x,
2698 const stack<T, Container>& y);
2699 T template <class T, class Container>
2700 bool operator< (const stack<T, Container>& x,
2701 const stack<T, Container>& y);
2702 T template <class T, class Container>
2703 bool operator!=(const stack<T, Container>& x,
2704 const stack<T, Container>& y);
2705 T template <class T, class Container>
2706 bool operator> (const stack<T, Container>& x,
2707 const stack<T, Container>& y);
2708 T template <class T, class Container>
2709 bool operator>=(const stack<T, Container>& x,
2710 const stack<T, Container>& y);
2711 T template <class T, class Container>
2712 bool operator<=(const stack<T, Container>& x,
2713 const stack<T, Container>& y);
2715 23.2.4 Template class vector [lib.vector]
2717 template <class T, class Allocator = allocator<T> >
2721 T typedef typename Allocator::reference reference;
2722 T typedef typename Allocator::const_reference const_reference;
2723 T typedef implementation defined iterator;
2724 T typedef implementation defined const_iterator;
2725 T typedef implementation defined size_type;
2726 T typedef implementation defined difference_type;
2727 T typedef T value_type;
2728 T typedef Allocator allocator_type;
2729 T typedef typename Allocator::pointer pointer;
2730 T typedef typename Allocator::const_pointer const_pointer
2731 T typedef std::reverse_iterator<iterator> reverse_iterator;
2732 T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
2733 // _lib.vector.cons_ construct/copy/destroy:
2734 T explicit vector(const Allocator& = Allocator());
2735 T explicit vector(size_type n, const T& value = T(),
2736 const Allocator& = Allocator());
2737 T template <class InputIterator>
2738 vector(InputIterator first, InputIterator last,
2739 const Allocator& = Allocator());
2740 T vector(const vector<T,Allocator>& x);
2742 T vector<T,Allocator>& operator=(const vector<T,Allocator>& x);
2743 T template <class InputIterator>
2744 void assign(InputIterator first, InputIterator last);
2745 T void assign(size_type n, const T& u);
2746 T allocator_type get_allocator() const;
2749 T const_iterator begin() const;
2751 T const_iterator end() const;
2752 T reverse_iterator rbegin();
2753 T const_reverse_iterator rbegin() const;
2754 T reverse_iterator rend();
2755 T const_reverse_iterator rend() const;
2756 // _lib.vector.capacity_ capacity:
2757 T size_type size() const;
2758 T size_type max_size() const;
2759 T void resize(size_type sz, T c = T());
2760 T size_type capacity() const;
2761 T bool empty() const;
2762 T void reserve(size_type n);
2765 T reference operator[](size_type n);
2766 T const_reference operator[](size_type n) const;
2767 T const_reference at(size_type n) const;
2768 T reference at(size_type n);
2769 T reference front();
2770 T const_reference front() const;
2772 T const_reference back() const;
2773 // _lib.vector.modifiers_ modifiers:
2774 T void push_back(const T& x);
2776 T iterator insert(iterator position, const T& x);
2777 T void insert(iterator position, size_type n, const T& x);
2778 T template <class InputIterator>
2779 void insert(iterator position,
2780 InputIterator first, InputIterator last);
2781 T iterator erase(iterator position);
2782 T iterator erase(iterator first, iterator last);
2783 T void swap(vector<T,Allocator>&);
2787 T template <class T, class Allocator>
2788 bool operator==(const vector<T,Allocator>& x,
2789 const vector<T,Allocator>& y);
2790 T template <class T, class Allocator>
2791 bool operator< (const vector<T,Allocator>& x,
2792 const vector<T,Allocator>& y);
2793 T template <class T, class Allocator>
2794 bool operator!=(const vector<T,Allocator>& x,
2795 const vector<T,Allocator>& y);
2796 T template <class T, class Allocator>
2797 bool operator> (const vector<T,Allocator>& x,
2798 const vector<T,Allocator>& y);
2799 T template <class T, class Allocator>
2800 bool operator>=(const vector<T,Allocator>& x,
2801 const vector<T,Allocator>& y);
2802 T template <class T, class Allocator>
2803 bool operator<=(const vector<T,Allocator>& x,
2804 const vector<T,Allocator>& y);
2805 // specialized algorithms:
2806 T template <class T, class Allocator>
2807 void swap(vector<T,Allocator>& x, vector<T,Allocator>& y);
2810 23.2.5 Class vector<bool> [lib.vector.bool]
2812 T template <class Allocator> class vector<bool, Allocator> {
2815 T typedef bool const_reference;
2816 T typedef implementation defined iterator;
2817 T typedef implementation defined const_iterator;
2818 T typedef implementation defined size_type;
2819 T typedef implementation defined difference_type;
2820 T typedef bool value_type;
2821 T typedef Allocator allocator_type;
2822 T typedef implementation defined pointer;
2823 T typedef implementation defined const_pointer
2824 T typedef std::reverse_iterator<iterator> reverse_iterator;
2825 T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
2828 friend class vector;
2832 T operator bool() const;
2833 T reference& operator=(const bool x);
2834 T reference& operator=(const reference& x);
2835 T void flip(); // flips the bit
2838 // construct/copy/destroy:
2839 T explicit vector(const Allocator& = Allocator());
2840 T explicit vector(size_type n, const bool& value = bool(),
2841 const Allocator& = Allocator());
2842 T template <class InputIterator>
2843 vector(InputIterator first, InputIterator last,
2844 const Allocator& = Allocator());
2845 T vector(const vector<bool,Allocator>& x);
2847 T vector<bool,Allocator>& operator=(const vector<bool,Allocator>& x);
2848 T template <class InputIterator>
2849 void assign(InputIterator first, InputIterator last);
2850 T void assign(size_type n, const T& t);
2851 T allocator_type get_allocator() const;
2854 T const_iterator begin() const;
2856 T const_iterator end() const;
2857 T reverse_iterator rbegin();
2858 T const_reverse_iterator rbegin() const;
2859 T reverse_iterator rend();
2860 T const_reverse_iterator rend() const;
2862 T size_type size() const;
2863 T size_type max_size() const;
2864 T void resize(size_type sz, bool c = false);
2865 T size_type capacity() const;
2866 T bool empty() const;
2867 T void reserve(size_type n);
2869 T reference operator[](size_type n);
2870 T const_reference operator[](size_type n) const;
2871 T const_reference at(size_type n) const;
2872 T reference at(size_type n);
2873 T reference front();
2874 T const_reference front() const;
2876 T const_reference back() const;
2878 T void push_back(const bool& x);
2880 T iterator insert(iterator position, const bool& x);
2881 T void insert (iterator position, size_type n, const bool& x);
2882 T template <class InputIterator>
2883 void insert(iterator position,
2884 InputIterator first, InputIterator last);
2885 T iterator erase(iterator position);
2886 T iterator erase(iterator first, iterator last);
2887 T void swap(vector<bool,Allocator>&);
2888 T static void swap(reference x, reference y);
2889 T void flip(); // flips all bits
2893 T template <class Allocator>
2894 bool operator==(const vector<bool,Allocator>& x,
2895 const vector<bool,Allocator>& y);
2896 T template <class Allocator>
2897 bool operator< (const vector<bool,Allocator>& x,
2898 const vector<bool,Allocator>& y);
2899 T template <class Allocator>
2900 bool operator!=(const vector<bool,Allocator>& x,
2901 const vector<bool,Allocator>& y);
2902 T template <class Allocator>
2903 bool operator> (const vector<bool,Allocator>& x,
2904 const vector<bool,Allocator>& y);
2905 T template <class Allocator>
2906 bool operator>=(const vector<bool,Allocator>& x,
2907 const vector<bool,Allocator>& y);
2908 T template <class Allocator>
2909 bool operator<=(const vector<bool,Allocator>& x,
2910 const vector<bool,Allocator>& y);
2911 // specialized algorithms:
2912 T template <class Allocator>
2913 void swap(vector<bool,Allocator>& x, vector<bool,Allocator>& y);
2915 23.3 Associative containers [lib.associative]
2919 Header <map> synopsis
2921 template <class Key, class T, class Compare = less<Key>,
2922 class Allocator = allocator<pair<const Key, T> > >
2925 T template <class Key, class T, class Compare, class Allocator>
2926 bool operator==(const map<Key,T,Compare,Allocator>& x,
2927 const map<Key,T,Compare,Allocator>& y);
2928 T template <class Key, class T, class Compare, class Allocator>
2929 bool operator< (const map<Key,T,Compare,Allocator>& x,
2930 const map<Key,T,Compare,Allocator>& y);
2931 T template <class Key, class T, class Compare, class Allocator>
2932 bool operator!=(const map<Key,T,Compare,Allocator>& x,
2933 const map<Key,T,Compare,Allocator>& y);
2934 T template <class Key, class T, class Compare, class Allocator>
2935 bool operator> (const map<Key,T,Compare,Allocator>& x,
2936 const map<Key,T,Compare,Allocator>& y);
2937 T template <class Key, class T, class Compare, class Allocator>
2938 bool operator>=(const map<Key,T,Compare,Allocator>& x,
2939 const map<Key,T,Compare,Allocator>& y);
2940 T template <class Key, class T, class Compare, class Allocator>
2941 bool operator<=(const map<Key,T,Compare,Allocator>& x,
2942 const map<Key,T,Compare,Allocator>& y);
2943 T template <class Key, class T, class Compare, class Allocator>
2944 void swap(map<Key,T,Compare,Allocator>& x,
2945 map<Key,T,Compare,Allocator>& y);
2946 T template <class Key, class T, class Compare = less<Key>,
2947 class Allocator = allocator<pair<const Key, T> > >
2949 T template <class Key, class T, class Compare, class Allocator>
2950 bool operator==(const multimap<Key,T,Compare,Allocator>& x,
2951 const multimap<Key,T,Compare,Allocator>& y);
2952 T template <class Key, class T, class Compare, class Allocator>
2953 bool operator< (const multimap<Key,T,Compare,Allocator>& x,
2954 const multimap<Key,T,Compare,Allocator>& y);
2955 T template <class Key, class T, class Compare, class Allocator>
2956 bool operator!=(const multimap<Key,T,Compare,Allocator>& x,
2957 const multimap<Key,T,Compare,Allocator>& y);
2958 T template <class Key, class T, class Compare, class Allocator>
2959 bool operator> (const multimap<Key,T,Compare,Allocator>& x,
2960 const multimap<Key,T,Compare,Allocator>& y);
2961 T template <class Key, class T, class Compare, class Allocator>
2962 bool operator>=(const multimap<Key,T,Compare,Allocator>& x,
2963 const multimap<Key,T,Compare,Allocator>& y);
2964 T template <class Key, class T, class Compare, class Allocator>
2965 bool operator<=(const multimap<Key,T,Compare,Allocator>& x,
2966 const multimap<Key,T,Compare,Allocator>& y);
2967 T template <class Key, class T, class Compare, class Allocator>
2968 void swap(multimap<Key,T,Compare,Allocator>& x,
2969 multimap<Key,T,Compare,Allocator>& y);
2972 Header <set> synopsis
2974 template <class Key, class Compare = less<Key>,
2975 class Allocator = allocator<Key> >
2978 T template <class Key, class Compare, class Allocator>
2979 bool operator==(const set<Key,Compare,Allocator>& x,
2980 const set<Key,Compare,Allocator>& y);
2981 T template <class Key, class Compare, class Allocator>
2982 bool operator< (const set<Key,Compare,Allocator>& x,
2983 const set<Key,Compare,Allocator>& y);
2984 T template <class Key, class Compare, class Allocator>
2985 bool operator!=(const set<Key,Compare,Allocator>& x,
2986 const set<Key,Compare,Allocator>& y);
2987 T template <class Key, class Compare, class Allocator>
2988 bool operator> (const set<Key,Compare,Allocator>& x,
2989 const set<Key,Compare,Allocator>& y);
2990 T template <class Key, class Compare, class Allocator>
2991 bool operator>=(const set<Key,Compare,Allocator>& x,
2992 const set<Key,Compare,Allocator>& y);
2993 T template <class Key, class Compare, class Allocator>
2994 bool operator<=(const set<Key,Compare,Allocator>& x,
2995 const set<Key,Compare,Allocator>& y);
2996 T template <class Key, class Compare, class Allocator>
2997 void swap(set<Key,Compare,Allocator>& x,
2998 set<Key,Compare,Allocator>& y);
2999 T template <class Key, class Compare = less<Key>,
3000 class Allocator = allocator<Key> >
3002 T template <class Key, class Compare, class Allocator>
3003 bool operator==(const multiset<Key,Compare,Allocator>& x,
3004 const multiset<Key,Compare,Allocator>& y);
3005 T template <class Key, class Compare, class Allocator>
3006 bool operator< (const multiset<Key,Compare,Allocator>& x,
3007 const multiset<Key,Compare,Allocator>& y);
3008 T template <class Key, class Compare, class Allocator>
3009 bool operator!=(const multiset<Key,Compare,Allocator>& x,
3010 const multiset<Key,Compare,Allocator>& y);
3011 T template <class Key, class Compare, class Allocator>
3012 bool operator> (const multiset<Key,Compare,Allocator>& x,
3013 const multiset<Key,Compare,Allocator>& y);
3014 T template <class Key, class Compare, class Allocator>
3015 bool operator>=(const multiset<Key,Compare,Allocator>& x,
3016 const multiset<Key,Compare,Allocator>& y);
3017 T template <class Key, class Compare, class Allocator>
3018 bool operator<=(const multiset<Key,Compare,Allocator>& x,
3019 const multiset<Key,Compare,Allocator>& y);
3020 T template <class Key, class Compare, class Allocator>
3021 void swap(multiset<Key,Compare,Allocator>& x,
3022 multiset<Key,Compare,Allocator>& y);
3025 23.3.1 Template class map [lib.map]
3027 template <class Key, class T, class Compare = less<Key>,
3028 class Allocator = allocator<pair<const Key, T> > >
3032 T typedef Key key_type;
3033 T typedef T mapped_type;
3034 T typedef pair<const Key, T> value_type;
3035 T typedef Compare key_compare;
3036 T typedef Allocator allocator_type;
3037 T typedef typename Allocator::reference reference;
3038 T typedef typename Allocator::const_reference const_reference;
3039 T typedef implementation defined iterator;
3040 T typedef implementation defined const_iterator;
3041 T typedef implementation defined size_type;
3042 T typedef implementation defined difference_type;
3043 T typedef typename Allocator::pointer pointer;
3044 T typedef typename Allocator::const_pointer const_pointer;
3045 T typedef std::reverse_iterator<iterator> reverse_iterator;
3046 T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
3047 T class value_compare
3048 : public binary_function<value_type,value_type,bool> {
3052 T value_compare(Compare c) : comp(c) {}
3054 T bool operator()(const value_type& x, const value_type& y) const {
3055 return comp(x.first, y.first);
3059 // _lib.map.cons_ construct/copy/destroy:
3060 T explicit map(const Compare& comp = Compare(),
3061 const Allocator& = Allocator());
3062 T template <class InputIterator>
3063 map(InputIterator first, InputIterator last,
3064 const Compare& comp = Compare(), const Allocator& = Allocator());
3065 T map(const map<Key,T,Compare,Allocator>& x);
3067 T map<Key,T,Compare,Allocator>&
3068 operator=(const map<Key,T,Compare,Allocator>& x);
3071 T const_iterator begin() const;
3073 T const_iterator end() const;
3074 T reverse_iterator rbegin();
3075 T const_reverse_iterator rbegin() const;
3076 T reverse_iterator rend();
3077 T const_reverse_iterator rend() const;
3079 T bool empty() const;
3080 T size_type size() const;
3081 T size_type max_size() const;
3082 // _lib.map.access_ element access:
3083 T T& operator[](const key_type& x);
3085 T pair<iterator, bool> insert(const value_type& x);
3086 T iterator insert(iterator position, const value_type& x);
3087 T template <class InputIterator>
3088 void insert(InputIterator first, InputIterator last);
3089 T void erase(iterator position);
3090 T size_type erase(const key_type& x);
3091 T void erase(iterator first, iterator last);
3092 T void swap(map<Key,T,Compare,Allocator>&);
3095 T key_compare key_comp() const;
3096 T value_compare value_comp() const;
3097 // _lib.map.ops_ map operations:
3098 T iterator find(const key_type& x);
3099 T const_iterator find(const key_type& x) const;
3100 T size_type count(const key_type& x) const;
3101 T iterator lower_bound(const key_type& x);
3102 T const_iterator lower_bound(const key_type& x) const;
3103 T iterator upper_bound(const key_type& x);
3104 T const_iterator upper_bound(const key_type& x) const;
3105 T pair<iterator,iterator>
3106 equal_range(const key_type& x);
3107 T pair<const_iterator,const_iterator>
3108 equal_range(const key_type& x) const;
3111 T template <class Key, class T, class Compare, class Allocator>
3112 bool operator==(const map<Key,T,Compare,Allocator>& x,
3113 const map<Key,T,Compare,Allocator>& y);
3114 T template <class Key, class T, class Compare, class Allocator>
3115 bool operator< (const map<Key,T,Compare,Allocator>& x,
3116 const map<Key,T,Compare,Allocator>& y);
3117 T template <class Key, class T, class Compare, class Allocator>
3118 bool operator!=(const map<Key,T,Compare,Allocator>& x,
3119 const map<Key,T,Compare,Allocator>& y);
3120 T template <class Key, class T, class Compare, class Allocator>
3121 bool operator> (const map<Key,T,Compare,Allocator>& x,
3122 const map<Key,T,Compare,Allocator>& y);
3123 T template <class Key, class T, class Compare, class Allocator>
3124 bool operator>=(const map<Key,T,Compare,Allocator>& x,
3125 const map<Key,T,Compare,Allocator>& y);
3126 T template <class Key, class T, class Compare, class Allocator>
3127 bool operator<=(const map<Key,T,Compare,Allocator>& x,
3128 const map<Key,T,Compare,Allocator>& y);
3129 // specialized algorithms:
3130 T template <class Key, class T, class Compare, class Allocator>
3131 void swap(map<Key,T,Compare,Allocator>& x,
3132 map<Key,T,Compare,Allocator>& y);
3134 23.3.2 Template class multimap [lib.multimap]
3136 template <class Key, class T, class Compare = less<Key>,
3137 class Allocator = allocator<pair<const Key, T> > >
3141 T typedef Key key_type;
3142 T typedef T mapped_type;
3143 T typedef pair<const Key,T> value_type;
3144 T typedef Compare key_compare;
3145 T typedef Allocator allocator_type;
3146 T typedef typename Allocator::reference reference;
3147 T typedef typename Allocator::const_reference const_reference;
3148 T typedef implementation defined iterator;
3149 T typedef implementation defined const_iterator;
3150 T typedef implementation defined size_type;
3151 T typedef implementation defined difference_type
3152 T typedef typename Allocator::pointer pointer;
3153 T typedef typename Allocator::const_pointer const_pointer;
3154 T typedef std::reverse_iterator<iterator> reverse_iterator;
3155 T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
3156 T class value_compare
3157 : public binary_function<value_type,value_type,bool> {
3158 friend class multimap;
3161 T value_compare(Compare c) : comp(c) {}
3163 T bool operator()(const value_type& x, const value_type& y) const {
3164 return comp(x.first, y.first);
3167 // construct/copy/destroy:
3168 T explicit multimap(const Compare& comp = Compare(),
3169 const Allocator& = Allocator());
3170 T template <class InputIterator>
3171 multimap(InputIterator first, InputIterator last,
3172 const Compare& comp = Compare(),
3173 const Allocator& = Allocator());
3174 T multimap(const multimap<Key,T,Compare,Allocator>& x);
3176 T multimap<Key,T,Compare,Allocator>&
3177 operator=(const multimap<Key,T,Compare,Allocator>& x);
3178 T allocator_type get_allocator() const;
3182 T const_iterator begin() const;
3184 T const_iterator end() const;
3185 T reverse_iterator rbegin();
3186 T const_reverse_iterator rbegin() const;
3187 T reverse_iterator rend();
3188 T const_reverse_iterator rend() const;
3190 T bool empty() const;
3191 T size_type size() const;
3192 T size_type max_size() const;
3194 T iterator insert(const value_type& x);
3195 T iterator insert(iterator position, const value_type& x);
3196 T template <class InputIterator>
3197 void insert(InputIterator first, InputIterator last);
3198 T void erase(iterator position);
3199 T size_type erase(const key_type& x);
3200 T void erase(iterator first, iterator last);
3201 T void swap(multimap<Key,T,Compare,Allocator>&);
3204 T key_compare key_comp() const;
3205 T value_compare value_comp() const;
3207 T iterator find(const key_type& x);
3208 T const_iterator find(const key_type& x) const;
3209 T size_type count(const key_type& x) const;
3210 T iterator lower_bound(const key_type& x);
3211 T const_iterator lower_bound(const key_type& x) const;
3212 T iterator upper_bound(const key_type& x);
3213 T const_iterator upper_bound(const key_type& x) const;
3214 T pair<iterator,iterator> equal_range(const key_type& x);
3215 T pair<const_iterator,const_iterator> equal_range(const key_type& x) const;
3218 T template <class Key, class T, class Compare, class Allocator>
3219 bool operator==(const multimap<Key,T,Compare,Allocator>& x,
3220 const multimap<Key,T,Compare,Allocator>& y);
3221 T template <class Key, class T, class Compare, class Allocator>
3222 bool operator< (const multimap<Key,T,Compare,Allocator>& x,
3223 const multimap<Key,T,Compare,Allocator>& y);
3224 T template <class Key, class T, class Compare, class Allocator>
3225 bool operator!=(const multimap<Key,T,Compare,Allocator>& x,
3226 const multimap<Key,T,Compare,Allocator>& y);
3227 T template <class Key, class T, class Compare, class Allocator>
3228 bool operator> (const multimap<Key,T,Compare,Allocator>& x,
3229 const multimap<Key,T,Compare,Allocator>& y);
3230 T template <class Key, class T, class Compare, class Allocator>
3231 bool operator>=(const multimap<Key,T,Compare,Allocator>& x,
3232 const multimap<Key,T,Compare,Allocator>& y);
3233 T template <class Key, class T, class Compare, class Allocator>
3234 bool operator<=(const multimap<Key,T,Compare,Allocator>& x,
3235 const multimap<Key,T,Compare,Allocator>& y);
3236 // specialized algorithms:
3237 T template <class Key, class T, class Compare, class Allocator>
3238 void swap(multimap<Key,T,Compare,Allocator>& x,
3239 multimap<Key,T,Compare,Allocator>& y);
3242 23.3.3 Template class set [lib.set]
3244 template <class Key, class Compare = less<Key>,
3245 class Allocator = allocator<Key> >
3249 T typedef Key key_type;
3250 T typedef Key value_type;
3251 T typedef Compare key_compare;
3252 T typedef Compare value_compare;
3253 T typedef Allocator allocator_type;
3254 T typedef typename Allocator::reference reference;
3255 T typedef typename Allocator::const_reference const_reference;
3256 T typedef implementation defined iterator;
3257 T typedef implementation defined const_iterator;
3258 T typedef implementation defined size_type;
3259 T typedef implementation defined difference_type;
3260 T typedef typename Allocator::pointer pointer;
3261 T typedef typename Allocator::const_pointer const_pointer;
3262 T typedef std::reverse_iterator<iterator> reverse_iterator;
3263 T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
3264 // _lib.set.cons_ construct/copy/destroy:
3265 T explicit set(const Compare& comp = Compare(),
3266 const Allocator& = Allocator());
3267 T template <class InputIterator>
3268 set(InputIterator first, InputIterator last,
3269 const Compare& comp = Compare(), const Allocator& = Allocator());
3270 T set(const set<Key,Compare,Allocator>& x);
3272 T set<Key,Compare,Allocator>&
3273 operator=(const set<Key,Compare,Allocator>& x);
3274 T allocator_type get_allocator() const;
3277 T const_iterator begin() const;
3279 T const_iterator end() const;
3280 T reverse_iterator rbegin();
3281 T const_reverse_iterator rbegin() const;
3282 T reverse_iterator rend();
3283 T const_reverse_iterator rend() const;
3285 T bool empty() const;
3286 T size_type size() const;
3287 T size_type max_size() const;
3289 T pair<iterator,bool> insert(const value_type& x);
3290 T iterator insert(iterator position, const value_type& x);
3291 T template <class InputIterator>
3292 T void insert(InputIterator first, InputIterator last);
3293 T void erase(iterator position);
3294 T size_type erase(const key_type& x);
3295 T void erase(iterator first, iterator last);
3296 T void swap(set<Key,Compare,Allocator>&);
3300 T key_compare key_comp() const;
3301 T value_compare value_comp() const;
3303 T iterator find(const key_type& x) const;
3304 T size_type count(const key_type& x) const;
3305 T iterator lower_bound(const key_type& x) const;
3306 T iterator upper_bound(const key_type& x) const;
3307 T pair<iterator,iterator> equal_range(const key_type& x) const;
3309 T template <class Key, class Compare, class Allocator>
3310 bool operator==(const set<Key,Compare,Allocator>& x,
3311 const set<Key,Compare,Allocator>& y);
3312 T template <class Key, class Compare, class Allocator>
3313 bool operator< (const set<Key,Compare,Allocator>& x,
3314 const set<Key,Compare,Allocator>& y);
3315 T template <class Key, class Compare, class Allocator>
3316 bool operator!=(const set<Key,Compare,Allocator>& x,
3317 const set<Key,Compare,Allocator>& y);
3318 T template <class Key, class Compare, class Allocator>
3319 bool operator> (const set<Key,Compare,Allocator>& x,
3320 const set<Key,Compare,Allocator>& y);
3321 T template <class Key, class Compare, class Allocator>
3322 bool operator>=(const set<Key,Compare,Allocator>& x,
3323 const set<Key,Compare,Allocator>& y);
3324 T template <class Key, class Compare, class Allocator>
3325 bool operator<=(const set<Key,Compare,Allocator>& x,
3326 const set<Key,Compare,Allocator>& y);
3327 // specialized algorithms:
3328 T template <class Key, class Compare, class Allocator>
3329 void swap(set<Key,Compare,Allocator>& x,
3330 set<Key,Compare,Allocator>& y);
3332 23.3.4 Template class multiset [lib.multiset]
3334 template <class Key, class Compare = less<Key>,
3335 class Allocator = allocator<Key> >
3339 T typedef Key key_type;
3340 T typedef Key value_type;
3341 T typedef Compare key_compare;
3342 T typedef Compare value_compare;
3343 T typedef Allocator allocator_type;
3344 T typedef typename Allocator::reference reference;
3345 T typedef typename Allocator::const_reference const_reference;
3346 T typedef implementation defined iterator;
3347 T typedef implementation defined const_iterator;
3348 T typedef implementation defined size_type;
3349 T typedef implementation defined difference_type
3350 T typedef typename Allocator::pointer pointer;
3351 T typedef typename Allocator::const_pointer const_pointer;
3352 T typedef std::reverse_iterator<iterator> reverse_iterator;
3353 T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
3355 // construct/copy/destroy:
3356 T explicit multiset(const Compare& comp = Compare(),
3357 const Allocator& = Allocator());
3358 T template <class InputIterator>
3359 multiset(InputIterator first, InputIterator last,
3360 const Compare& comp = Compare(),
3361 const Allocator& = Allocator());
3362 T multiset(const multiset<Key,Compare,Allocator>& x);
3364 T multiset<Key,Compare,Allocator>&
3365 operator=(const multiset<Key,Compare,Allocator>& x);
3366 T allocator_type get_allocator() const;
3369 T const_iterator begin() const;
3371 T const_iterator end() const;
3372 T reverse_iterator rbegin();
3373 T const_reverse_iterator rbegin() const;
3374 T reverse_iterator rend();
3375 T const_reverse_iterator rend() const;
3377 T bool empty() const;
3378 T size_type size() const;
3379 T size_type max_size() const;
3381 T iterator insert(const value_type& x);
3382 T iterator insert(iterator position, const value_type& x);
3383 T template <class InputIterator>
3384 void insert(InputIterator first, InputIterator last);
3385 T void erase(iterator position);
3386 T size_type erase(const key_type& x);
3387 T void erase(iterator first, iterator last);
3388 T void swap(multiset<Key,Compare,Allocator>&);
3391 T key_compare key_comp() const;
3392 T value_compare value_comp() const;
3394 T iterator find(const key_type& x) const;
3395 T size_type count(const key_type& x) const;
3396 T iterator lower_bound(const key_type& x) const;
3397 T iterator upper_bound(const key_type& x) const;
3398 T pair<iterator,iterator> equal_range(const key_type& x) const;
3401 T template <class Key, class Compare, class Allocator>
3402 bool operator==(const multiset<Key,Compare,Allocator>& x,
3403 const multiset<Key,Compare,Allocator>& y);
3404 T template <class Key, class Compare, class Allocator>
3405 bool operator< (const multiset<Key,Compare,Allocator>& x,
3406 const multiset<Key,Compare,Allocator>& y);
3407 T template <class Key, class Compare, class Allocator>
3408 bool operator!=(const multiset<Key,Compare,Allocator>& x,
3409 const multiset<Key,Compare,Allocator>& y);
3410 T template <class Key, class Compare, class Allocator>
3411 bool operator> (const multiset<Key,Compare,Allocator>& x,
3412 const multiset<Key,Compare,Allocator>& y);
3413 T template <class Key, class Compare, class Allocator>
3414 bool operator>=(const multiset<Key,Compare,Allocator>& x,
3415 const multiset<Key,Compare,Allocator>& y);
3416 T template <class Key, class Compare, class Allocator>
3417 bool operator<=(const multiset<Key,Compare,Allocator>& x,
3418 const multiset<Key,Compare,Allocator>& y);
3419 // specialized algorithms:
3420 T template <class Key, class Compare, class Allocator>
3421 void swap(multiset<Key,Compare,Allocator>& x,
3422 multiset<Key,Compare,Allocator>& y);
3424 23.3.5 Template class bitset [lib.template.bitset]
3426 Header <bitset> synopsis
3428 T template <size_t N> class bitset;
3429 // _lib.bitset.operators_ bitset operations:
3430 T template <size_t N>
3431 bitset<N> operator&(const bitset<N>&, const bitset<N>&);
3432 T template <size_t N>
3433 bitset<N> operator|(const bitset<N>&, const bitset<N>&);
3434 T template <size_t N>
3435 bitset<N> operator^(const bitset<N>&, const bitset<N>&);
3436 T template <class charT, class traits, size_t N>
3437 basic_istream<charT, traits>&
3438 operator>>(basic_istream<charT, traits>& is, bitset<N>& x);
3439 T template <class charT, class traits, size_t N>
3440 basic_ostream<charT, traits>&
3441 operator<<(basic_ostream<charT, traits>& os, const bitset<N>& x);
3443 T template<size_t N> class bitset {
3447 friend class bitset;
3451 T reference& operator=(bool x); // for b[i] = x;
3452 T reference& operator=(const reference&); // for b[i] = b[j];
3453 T bool operator~() const; // flips the bit
3454 T operator bool() const; // for x = b[i];
3455 T reference& flip(); // for b[i].flip();
3458 // _lib.bitset.cons_ constructors:
3460 T bitset(unsigned long val);
3461 T template<class charT, class traits, class Allocator>
3463 const basic_string<charT,traits,Allocator>& str,
3464 typename basic_string<charT,traits,Allocator>::size_type pos = 0,
3465 typename basic_string<charT,traits,Allocator>::size_type n =
3466 basic_string<charT,traits,Allocator>::npos);
3467 // _lib.bitset.members_ bitset operations:
3468 T bitset<N>& operator&=(const bitset<N>& rhs);
3469 T bitset<N>& operator|=(const bitset<N>& rhs);
3470 T bitset<N>& operator^=(const bitset<N>& rhs);
3471 T bitset<N>& operator<<=(size_t pos);
3472 T bitset<N>& operator>>=(size_t pos);
3474 T bitset<N>& set(size_t pos, int val = true);
3475 T bitset<N>& reset();
3476 T bitset<N>& reset(size_t pos);
3477 T bitset<N> operator~() const;
3478 T bitset<N>& flip();
3479 T bitset<N>& flip(size_t pos);
3481 T reference operator[](size_t pos); // for b[i];
3482 T unsigned long to_ulong() const;
3483 T template <class charT, class traits, class Allocator>
3484 basic_string<charT, traits, Allocator> to_string() const;
3485 T size_t count() const;
3486 T size_t size() const;
3487 T bool operator==(const bitset<N>& rhs) const;
3488 T bool operator!=(const bitset<N>& rhs) const;
3489 T bool test(size_t pos) const;
3491 T bool none() const;
3492 T bitset<N> operator<<(size_t pos) const;
3493 T bitset<N> operator>>(size_t pos) const;
3499 24.2 Header <iterator> synopsis [lib.iterator.synopsis]
3501 // _lib.iterator.primitives_, primitives:
3502 T template<class Iterator> struct iterator_traits;
3503 T template<class T> struct iterator_traits<T*>;
3505 X template<class Category, class T, class Distance = ptrdiff_t,
3506 class Pointer = T*, class Reference = T&> struct iterator;
3507 T struct input_iterator_tag {};
3508 T struct output_iterator_tag {};
3509 T struct forward_iterator_tag: public input_iterator_tag {};
3510 T struct bidirectional_iterator_tag: public forward_iterator_tag {};
3511 T struct random_access_iterator_tag: public bidirectional_iterator_tag {};
3512 // _lib.iterator.operations_, iterator operations:
3513 T template <class InputIterator, class Distance>
3514 void advance(InputIterator& i, Distance n);
3515 T template <class InputIterator>
3516 typename iterator_traits<InputIterator>::difference_type
3517 distance(InputIterator first, InputIterator last);
3518 // _lib.predef.iterators_, predefined iterators:
3519 X template <class Iterator> class reverse_iterator;
3520 T template <class Iterator>
3522 const reverse_iterator<Iterator>& x,
3523 const reverse_iterator<Iterator>& y);
3524 T template <class Iterator>
3526 const reverse_iterator<Iterator>& x,
3527 const reverse_iterator<Iterator>& y);
3528 T template <class Iterator>
3530 const reverse_iterator<Iterator>& x,
3531 const reverse_iterator<Iterator>& y);
3532 T template <class Iterator>
3534 const reverse_iterator<Iterator>& x,
3535 const reverse_iterator<Iterator>& y);
3536 T template <class Iterator>
3538 const reverse_iterator<Iterator>& x,
3539 const reverse_iterator<Iterator>& y);
3540 T template <class Iterator>
3542 const reverse_iterator<Iterator>& x,
3543 const reverse_iterator<Iterator>& y);
3544 T template <class Iterator>
3545 typename reverse_iterator<Iterator>::difference_type operator-(
3546 const reverse_iterator<Iterator>& x,
3547 const reverse_iterator<Iterator>& y);
3548 T template <class Iterator>
3549 reverse_iterator<Iterator>
3551 typename reverse_iterator<Iterator>::difference_type n,
3552 const reverse_iterator<Iterator>& x);
3554 X template <class Container> class back_insert_iterator;
3555 T template <class Container>
3556 back_insert_iterator<Container> back_inserter(Container& x);
3557 X template <class Container> class front_insert_iterator;
3558 T template <class Container>
3559 front_insert_iterator<Container> front_inserter(Container& x);
3560 X template <class Container> class insert_iterator;
3561 T template <class Container, class Iterator>
3562 insert_iterator<Container> inserter(Container& x, Iterator i);
3563 // _lib.stream.iterators_, stream iterators:
3564 X template <class T, class charT = char, class traits = char_traits<charT>,
3565 class Distance = ptrdiff_t>
3566 class istream_iterator;
3567 template <class T, class charT, class traits, class Distance>
3568 X bool operator==(const istream_iterator<T,charT,traits,Distance>& x,
3569 const istream_iterator<T,charT,traits,Distance>& y);
3570 template <class T, class charT, class traits, class Distance>
3571 X bool operator!=(const istream_iterator<T,charT,traits,Distance>& x,
3572 const istream_iterator<T,charT,traits,Distance>& y);
3573 X template <class T, class charT = char, class traits = char_traits<charT> >
3574 class ostream_iterator;
3575 X template<class charT, class traits = char_traits<charT> >
3576 class istreambuf_iterator;
3577 X template <class charT, class traits>
3578 bool operator==(const istreambuf_iterator<charT,traits>& a,
3579 const istreambuf_iterator<charT,traits>& b);
3580 X template <class charT, class traits>
3581 bool operator!=(const istreambuf_iterator<charT,traits>& a,
3582 const istreambuf_iterator<charT,traits>& b);
3583 T template <class charT, class traits = char_traits<charT> >
3584 class ostreambuf_iterator;
3586 24.3 Iterator primitives [lib.iterator.primitives]
3588 T template<class Iterator> struct iterator_traits {
3589 T typedef typename Iterator::difference_type difference_type;
3590 T typedef typename Iterator::value_type value_type;
3591 T typedef typename Iterator::pointer pointer;
3592 T typedef typename Iterator::reference reference;
3593 T typedef typename Iterator::iterator_category iterator_category;
3596 T template<class T> struct iterator_traits<T*> {
3597 T typedef ptrdiff_t difference_type;
3598 T typedef T value_type;
3599 T typedef T* pointer;
3600 T typedef T& reference;
3601 T typedef random_access_iterator_tag iterator_category;
3604 T template<class T> struct iterator_traits<const T*> {
3605 T typedef ptrdiff_t difference_type;
3606 T typedef T value_type;
3607 T typedef const T* pointer;
3608 T typedef const T& reference;
3609 T typedef random_access_iterator_tag iterator_category;
3612 24.3.2 Basic iterator [lib.iterator.basic]
3614 template<class Category, class T, class Distance = ptrdiff_t,
3615 class Pointer = T*, class Reference = T&>
3617 T typedef T value_type;
3618 T typedef Distance difference_type;
3619 T typedef Pointer pointer;
3620 T typedef Reference reference;
3621 T typedef Category iterator_category;
3624 24.3.3 Standard iterator tags [lib.std.iterator.tags]
3626 T struct input_iterator_tag {};
3627 T struct output_iterator_tag {};
3628 T struct forward_iterator_tag: public input_iterator_tag {};
3629 T struct bidirectional_iterator_tag: public forward_iterator_tag {};
3630 T struct random_access_iterator_tag: public bidirectional_iterator_tag {};
3633 24.4.1 Reverse iterators [lib.reverse.iterators]
3635 template <class Iterator>
3636 X class reverse_iterator : public
3637 iterator<typename iterator_traits<Iterator>::iterator_category,
3638 typename iterator_traits<Iterator>::value_type,
3639 typename iterator_traits<Iterator>::difference_type,
3640 typename iterator_traits<Iterator>::pointer,
3641 typename iterator_traits<Iterator>::reference> {
3647 T typedef typename iterator_traits<Iterator>::difference_type
3649 T typedef typename iterator_traits<Iterator>::reference
3651 T typedef typename iterator_traits<Iterator>::pointer
3654 T reverse_iterator();
3655 T explicit reverse_iterator(Iterator x);
3656 T template <class U> reverse_iterator(const reverse_iterator<U>& u);
3657 T Iterator base() const; // explicit
3658 T reference operator*() const;
3659 T pointer operator->() const;
3660 T reverse_iterator& operator++();
3661 T reverse_iterator operator++(int);
3662 T reverse_iterator& operator--();
3663 T reverse_iterator operator--(int);
3665 T reverse_iterator operator+ (difference_type n) const;
3666 T reverse_iterator& operator+=(difference_type n);
3667 T reverse_iterator operator- (difference_type n) const;
3668 T reverse_iterator& operator-=(difference_type n);
3669 T reference operator[](difference_type n) const;
3671 T template <class Iterator>
3673 const reverse_iterator<Iterator>& x,
3674 const reverse_iterator<Iterator>& y);
3675 T template <class Iterator>
3677 const reverse_iterator<Iterator>& x,
3678 const reverse_iterator<Iterator>& y);
3679 T template <class Iterator>
3681 const reverse_iterator<Iterator>& x,
3682 const reverse_iterator<Iterator>& y);
3683 T template <class Iterator>
3685 const reverse_iterator<Iterator>& x,
3686 const reverse_iterator<Iterator>& y);
3687 T template <class Iterator>
3689 const reverse_iterator<Iterator>& x,
3690 const reverse_iterator<Iterator>& y);
3691 T template <class Iterator>
3693 const reverse_iterator<Iterator>& x,
3694 const reverse_iterator<Iterator>& y);
3695 T template <class Iterator>
3696 typename reverse_iterator<Iterator>::difference_type operator-(
3697 const reverse_iterator<Iterator>& x,
3698 const reverse_iterator<Iterator>& y);
3699 T template <class Iterator>
3700 reverse_iterator<Iterator> operator+(
3701 typename reverse_iterator<Iterator>::difference_type n,
3702 const reverse_iterator<Iterator>& x);
3705 24.4.2.1 Template class [lib.back.insert.iterator]
3706 back_insert_iterator
3708 template <class Container>
3709 X class back_insert_iterator :
3710 public iterator<output_iterator_tag,void,void,void,void> {
3712 T Container* container;
3714 T typedef Container container_type;
3715 T explicit back_insert_iterator(Container& x);
3716 T back_insert_iterator<Container>&
3717 operator=(typename Container::const_reference value);
3719 T back_insert_iterator<Container>& operator*();
3720 T back_insert_iterator<Container>& operator++();
3721 T back_insert_iterator<Container> operator++(int);
3723 T template <class Container>
3724 back_insert_iterator<Container> back_inserter(Container& x);
3728 24.4.2.3 Template class [lib.front.insert.iterator]
3729 front_insert_iterator
3731 template <class Container>
3732 X class front_insert_iterator :
3733 public iterator<output_iterator_tag,void,void,void,void> {
3735 T Container* container;
3737 T typedef Container container_type;
3738 T explicit front_insert_iterator(Container& x);
3739 T front_insert_iterator<Container>&
3740 operator=(typename Container::const_reference value);
3741 T front_insert_iterator<Container>& operator*();
3742 T front_insert_iterator<Container>& operator++();
3743 T front_insert_iterator<Container> operator++(int);
3745 T template <class Container>
3746 front_insert_iterator<Container> front_inserter(Container& x);
3749 24.4.2.5 Template class insert_iterator [lib.insert.iterator]
3751 template <class Container>
3752 X class insert_iterator :
3753 public iterator<output_iterator_tag,void,void,void,void> {
3755 T Container* container;
3756 T typename Container::iterator iter;
3758 T typedef Container container_type;
3759 T insert_iterator(Container& x, typename Container::iterator i);
3760 T insert_iterator<Container>&
3761 operator=(typename Container::const_reference value);
3762 T insert_iterator<Container>& operator*();
3763 T insert_iterator<Container>& operator++();
3764 T insert_iterator<Container>& operator++(int);
3766 T template <class Container, class Iterator>
3767 insert_iterator<Container> inserter(Container& x, Iterator i);
3769 24.5.1 Template class istream_iterator [lib.istream.iterator]
3771 template <class T, class charT = char, class traits = char_traits<charT>,
3772 class Distance = ptrdiff_t>
3773 X class istream_iterator:
3774 public iterator<input_iterator_tag, T, Distance, const T*, const T&> {
3776 T typedef charT char_type
3777 T typedef traits traits_type;
3778 T typedef basic_istream<charT,traits> istream_type;
3779 T istream_iterator();
3780 T istream_iterator(istream_type& s);
3781 T istream_iterator(const istream_iterator<T,charT,traits,Distance>& x);
3782 T ~istream_iterator();
3784 T const T& operator*() const;
3785 T const T* operator->() const;
3786 T istream_iterator<T,charT,traits,Distance>& operator++();
3787 T istream_iterator<T,charT,traits,Distance> operator++(int);
3790 T template <class T, class charT, class traits, class Distance>
3791 bool operator==(const istream_iterator<T,charT,traits,Distance>& x,
3792 const istream_iterator<T,charT,traits,Distance>& y);
3793 T template <class T, class charT, class traits, class Distance>
3794 bool operator!=(const istream_iterator<T,charT,traits,Distance>& x,
3795 const istream_iterator<T,charT,traits,Distance>& y);
3798 24.5.2 Template class ostream_iterator [lib.ostream.iterator]
3800 template <class T, class charT = char, class traits = char_traits<charT> >
3801 X class ostream_iterator:
3802 public iterator<output_iterator_tag, void, void, void, void> {
3804 T typedef charT char_type;
3805 T typedef traits traits_type;
3806 T typedef basic_ostream<charT,traits> ostream_type;
3807 T ostream_iterator(ostream_type& s);
3808 T ostream_iterator(ostream_type& s, const charT* delimiter);
3809 T ostream_iterator(const ostream_iterator<T,charT,traits>& x);
3810 T ~ostream_iterator();
3811 T ostream_iterator<T,charT,traits>& operator=(const T& value);
3813 T ostream_iterator<T,charT,traits>& operator*();
3814 T ostream_iterator<T,charT,traits>& operator++();
3815 T ostream_iterator<T,charT,traits>& operator++(int);
3819 24.5.3 Template class [lib.istreambuf.iterator]
3822 template<class charT, class traits = char_traits<charT> >
3823 X class istreambuf_iterator
3824 : public iterator<input_iterator_tag, charT,
3825 typename traits::off_type, charT*, charT&> {
3827 T typedef charT char_type;
3828 T typedef traits traits_type;
3829 T typedef typename traits::int_type int_type;
3830 T typedef basic_streambuf<charT,traits> streambuf_type;
3831 T typedef basic_istream<charT,traits> istream_type;
3832 T class proxy; // exposition only
3833 T istreambuf_iterator() throw();
3834 T istreambuf_iterator(istream_type& s) throw();
3835 T istreambuf_iterator(streambuf_type* s) throw();
3836 T istreambuf_iterator(const proxy& p) throw();
3837 T charT operator*() const;
3838 T istreambuf_iterator<charT,traits>& operator++();
3839 T proxy operator++(int);
3840 X bool equal(istreambuf_iterator& b);
3843 T template <class charT, class traits>
3844 bool operator==(const istreambuf_iterator<charT,traits>& a,
3845 const istreambuf_iterator<charT,traits>& b);
3847 T template <class charT, class traits>
3848 bool operator!=(const istreambuf_iterator<charT,traits>& a,
3849 const istreambuf_iterator<charT,traits>& b);
3851 24.5.3.1 Template class [lib.istreambuf.iterator::proxy]
3852 istreambuf_iterator::proxy
3854 template <class charT, class traits = char_traits<charT> >
3855 T class istreambuf_iterator<charT, traits>::proxy
3858 T basic_streambuf<charT,traits>* sbuf_;
3860 basic_streambuf<charT,traits>* sbuf);
3861 : keep_(c), sbuf_(sbuf) {}
3863 T charT operator*() { return keep_; }
3868 24.5.4 Template class [lib.ostreambuf.iterator]
3871 template <class charT, class traits = char_traits<charT> >
3872 T class ostreambuf_iterator:
3873 public iterator<output_iterator_tag, void, void, void, void> {
3875 T typedef charT char_type;
3876 T typedef traits traits_type;
3877 T typedef basic_streambuf<charT,traits> streambuf_type;
3878 T typedef basic_ostream<charT,traits> ostream_type;
3880 T ostreambuf_iterator(ostream_type& s) throw();
3881 T ostreambuf_iterator(streambuf_type* s) throw();
3882 T ostreambuf_iterator& operator=(charT c);
3883 T ostreambuf_iterator& operator*();
3884 T ostreambuf_iterator& operator++();
3885 T ostreambuf_iterator& operator++(int);
3886 T bool failed() const throw();
3890 Header <algorithm> synopsis
3893 // _lib.alg.nonmodifying_, non-modifying sequence operations:
3894 T template<class InputIterator, class Function>
3895 Function for_each(InputIterator first, InputIterator last, Function f);
3896 T template<class InputIterator, class T>
3897 InputIterator find(InputIterator first, InputIterator last,
3899 T template<class InputIterator, class Predicate>
3900 InputIterator find_if(InputIterator first, InputIterator last,
3902 T template<class ForwardIterator1, class ForwardIterator2>
3904 find_end(ForwardIterator1 first1, ForwardIterator1 last1,
3905 ForwardIterator2 first2, ForwardIterator2 last2);
3906 T template<class ForwardIterator1, class ForwardIterator2,
3907 class BinaryPredicate>
3909 find_end(ForwardIterator1 first1, ForwardIterator1 last1,
3910 ForwardIterator2 first2, ForwardIterator2 last2,
3911 BinaryPredicate pred);
3912 T template<class ForwardIterator1, class ForwardIterator2>
3914 find_first_of(ForwardIterator1 first1, ForwardIterator1 last1,
3915 ForwardIterator2 first2, ForwardIterator2 last2);
3916 T template<class ForwardIterator1, class ForwardIterator2,
3917 class BinaryPredicate>
3919 find_first_of(ForwardIterator1 first1, ForwardIterator1 last1,
3920 ForwardIterator2 first2, ForwardIterator2 last2,
3921 BinaryPredicate pred);
3922 T template<class ForwardIterator>
3923 ForwardIterator adjacent_find(ForwardIterator first,
3924 ForwardIterator last);
3925 T template<class ForwardIterator, class BinaryPredicate>
3926 ForwardIterator adjacent_find(ForwardIterator first,
3927 ForwardIterator last, BinaryPredicate pred);
3928 T template<class InputIterator, class T>
3929 typename iterator_traits<InputIterator>::difference_type
3930 count(InputIterator first, InputIterator last, const T& value);
3931 T template<class InputIterator, class Predicate>
3932 typename iterator_traits<InputIterator>::difference_type
3933 count_if(InputIterator first, InputIterator last, Predicate pred);
3934 T template<class InputIterator1, class InputIterator2>
3935 pair<InputIterator1, InputIterator2>
3936 mismatch(InputIterator1 first1, InputIterator1 last1,
3937 InputIterator2 first2);
3938 T template<class InputIterator1, class InputIterator2, class BinaryPredicate>
3939 pair<InputIterator1, InputIterator2>
3940 mismatch(InputIterator1 first1, InputIterator1 last1,
3941 InputIterator2 first2, BinaryPredicate pred);
3943 T template<class InputIterator1, class InputIterator2>
3944 bool equal(InputIterator1 first1, InputIterator1 last1,
3945 InputIterator2 first2);
3946 T template<class InputIterator1, class InputIterator2, class BinaryPredicate>
3947 bool equal(InputIterator1 first1, InputIterator1 last1,
3948 InputIterator2 first2, BinaryPredicate pred);
3949 T template<class ForwardIterator1, class ForwardIterator2>
3950 ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1,
3951 ForwardIterator2 first2, ForwardIterator2 last2);
3952 T template<class ForwardIterator1, class ForwardIterator2,
3953 class BinaryPredicate>
3954 ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1,
3955 ForwardIterator2 first2, ForwardIterator2 last2,
3956 BinaryPredicate pred);
3957 T template<class ForwardIterator, class Size, class T>
3958 ForwardIterator search_n(ForwardIterator first, ForwardIterator last,
3959 Size count, const T& value);
3960 T template<class ForwardIterator, class Size, class T, class BinaryPredicate>
3961 ForwardIterator1 search_n(ForwardIterator first, ForwardIterator last,
3962 Size count, const T& value,
3963 BinaryPredicate pred);
3964 // _lib.alg.modifying.operations_, modifying sequence operations:
3965 // _lib.alg.copy_, copy:
3966 T template<class InputIterator, class OutputIterator>
3967 OutputIterator copy(InputIterator first, InputIterator last,
3968 OutputIterator result);
3969 T template<class BidirectionalIterator1, class BidirectionalIterator2>
3970 BidirectionalIterator2
3971 copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last,
3972 BidirectionalIterator2 result);
3973 // _lib.alg.swap_, swap:
3974 T template<class T> void swap(T& a, T& b);
3975 T template<class ForwardIterator1, class ForwardIterator2>
3976 ForwardIterator2 swap_ranges(ForwardIterator1 first1,
3977 ForwardIterator1 last1, ForwardIterator2 first2);
3978 T template<class ForwardIterator1, class ForwardIterator2>
3979 void iter_swap(ForwardIterator1 a, ForwardIterator2 b);
3980 T template<class InputIterator, class OutputIterator, class UnaryOperation>
3981 OutputIterator transform(InputIterator first, InputIterator last,
3982 OutputIterator result, UnaryOperation op);
3983 T template<class InputIterator1, class InputIterator2, class OutputIterator,
3984 class BinaryOperation>
3985 OutputIterator transform(InputIterator1 first1, InputIterator1 last1,
3986 InputIterator2 first2, OutputIterator result,
3987 BinaryOperation binary_op);
3989 T template<class ForwardIterator, class T>
3990 void replace(ForwardIterator first, ForwardIterator last,
3991 const T& old_value, const T& new_value);
3992 T template<class ForwardIterator, class Predicate, class T>
3993 void replace_if(ForwardIterator first, ForwardIterator last,
3994 Predicate pred, const T& new_value);
3995 T template<class InputIterator, class OutputIterator, class T>
3996 OutputIterator replace_copy(InputIterator first, InputIterator last,
3997 OutputIterator result,
3998 const T& old_value, const T& new_value);
3999 T template<class Iterator, class OutputIterator, class Predicate, class T>
4000 OutputIterator replace_copy_if(Iterator first, Iterator last,
4001 OutputIterator result,
4002 Predicate pred, const T& new_value);
4003 T template<class ForwardIterator, class T>
4004 void fill(ForwardIterator first, ForwardIterator last, const T& value);
4005 T template<class OutputIterator, class Size, class T>
4006 void fill_n(OutputIterator first, Size n, const T& value);
4007 T template<class ForwardIterator, class Generator>
4008 void generate(ForwardIterator first, ForwardIterator last, Generator gen);
4009 T template<class OutputIterator, class Size, class Generator>
4010 void generate_n(OutputIterator first, Size n, Generator gen);
4011 T template<class ForwardIterator, class T>
4012 ForwardIterator remove(ForwardIterator first, ForwardIterator last,
4014 T template<class ForwardIterator, class Predicate>
4015 ForwardIterator remove_if(ForwardIterator first, ForwardIterator last,
4017 T template<class InputIterator, class OutputIterator, class T>
4018 OutputIterator remove_copy(InputIterator first, InputIterator last,
4019 OutputIterator result, const T& value);
4020 T template<class InputIterator, class OutputIterator, class Predicate>
4021 OutputIterator remove_copy_if(InputIterator first, InputIterator last,
4022 OutputIterator result, Predicate pred);
4023 T template<class ForwardIterator>
4024 ForwardIterator unique(ForwardIterator first, ForwardIterator last);
4025 T template<class ForwardIterator, class BinaryPredicate>
4026 ForwardIterator unique(ForwardIterator first, ForwardIterator last,
4027 BinaryPredicate pred);
4028 T template<class InputIterator, class OutputIterator>
4029 OutputIterator unique_copy(InputIterator first, InputIterator last,
4030 OutputIterator result);
4031 T template<class InputIterator, class OutputIterator, class BinaryPredicate>
4032 OutputIterator unique_copy(InputIterator first, InputIterator last,
4033 OutputIterator result, BinaryPredicate pred);
4034 T template<class BidirectionalIterator>
4035 void reverse(BidirectionalIterator first, BidirectionalIterator last);
4036 T template<class BidirectionalIterator, class OutputIterator>
4037 OutputIterator reverse_copy(BidirectionalIterator first,
4038 BidirectionalIterator last,
4039 OutputIterator result);
4041 T template<class ForwardIterator>
4042 void rotate(ForwardIterator first, ForwardIterator middle,
4043 ForwardIterator last);
4044 T template<class ForwardIterator, class OutputIterator>
4045 OutputIterator rotate_copy(ForwardIterator first, ForwardIterator middle,
4046 ForwardIterator last, OutputIterator result);
4047 T template<class RandomAccessIterator>
4048 void random_shuffle(RandomAccessIterator first,
4049 RandomAccessIterator last);
4050 T template<class RandomAccessIterator, class RandomNumberGenerator>
4051 void random_shuffle(RandomAccessIterator first,
4052 RandomAccessIterator last,
4053 RandomNumberGenerator& rand);
4054 // _lib.alg.partitions_, partitions:
4055 T template<class BidirectionalIterator, class Predicate>
4056 BidirectionalIterator partition(BidirectionalIterator first,
4057 BidirectionalIterator last,
4059 T template<class BidirectionalIterator, class Predicate>
4060 BidirectionalIterator stable_partition(BidirectionalIterator first,
4061 BidirectionalIterator last,
4063 // _lib.alg.sorting_, sorting and related operations:
4064 // _lib.alg.sort_, sorting:
4065 T template<class RandomAccessIterator>
4066 void sort(RandomAccessIterator first, RandomAccessIterator last);
4067 T template<class RandomAccessIterator, class Compare>
4068 void sort(RandomAccessIterator first, RandomAccessIterator last,
4070 T template<class RandomAccessIterator>
4071 void stable_sort(RandomAccessIterator first, RandomAccessIterator last);
4072 T template<class RandomAccessIterator, class Compare>
4073 void stable_sort(RandomAccessIterator first, RandomAccessIterator last,
4075 T template<class RandomAccessIterator>
4076 void partial_sort(RandomAccessIterator first,
4077 RandomAccessIterator middle,
4078 RandomAccessIterator last);
4079 T template<class RandomAccessIterator, class Compare>
4080 void partial_sort(RandomAccessIterator first,
4081 RandomAccessIterator middle,
4082 RandomAccessIterator last, Compare comp);
4083 T template<class InputIterator, class RandomAccessIterator>
4084 RandomAccessIterator
4085 partial_sort_copy(InputIterator first, InputIterator last,
4086 RandomAccessIterator result_first,
4087 RandomAccessIterator result_last);
4088 T template<class InputIterator, class RandomAccessIterator, class Compare>
4089 RandomAccessIterator
4090 partial_sort_copy(InputIterator first, InputIterator last,
4091 RandomAccessIterator result_first,
4092 RandomAccessIterator result_last,
4095 T template<class RandomAccessIterator>
4096 void nth_element(RandomAccessIterator first, RandomAccessIterator nth,
4097 RandomAccessIterator last);
4098 T template<class RandomAccessIterator, class Compare>
4099 void nth_element(RandomAccessIterator first, RandomAccessIterator nth,
4100 RandomAccessIterator last, Compare comp);
4101 // _lib.alg.binary.search_, binary search:
4102 T template<class ForwardIterator, class T>
4103 ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last,
4105 T template<class ForwardIterator, class T, class Compare>
4106 ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last,
4107 const T& value, Compare comp);
4108 T template<class ForwardIterator, class T>
4109 ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last,
4111 T template<class ForwardIterator, class T, class Compare>
4112 ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last,
4113 const T& value, Compare comp);
4114 T template<class ForwardIterator, class T>
4115 pair<ForwardIterator, ForwardIterator>
4116 equal_range(ForwardIterator first, ForwardIterator last,
4118 T template<class ForwardIterator, class T, class Compare>
4119 pair<ForwardIterator, ForwardIterator>
4120 equal_range(ForwardIterator first, ForwardIterator last,
4121 const T& value, Compare comp);
4122 T template<class ForwardIterator, class T>
4123 bool binary_search(ForwardIterator first, ForwardIterator last,
4125 T template<class ForwardIterator, class T, class Compare>
4126 bool binary_search(ForwardIterator first, ForwardIterator last,
4127 const T& value, Compare comp);
4128 // _lib.alg.merge_, merge:
4129 T template<class InputIterator1, class InputIterator2, class OutputIterator>
4130 OutputIterator merge(InputIterator1 first1, InputIterator1 last1,
4131 InputIterator2 first2, InputIterator2 last2,
4132 OutputIterator result);
4133 T template<class InputIterator1, class InputIterator2, class OutputIterator,
4135 OutputIterator merge(InputIterator1 first1, InputIterator1 last1,
4136 InputIterator2 first2, InputIterator2 last2,
4137 OutputIterator result, Compare comp);
4138 T template<class BidirectionalIterator>
4139 void inplace_merge(BidirectionalIterator first,
4140 BidirectionalIterator middle,
4141 BidirectionalIterator last);
4142 T template<class BidirectionalIterator, class Compare>
4143 void inplace_merge(BidirectionalIterator first,
4144 BidirectionalIterator middle,
4145 BidirectionalIterator last, Compare comp);
4147 // _lib.alg.set.operations_, set operations:
4148 T template<class InputIterator1, class InputIterator2>
4149 bool includes(InputIterator1 first1, InputIterator1 last1,
4150 InputIterator2 first2, InputIterator2 last2);
4151 T template<class InputIterator1, class InputIterator2, class Compare>
4152 bool includes(InputIterator1 first1, InputIterator1 last1,
4153 InputIterator2 first2, InputIterator2 last2, Compare comp);
4154 T template<class InputIterator1, class InputIterator2, class OutputIterator>
4155 OutputIterator set_union(InputIterator1 first1, InputIterator1 last1,
4156 InputIterator2 first2, InputIterator2 last2,
4157 OutputIterator result);
4158 T template<class InputIterator1, class InputIterator2, class OutputIterator,
4160 OutputIterator set_union(InputIterator1 first1, InputIterator1 last1,
4161 InputIterator2 first2, InputIterator2 last2,
4162 OutputIterator result, Compare comp);
4163 T template<class InputIterator1, class InputIterator2, class OutputIterator>
4164 OutputIterator set_intersection
4165 (InputIterator1 first1, InputIterator1 last1,
4166 InputIterator2 first2, InputIterator2 last2,
4167 OutputIterator result);
4168 T template<class InputIterator1, class InputIterator2, class OutputIterator,
4170 OutputIterator set_intersection
4171 (InputIterator1 first1, InputIterator1 last1,
4172 InputIterator2 first2, InputIterator2 last2,
4173 OutputIterator result, Compare comp);
4174 T template<class InputIterator1, class InputIterator2, class OutputIterator>
4175 OutputIterator set_difference
4176 (InputIterator1 first1, InputIterator1 last1,
4177 InputIterator2 first2, InputIterator2 last2,
4178 OutputIterator result);
4179 T template<class InputIterator1, class InputIterator2, class OutputIterator,
4181 OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1,
4182 InputIterator2 first2, InputIterator2 last2,
4183 OutputIterator result, Compare comp);
4184 T template<class InputIterator1, class InputIterator2, class OutputIterator>
4186 set_symmetric_difference(InputIterator1 first1, InputIterator1 last1,
4187 InputIterator2 first2, InputIterator2 last2,
4188 OutputIterator result);
4189 T template<class InputIterator1, class InputIterator2, class OutputIterator,
4192 set_symmetric_difference(InputIterator1 first1, InputIterator1 last1,
4193 InputIterator2 first2, InputIterator2 last2,
4194 OutputIterator result, Compare comp);
4195 // _lib.alg.heap.operations_, heap operations:
4196 T template<class RandomAccessIterator>
4197 void push_heap(RandomAccessIterator first, RandomAccessIterator last);
4198 T template<class RandomAccessIterator, class Compare>
4199 void push_heap(RandomAccessIterator first, RandomAccessIterator last,
4202 T template<class RandomAccessIterator>
4203 void pop_heap(RandomAccessIterator first, RandomAccessIterator last);
4204 T template<class RandomAccessIterator, class Compare>
4205 void pop_heap(RandomAccessIterator first, RandomAccessIterator last,
4207 T template<class RandomAccessIterator>
4208 void make_heap(RandomAccessIterator first, RandomAccessIterator last);
4209 T template<class RandomAccessIterator, class Compare>
4210 void make_heap(RandomAccessIterator first, RandomAccessIterator last,
4212 T template<class RandomAccessIterator>
4213 void sort_heap(RandomAccessIterator first, RandomAccessIterator last);
4214 T template<class RandomAccessIterator, class Compare>
4215 void sort_heap(RandomAccessIterator first, RandomAccessIterator last,
4217 // _lib.alg.min.max_, minimum and maximum:
4218 T template<class T> const T& min(const T& a, const T& b);
4219 T template<class T, class Compare>
4220 const T& min(const T& a, const T& b, Compare comp);
4221 T template<class T> const T& max(const T& a, const T& b);
4222 T template<class T, class Compare>
4223 const T& max(const T& a, const T& b, Compare comp);
4224 T template<class ForwardIterator>
4225 ForwardIterator min_element(ForwardIterator first, ForwardIterator last);
4226 T template<class ForwardIterator, class Compare>
4227 ForwardIterator min_element(ForwardIterator first, ForwardIterator last,
4229 T template<class ForwardIterator>
4230 ForwardIterator max_element(ForwardIterator first, ForwardIterator last);
4231 T template<class ForwardIterator, class Compare>
4232 ForwardIterator max_element(ForwardIterator first, ForwardIterator last,
4234 T template<class InputIterator1, class InputIterator2>
4235 bool lexicographical_compare
4236 (InputIterator1 first1, InputIterator1 last1,
4237 InputIterator2 first2, InputIterator2 last2);
4238 T template<class InputIterator1, class InputIterator2, class Compare>
4239 bool lexicographical_compare
4240 (InputIterator1 first1, InputIterator1 last1,
4241 InputIterator2 first2, InputIterator2 last2,
4244 // _lib.alg.permutation.generators_, permutations
4245 T template<class BidirectionalIterator>
4246 bool next_permutation(BidirectionalIterator first,
4247 BidirectionalIterator last);
4248 T template<class BidirectionalIterator, class Compare>
4249 bool next_permutation(BidirectionalIterator first,
4250 BidirectionalIterator last, Compare comp);
4251 T template<class BidirectionalIterator>
4252 bool prev_permutation(BidirectionalIterator first,
4253 BidirectionalIterator last);
4254 T template<class BidirectionalIterator, class Compare>
4255 bool prev_permutation(BidirectionalIterator first,
4256 BidirectionalIterator last, Compare comp);
4259 25.4 C library algorithms [lib.alg.c.library]
4261 1 Header <cstdlib> (partial, Table 2):
4263 Table 2--Header <cstdlib> synopsis
4265 Functions: bsearch qsort
4268 X extern "C" void *bsearch(const void *key, const void *base,
4269 size_t nmemb, size_t size,
4270 int (*compar)(const void *, const void *));
4271 X extern "C++" void *bsearch(const void *key, const void *base,
4272 size_t nmemb, size_t size,
4273 int (*compar)(const void *, const void *));
4275 X extern "C" void qsort(void* base, size_t nmemb, size_t size,
4276 int (*compar)(const void*, const void*));
4277 X extern "C++" void qsort(void* base, size_t nmemb, size_t size,
4278 int (*compar)(const void*, const void*));
4282 26.2 Complex numbers [lib.complex.numbers]
4285 26.2.1 Header <complex> synopsis [lib.complex.synopsis]
4287 T template<class T> class complex;
4288 T template<> class complex<float>;
4289 T template<> class complex<double>;
4290 T template<> class complex<long double>;
4291 // _lib.complex.ops_ operators:
4293 complex<T> operator+(const complex<T>&, const complex<T>&);
4294 T template<class T> complex<T> operator+(const complex<T>&, const T&);
4295 T template<class T> complex<T> operator+(const T&, const complex<T>&);
4296 T template<class T> complex<T> operator-
4297 (const complex<T>&, const complex<T>&);
4298 T template<class T> complex<T> operator-(const complex<T>&, const T&);
4299 T template<class T> complex<T> operator-(const T&, const complex<T>&);
4300 T template<class T> complex<T> operator*
4301 (const complex<T>&, const complex<T>&);
4302 T template<class T> complex<T> operator*(const complex<T>&, const T&);
4303 T template<class T> complex<T> operator*(const T&, const complex<T>&);
4304 T template<class T> complex<T> operator/
4305 (const complex<T>&, const complex<T>&);
4306 T template<class T> complex<T> operator/(const complex<T>&, const T&);
4307 T template<class T> complex<T> operator/(const T&, const complex<T>&);
4308 T template<class T> complex<T> operator+(const complex<T>&);
4309 T template<class T> complex<T> operator-(const complex<T>&);
4310 T template<class T> bool operator==
4311 (const complex<T>&, const complex<T>&);
4312 T template<class T> bool operator==(const complex<T>&, const T&);
4313 T template<class T> bool operator==(const T&, const complex<T>&);
4314 T template<class T> bool operator!=(const complex<T>&, const complex<T>&);
4315 T template<class T> bool operator!=(const complex<T>&, const T&);
4316 T template<class T> bool operator!=(const T&, const complex<T>&);
4317 T template<class T, class charT, class traits>
4318 basic_istream<charT, traits>&
4319 operator>>(basic_istream<charT, traits>&, complex<T>&);
4321 T template<class T, class charT, class traits>
4322 basic_ostream<charT, traits>&
4323 operator<<(basic_ostream<charT, traits>&, const complex<T>&);
4324 // _lib.complex.value.ops_ values:
4325 T template<class T> T real(const complex<T>&);
4326 T template<class T> T imag(const complex<T>&);
4328 T template<class T> T abs(const complex<T>&);
4329 T template<class T> T arg(const complex<T>&);
4330 T template<class T> T norm(const complex<T>&);
4331 T template<class T> complex<T> conj(const complex<T>&);
4332 T template<class T> complex<T> polar(const T&, const T&);
4333 // _lib.complex.transcendentals_ transcendentals:
4334 T template<class T> complex<T> cos (const complex<T>&);
4335 T template<class T> complex<T> cosh (const complex<T>&);
4336 T template<class T> complex<T> exp (const complex<T>&);
4337 T template<class T> complex<T> log (const complex<T>&);
4338 T template<class T> complex<T> log10(const complex<T>&);
4339 T template<class T> complex<T> pow(const complex<T>&, int);
4340 T template<class T> complex<T> pow(const complex<T>&, const T&);
4341 T template<class T> complex<T> pow(const complex<T>&, const complex<T>&);
4342 T template<class T> complex<T> pow(const T&, const complex<T>&);
4343 T template<class T> complex<T> sin (const complex<T>&);
4344 T template<class T> complex<T> sinh (const complex<T>&);
4345 T template<class T> complex<T> sqrt (const complex<T>&);
4346 T template<class T> complex<T> tan (const complex<T>&);
4347 T template<class T> complex<T> tanh (const complex<T>&);
4350 26.2.2 Template class complex [lib.complex]
4355 T typedef T value_type;
4357 T complex(const T& re = T(), const T& im = T());
4358 T complex(const complex&);
4359 T template<class X> complex(const complex<X>&);
4364 T complex<T>& operator= (const T&);
4365 T complex<T>& operator+=(const T&);
4366 T complex<T>& operator-=(const T&);
4367 T complex<T>& operator*=(const T&);
4368 T complex<T>& operator/=(const T&);
4370 T complex& operator=(const complex&);
4371 T template<class X> complex<T>& operator= (const complex<X>&);
4372 T template<class X> complex<T>& operator+=(const complex<X>&);
4373 T template<class X> complex<T>& operator-=(const complex<X>&);
4374 T template<class X> complex<T>& operator*=(const complex<X>&);
4375 T template<class X> complex<T>& operator/=(const complex<X>&);
4378 T template<class T> complex<T> operator+
4379 (const complex<T>&, const complex<T>&);
4380 T template<class T> complex<T> operator+(const complex<T>&, const T&);
4381 T template<class T> complex<T> operator+(const T&, const complex<T>&);
4383 T template<class T> complex<T> operator-
4384 (const complex<T>&, const complex<T>&);
4385 T template<class T> complex<T> operator-(const complex<T>&, const T&);
4386 T template<class T> complex<T> operator-(const T&, const complex<T>&);
4388 T template<class T> complex<T> operator*
4389 (const complex<T>&, const complex<T>&);
4390 T template<class T> complex<T> operator*(const complex<T>&, const T&);
4391 T template<class T> complex<T> operator*(const T&, const complex<T>&);
4393 T template<class T> complex<T> operator/
4394 (const complex<T>&, const complex<T>&);
4395 T template<class T> complex<T> operator/(const complex<T>&, const T&);
4396 T template<class T> complex<T> operator/(const T&, const complex<T>&);
4398 T template<class T> complex<T> operator+(const complex<T>&);
4399 T template<class T> complex<T> operator-(const complex<T>&);
4401 T template<class T> bool operator==(const complex<T>&, const complex<T>&);
4402 T template<class T> bool operator==(const complex<T>&, const T&);
4403 T template<class T> bool operator==(const T&, const complex<T>&);
4405 T template<class T> bool operator!=(const complex<T>&, const complex<T>&);
4406 T template<class T> bool operator!=(const complex<T>&, const T&);
4407 T template<class T> bool operator!=(const T&, const complex<T>&);
4409 T template<class T, class charT, class traits>
4410 basic_istream<charT, traits>&
4411 operator>>(basic_istream<charT, traits>&, complex<T>&);
4413 T template<class T, class charT, class traits>
4414 basic_ostream<charT, traits>&
4415 operator<<(basic_ostream<charT, traits>&, const complex<T>&);
4418 26.2.3 complex specializations [lib.complex.special]
4420 T template<> class complex<float> {
4422 T typedef float value_type;
4424 T complex(float re = 0.0f, float im = 0.0f);
4425 T explicit complex(const complex<double>&);
4426 T explicit complex(const complex<long double>&);
4427 T float real() const;
4428 T float imag() const;
4430 T complex<float>& operator= (float);
4431 T complex<float>& operator+=(float);
4432 T complex<float>& operator-=(float);
4433 T complex<float>& operator*=(float);
4434 T complex<float>& operator/=(float);
4436 T complex<float>& operator=(const complex<float>&);
4437 T template<class X> complex<float>& operator= (const complex<X>&);
4438 T template<class X> complex<float>& operator+=(const complex<X>&);
4439 T template<class X> complex<float>& operator-=(const complex<X>&);
4440 T template<class X> complex<float>& operator*=(const complex<X>&);
4441 T template<class X> complex<float>& operator/=(const complex<X>&);
4443 T template<> class complex<double> {
4445 T typedef double value_type;
4447 T complex(double re = 0.0, double im = 0.0);
4448 T complex(const complex<float>&);
4449 T explicit complex(const complex<long double>&);
4450 T double real() const;
4451 T double imag() const;
4453 T complex<double>& operator= (double);
4454 T complex<double>& operator+=(double);
4455 T complex<double>& operator-=(double);
4456 T complex<double>& operator*=(double);
4457 T complex<double>& operator/=(double);
4459 T complex<double>& operator=(const complex<double>&);
4460 T template<class X> complex<double>& operator= (const complex<X>&);
4461 T template<class X> complex<double>& operator+=(const complex<X>&);
4462 T template<class X> complex<double>& operator-=(const complex<X>&);
4463 T template<class X> complex<double>& operator*=(const complex<X>&);
4464 T template<class X> complex<double>& operator/=(const complex<X>&);
4467 T template<> class complex<long double> {
4469 T typedef long double value_type;
4471 T complex(long double re = 0.0L, long double im = 0.0L);
4472 T complex(const complex<float>&);
4473 T complex(const complex<double>&);
4474 T long double real() const;
4475 T long double imag() const;
4477 T complex<long double>& operator=(const complex<long double>&);
4478 T complex<long double>& operator= (long double);
4479 T complex<long double>& operator+=(long double);
4480 T complex<long double>& operator-=(long double);
4481 T complex<long double>& operator*=(long double);
4482 T complex<long double>& operator/=(long double);
4484 T template<class X> complex<long double>& operator= (const complex<X>&);
4485 T template<class X> complex<long double>& operator+=(const complex<X>&);
4486 T template<class X> complex<long double>& operator-=(const complex<X>&);
4487 T template<class X> complex<long double>& operator*=(const complex<X>&);
4488 T template<class X> complex<long double>& operator/=(const complex<X>&);
4491 26.3 Numeric arrays [lib.numarray]
4493 26.3.1 Header <valarray> synopsis [lib.valarray.synopsis]
4495 T template<class T> class valarray; // An array of type T
4497 T template<class T> class slice_array;
4499 T template<class T> class gslice_array;
4500 T template<class T> class mask_array; // a masked array
4501 T template<class T> class indirect_array; // an indirected array
4503 T template<class T> valarray<T> operator*
4504 (const valarray<T>&, const valarray<T>&);
4505 T template<class T> valarray<T> operator* (const valarray<T>&, const T&);
4506 T template<class T> valarray<T> operator* (const T&, const valarray<T>&);
4507 T template<class T> valarray<T> operator/
4508 (const valarray<T>&, const valarray<T>&);
4509 T template<class T> valarray<T> operator/ (const valarray<T>&, const T&);
4510 T template<class T> valarray<T> operator/ (const T&, const valarray<T>&);
4511 T template<class T> valarray<T> operator%
4512 (const valarray<T>&, const valarray<T>&);
4513 T template<class T> valarray<T> operator% (const valarray<T>&, const T&);
4514 T template<class T> valarray<T> operator% (const T&, const valarray<T>&);
4515 T template<class T> valarray<T> operator+
4516 (const valarray<T>&, const valarray<T>&);
4517 T template<class T> valarray<T> operator+ (const valarray<T>&, const T&);
4518 T template<class T> valarray<T> operator+ (const T&, const valarray<T>&);
4519 T template<class T> valarray<T> operator-
4520 (const valarray<T>&, const valarray<T>&);
4521 T template<class T> valarray<T> operator- (const valarray<T>&, const T&);
4522 T template<class T> valarray<T> operator- (const T&, const valarray<T>&);
4523 T template<class T> valarray<T> operator^
4524 (const valarray<T>&, const valarray<T>&);
4525 T template<class T> valarray<T> operator^ (const valarray<T>&, const T&);
4526 T template<class T> valarray<T> operator^ (const T&, const valarray<T>&);
4527 T template<class T> valarray<T> operator&
4528 (const valarray<T>&, const valarray<T>&);
4529 T template<class T> valarray<T> operator& (const valarray<T>&, const T&);
4530 T template<class T> valarray<T> operator& (const T&, const valarray<T>&);
4531 T template<class T> valarray<T> operator|
4532 (const valarray<T>&, const valarray<T>&);
4533 T template<class T> valarray<T> operator| (const valarray<T>&, const T&);
4534 T template<class T> valarray<T> operator| (const T&, const valarray<T>&);
4535 T template<class T> valarray<T> operator<<
4536 (const valarray<T>&, const valarray<T>&);
4537 T template<class T> valarray<T> operator<<(const valarray<T>&, const T&);
4538 T template<class T> valarray<T> operator<<(const T&, const valarray<T>&);
4539 T template<class T> valarray<T> operator>>
4540 (const valarray<T>&, const valarray<T>&);
4541 T template<class T> valarray<T> operator>>(const valarray<T>&, const T&);
4542 T template<class T> valarray<T> operator>>(const T&, const valarray<T>&);
4543 T template<class T> valarray<bool> operator&&
4544 (const valarray<T>&, const valarray<T>&);
4545 T template<class T> valarray<bool> operator&&(const valarray<T>&, const T&);
4546 T template<class T> valarray<bool> operator&&(const T&, const valarray<T>&);
4547 T template<class T> valarray<bool> operator||
4548 (const valarray<T>&, const valarray<T>&);
4549 T template<class T> valarray<bool> operator||(const valarray<T>&, const T&);
4550 T template<class T> valarray<bool> operator||(const T&, const valarray<T>&);
4553 valarray<bool> operator==(const valarray<T>&, const valarray<T>&);
4554 T template<class T> valarray<bool> operator==(const valarray<T>&, const T&);
4555 T template<class T> valarray<bool> operator==(const T&, const valarray<T>&);
4557 valarray<bool> operator!=(const valarray<T>&, const valarray<T>&);
4558 T template<class T> valarray<bool> operator!=(const valarray<T>&, const T&);
4559 T template<class T> valarray<bool> operator!=(const T&, const valarray<T>&);
4561 valarray<bool> operator< (const valarray<T>&, const valarray<T>&);
4562 T template<class T> valarray<bool> operator< (const valarray<T>&, const T&);
4563 T template<class T> valarray<bool> operator< (const T&, const valarray<T>&);
4565 valarray<bool> operator> (const valarray<T>&, const valarray<T>&);
4566 T template<class T> valarray<bool> operator> (const valarray<T>&, const T&);
4567 T template<class T> valarray<bool> operator> (const T&, const valarray<T>&);
4569 valarray<bool> operator<=(const valarray<T>&, const valarray<T>&);
4570 T template<class T> valarray<bool> operator<=(const valarray<T>&, const T&);
4571 T template<class T> valarray<bool> operator<=(const T&, const valarray<T>&);
4573 valarray<bool> operator>=(const valarray<T>&, const valarray<T>&);
4574 T template<class T> valarray<bool> operator>=(const valarray<T>&, const T&);
4575 T template<class T> valarray<bool> operator>=(const T&, const valarray<T>&);
4576 T template<class T> valarray<T> abs (const valarray<T>&);
4577 T template<class T> valarray<T> acos (const valarray<T>&);
4578 T template<class T> valarray<T> asin (const valarray<T>&);
4579 T template<class T> valarray<T> atan (const valarray<T>&);
4580 T template<class T> valarray<T> atan2
4581 (const valarray<T>&, const valarray<T>&);
4582 T template<class T> valarray<T> atan2(const valarray<T>&, const T&);
4583 T template<class T> valarray<T> atan2(const T&, const valarray<T>&);
4584 T template<class T> valarray<T> cos (const valarray<T>&);
4585 T template<class T> valarray<T> cosh (const valarray<T>&);
4586 T template<class T> valarray<T> exp (const valarray<T>&);
4587 T template<class T> valarray<T> log (const valarray<T>&);
4588 T template<class T> valarray<T> log10(const valarray<T>&);
4589 T template<class T> valarray<T> pow(const valarray<T>&, const valarray<T>&);
4590 T template<class T> valarray<T> pow(const valarray<T>&, const T&);
4591 T template<class T> valarray<T> pow(const T&, const valarray<T>&);
4592 T template<class T> valarray<T> sin (const valarray<T>&);
4593 T template<class T> valarray<T> sinh (const valarray<T>&);
4594 T template<class T> valarray<T> sqrt (const valarray<T>&);
4595 T template<class T> valarray<T> tan (const valarray<T>&);
4596 T template<class T> valarray<T> tanh (const valarray<T>&);
4600 26.3.2 Template class valarray [lib.template.valarray]
4602 T template<class T> class valarray {
4604 T typedef T value_type;
4606 // _lib.valarray.cons_ construct/destroy:
4608 T explicit valarray(size_t);
4609 T valarray(const T&, size_t);
4610 T valarray(const T*, size_t);
4611 T valarray(const valarray&);
4612 T valarray(const slice_array<T>&);
4613 T valarray(const gslice_array<T>&);
4614 T valarray(const mask_array<T>&);
4615 T valarray(const indirect_array<T>&);
4618 // _lib.valarray.assign_ assignment:
4619 T valarray<T>& operator=(const valarray<T>&);
4620 T valarray<T>& operator=(const T&);
4621 T valarray<T>& operator=(const slice_array<T>&);
4622 T valarray<T>& operator=(const gslice_array<T>&);
4623 T valarray<T>& operator=(const mask_array<T>&);
4624 T valarray<T>& operator=(const indirect_array<T>&);
4625 // _lib.valarray.access_ element access:
4626 T T operator[](size_t) const;
4627 T T& operator[](size_t);
4628 // _lib.valarray.sub_ subset operations:
4629 T valarray<T> operator[](slice) const;
4630 T slice_array<T> operator[](slice);
4631 T valarray<T> operator[](const gslice&) const;
4632 T gslice_array<T> operator[](const gslice&);
4633 T valarray<T> operator[](const valarray<bool>&) const;
4634 T mask_array<T> operator[](const valarray<bool>&);
4635 T valarray<T> operator[](const valarray<size_t>&) const;
4636 T indirect_array<T> operator[](const valarray<size_t>&);
4637 // _lib.valarray.unary_ unary operators:
4638 T valarray<T> operator+() const;
4639 T valarray<T> operator-() const;
4640 T valarray<T> operator~() const;
4641 T valarray<T> operator!() const;
4642 // _lib.valarray.cassign_ computed assignment:
4643 T valarray<T>& operator*= (const T&);
4644 T valarray<T>& operator/= (const T&);
4645 T valarray<T>& operator%= (const T&);
4646 T valarray<T>& operator+= (const T&);
4647 T valarray<T>& operator-= (const T&);
4648 T valarray<T>& operator^= (const T&);
4649 T valarray<T>& operator&= (const T&);
4650 T valarray<T>& operator|= (const T&);
4651 T valarray<T>& operator<<=(const T&);
4652 T valarray<T>& operator>>=(const T&);
4653 T valarray<T>& operator*= (const valarray<T>&);
4654 T valarray<T>& operator/= (const valarray<T>&);
4655 T valarray<T>& operator%= (const valarray<T>&);
4656 T valarray<T>& operator+= (const valarray<T>&);
4657 T valarray<T>& operator-= (const valarray<T>&);
4658 T valarray<T>& operator^= (const valarray<T>&);
4659 T valarray<T>& operator|= (const valarray<T>&);
4660 T valarray<T>& operator&= (const valarray<T>&);
4661 T valarray<T>& operator<<=(const valarray<T>&);
4662 T valarray<T>& operator>>=(const valarray<T>&);
4663 // _lib.valarray.members_ member functions:
4664 T size_t size() const;
4669 T valarray<T> shift (int) const;
4670 T valarray<T> cshift(int) const;
4671 T valarray<T> apply(T func(T)) const;
4672 T valarray<T> apply(T func(const T&)) const;
4673 T void resize(size_t sz, T c = T());
4679 26.3.4 Class slice [lib.class.slice]
4684 T slice(size_t, size_t, size_t);
4686 T size_t start() const;
4687 T size_t size() const;
4688 T size_t stride() const;
4694 26.3.5 Template class slice_array [lib.template.slice.array]
4696 T template <class T> class slice_array {
4698 T typedef T value_type;
4700 T void operator= (const valarray<T>&) const;
4701 T void operator*= (const valarray<T>&) const;
4702 T void operator/= (const valarray<T>&) const;
4703 T void operator%= (const valarray<T>&) const;
4704 T void operator+= (const valarray<T>&) const;
4705 T void operator-= (const valarray<T>&) const;
4706 T void operator^= (const valarray<T>&) const;
4707 T void operator&= (const valarray<T>&) const;
4708 T void operator|= (const valarray<T>&) const;
4709 T void operator<<=(const valarray<T>&) const;
4710 T void operator>>=(const valarray<T>&) const;
4711 T void operator=(const T&);
4715 T slice_array(const slice_array&);
4716 T slice_array& operator=(const slice_array&);
4722 26.3.6 The gslice class [lib.class.gslice]
4727 T gslice(size_t s, const valarray<size_t>& l, const valarray<size_t>& d);
4729 T size_t start() const;
4730 T valarray<size_t> size() const;
4731 T valarray<size_t> stride() const;
4735 26.3.7 Template class gslice_array [lib.template.gslice.array]
4737 T template <class T> class gslice_array {
4739 T typedef T value_type;
4741 T void operator= (const valarray<T>&) const;
4742 T void operator*= (const valarray<T>&) const;
4743 T void operator/= (const valarray<T>&) const;
4744 T void operator%= (const valarray<T>&) const;
4745 T void operator+= (const valarray<T>&) const;
4746 T void operator-= (const valarray<T>&) const;
4747 T void operator^= (const valarray<T>&) const;
4748 T void operator&= (const valarray<T>&) const;
4749 T void operator|= (const valarray<T>&) const;
4750 T void operator<<=(const valarray<T>&) const;
4751 T void operator>>=(const valarray<T>&) const;
4752 T void operator=(const T&);
4756 T gslice_array(const gslice_array&);
4757 T gslice_array& operator=(const gslice_array&);
4761 26.3.8 Template class mask_array [lib.template.mask.array]
4763 T template <class T> class mask_array {
4765 T typedef T value_type;
4767 T void operator= (const valarray<T>&) const;
4768 T void operator*= (const valarray<T>&) const;
4769 T void operator/= (const valarray<T>&) const;
4770 T void operator%= (const valarray<T>&) const;
4771 T void operator+= (const valarray<T>&) const;
4772 T void operator-= (const valarray<T>&) const;
4773 T void operator^= (const valarray<T>&) const;
4774 T void operator&= (const valarray<T>&) const;
4775 T void operator|= (const valarray<T>&) const;
4776 T void operator<<=(const valarray<T>&) const;
4777 T void operator>>=(const valarray<T>&) const;
4778 T void operator=(const T&);
4782 T mask_array(const mask_array&);
4783 T mask_array& operator=(const mask_array&);
4784 // remainder implementation defined
4788 26.3.9 Template class [lib.template.indirect.array]
4791 T template <class T> class indirect_array {
4793 T typedef T value_type;
4795 T void operator= (const valarray<T>&) const;
4796 T void operator*= (const valarray<T>&) const;
4797 T void operator/= (const valarray<T>&) const;
4798 T void operator%= (const valarray<T>&) const;
4799 T void operator+= (const valarray<T>&) const;
4800 T void operator-= (const valarray<T>&) const;
4801 T void operator^= (const valarray<T>&) const;
4802 T void operator&= (const valarray<T>&) const;
4803 T void operator|= (const valarray<T>&) const;
4804 T void operator<<=(const valarray<T>&) const;
4805 T void operator>>=(const valarray<T>&) const;
4806 T void operator=(const T&);
4807 T ~indirect_array();
4810 T indirect_array(const indirect_array&);
4811 T indirect_array& operator=(const indirect_array&);
4812 // remainder implementation defined
4815 26.4 Generalized numeric operations [lib.numeric.ops]
4817 Header <numeric> synopsis
4819 T template <class InputIterator, class T>
4820 T accumulate(InputIterator first, InputIterator last, T init);
4822 T template <class InputIterator, class T, class BinaryOperation>
4823 T accumulate(InputIterator first, InputIterator last, T init,
4824 BinaryOperation binary_op);
4826 T template <class InputIterator1, class InputIterator2, class T>
4827 T inner_product(InputIterator1 first1, InputIterator1 last1,
4828 InputIterator2 first2, T init);
4830 T template <class InputIterator1, class InputIterator2, class T,
4831 class BinaryOperation1, class BinaryOperation2>
4832 T inner_product(InputIterator1 first1, InputIterator1 last1,
4833 InputIterator2 first2, T init,
4834 BinaryOperation1 binary_op1,
4835 BinaryOperation2 binary_op2);
4837 T template <class InputIterator, class OutputIterator>
4838 OutputIterator partial_sum(InputIterator first,
4840 OutputIterator result);
4842 T template <class InputIterator, class OutputIterator,
4843 class BinaryOperation>
4844 OutputIterator partial_sum(InputIterator first,
4846 OutputIterator result,
4847 BinaryOperation binary_op);
4849 T template <class InputIterator, class OutputIterator>
4850 OutputIterator adjacent_difference(InputIterator first,
4852 OutputIterator result);
4854 T template <class InputIterator, class OutputIterator,
4855 class BinaryOperation>
4856 OutputIterator adjacent_difference(InputIterator first,
4858 OutputIterator result,
4859 BinaryOperation binary_op);
4862 26.5 C Library [lib.c.math]
4864 Table 2--Header <cmath> synopsis
4867 X acos cos fmod modf tan
4868 X asin cosh frexp pow tanh
4869 X atan exp ldexp sin
4870 X atan2 fabs log sinh
4871 X ceil floor log10 sqrt
4873 Table 3--Header <cstdlib> synopsis
4875 X Types: div_t ldiv_t
4880 X long abs(long); // labs()
4881 X ldiv_t div(long, long); // ldiv()
4883 X float abs (float);
4884 X float acos (float);
4885 X float asin (float);
4886 X float atan (float);
4887 X float atan2(float, float);
4888 X float ceil (float);
4889 X float cos (float);
4890 X float cosh (float);
4891 X float exp (float);
4892 X float fabs (float);
4893 X float floor(float);
4894 X float fmod (float, float);
4895 X float frexp(float, int*);
4896 X float ldexp(float, int);
4897 X float log (float);
4898 X float log10(float);
4899 X float modf (float, float*);
4900 X float pow (float, float);
4901 X float pow (float, int);
4902 X float sin (float);
4903 X float sinh (float);
4904 X float sqrt (float);
4905 X float tan (float);
4906 X float tanh (float);
4908 X double abs(double); // fabs()
4909 X double pow(double, int);
4911 X long double abs (long double);
4912 X long double acos (long double);
4913 X long double asin (long double);
4914 X long double atan (long double);
4915 X long double atan2(long double, long double);
4916 X long double ceil (long double);
4917 X long double cos (long double);
4918 X long double cosh (long double);
4919 X long double exp (long double);
4920 X long double fabs (long double);
4921 X long double floor(long double);
4922 X long double fmod (long double, long double);
4923 X long double frexp(long double, int*);
4924 X long double ldexp(long double, int);
4925 X long double log (long double);
4926 X long double log10(long double);
4927 X long double modf (long double, long double*);
4928 X long double pow (long double, long double);
4929 X long double pow (long double, int);
4930 X long double sin (long double);
4931 X long double sinh (long double);
4932 X long double sqrt (long double);
4933 X long double tan (long double);
4934 X long double tanh (long double);
4936 Header <iosfwd> synopsis
4938 X template<class charT> class char_traits;
4939 X template<> class char_traits<char>;
4940 X template<> class char_traits<wchar_t>;
4941 X template<class T> class allocator;
4942 X template <class charT, class traits = char_traits<charT> >
4945 X template <class charT, class traits = char_traits<charT> >
4946 class basic_streambuf;
4948 X template <class charT, class traits = char_traits<charT> >
4949 class basic_istream;
4951 X template <class charT, class traits = char_traits<charT> >
4952 class basic_ostream;
4954 X template <class charT, class traits = char_traits<charT> >
4955 class basic_iostream;
4957 X template <class charT, class traits = char_traits<charT>,
4958 class Allocator = allocator<charT> >
4959 class basic_stringbuf;
4961 X template <class charT, class traits = char_traits<charT>,
4962 class Allocator = allocator<charT> >
4963 class basic_istringstream;
4965 X template <class charT, class traits = char_traits<charT>,
4966 class Allocator = allocator<charT> >
4967 class basic_ostringstream;
4969 X template <class charT, class traits = char_traits<charT>,
4970 class Allocator = allocator<charT> >
4971 class basic_stringstream;
4973 X template <class charT, class traits = char_traits<charT> >
4974 class basic_filebuf;
4976 X template <class charT, class traits = char_traits<charT> >
4977 class basic_ifstream;
4979 X template <class charT, class traits = char_traits<charT> >
4980 class basic_ofstream;
4982 X template <class charT, class traits = char_traits<charT> >
4983 class basic_fstream;
4984 X template <class charT, class traits = char_traits<charT> >
4985 class istreambuf_iterator;
4987 X template <class charT, class traits = char_traits<charT> >
4988 class ostreambuf_iterator;
4989 X typedef basic_ios<char> ios;
4990 X typedef basic_ios<wchar_t> wios;
4991 X typedef basic_streambuf<char> streambuf;
4992 X typedef basic_istream<char> istream;
4993 X typedef basic_ostream<char> ostream;
4994 X typedef basic_iostream<char> iostream;
4995 X typedef basic_stringbuf<char> stringbuf;
4996 X typedef basic_istringstream<char> istringstream;
4997 X typedef basic_ostringstream<char> ostringstream;
4998 X typedef basic_stringstream<char> stringstream;
4999 X typedef basic_filebuf<char> filebuf;
5000 X typedef basic_ifstream<char> ifstream;
5001 X typedef basic_ofstream<char> ofstream;
5002 X typedef basic_fstream<char> fstream;
5003 X typedef basic_streambuf<wchar_t> wstreambuf;
5004 X typedef basic_istream<wchar_t> wistream;
5005 X typedef basic_ostream<wchar_t> wostream;
5006 X typedef basic_iostream<wchar_t> wiostream;
5007 X typedef basic_stringbuf<wchar_t> wstringbuf;
5008 X typedef basic_istringstream<wchar_t> wistringstream;
5009 X typedef basic_ostringstream<wchar_t> wostringstream;
5010 X typedef basic_stringstream<wchar_t> wstringstream;
5012 X typedef basic_filebuf<wchar_t> wfilebuf;
5013 X typedef basic_ifstream<wchar_t> wifstream;
5014 X typedef basic_ofstream<wchar_t> wofstream;
5015 X typedef basic_fstream<wchar_t> wfstream;
5016 X template <class state> class fpos;
5017 X typedef fpos<char_traits<char>::state_type> streampos;
5018 X typedef fpos<char_traits<wchar_t>::state_type> wstreampos;
5020 27.3 Standard iostream objects [lib.iostream.objects]
5022 Header <iostream> synopsis
5024 T [must also include <istream> and <ostream>]
5025 T extern istream cin;
5026 T extern ostream cout;
5027 T extern ostream cerr;
5028 T extern ostream clog;
5030 T extern wistream wcin;
5031 T extern wostream wcout;
5032 T extern wostream wcerr;
5033 T extern wostream wclog;
5035 27.4 Iostreams base classes [lib.iostreams.base]
5037 Header <ios> synopsis
5041 T typedef OFF_T streamoff;
5042 T typedef SZ_T streamsize;
5043 T template <class stateT> class fpos;
5046 template <class charT, class traits = char_traits<charT> >
5048 // _lib.std.ios.manip_, manipulators:
5049 T ios_base& boolalpha (ios_base& str);
5050 T ios_base& noboolalpha(ios_base& str);
5051 T ios_base& showbase (ios_base& str);
5052 T ios_base& noshowbase (ios_base& str);
5053 T ios_base& showpoint (ios_base& str);
5054 T ios_base& noshowpoint(ios_base& str);
5055 T ios_base& showpos (ios_base& str);
5056 T ios_base& noshowpos (ios_base& str);
5057 T ios_base& skipws (ios_base& str);
5058 T ios_base& noskipws (ios_base& str);
5059 T ios_base& nouppercase(ios_base& str);
5060 T ios_base& uppercase (ios_base& str);
5061 M ios_base& unitbuf (ios_base& str);
5062 M ios_base& nounitbuf (ios_base& str);
5063 // _lib.adjustfield.manip_ adjustfield:
5064 T ios_base& internal (ios_base& str);
5065 T ios_base& left (ios_base& str);
5066 T ios_base& right (ios_base& str);
5067 // _lib.basefield.manip_ basefield:
5068 T ios_base& dec (ios_base& str);
5069 T ios_base& hex (ios_base& str);
5070 T ios_base& oct (ios_base& str);
5072 // _lib.floatfield.manip_ floatfield:
5073 T ios_base& fixed (ios_base& str);
5074 T ios_base& scientific (ios_base& str);
5077 27.4.2 Class ios_base [lib.ios.base]
5082 T typedef T1 fmtflags;
5083 T static const fmtflags boolalpha;
5084 T static const fmtflags dec;
5085 T static const fmtflags fixed;
5086 T static const fmtflags hex;
5087 T static const fmtflags internal;
5088 T static const fmtflags left;
5089 T static const fmtflags oct;
5090 T static const fmtflags right;
5091 T static const fmtflags scientific;
5092 T static const fmtflags showbase;
5093 T static const fmtflags showpoint;
5094 T static const fmtflags showpos;
5095 T static const fmtflags skipws;
5096 X static const fmtflags unitbuf;
5097 T static const fmtflags uppercase;
5098 T static const fmtflags adjustfield;
5099 T static const fmtflags basefield;
5100 T static const fmtflags floatfield;
5103 T static const iostate badbit;
5104 T static const iostate eofbit;
5105 T static const iostate failbit;
5106 T static const iostate goodbit;
5107 T typedef T3 openmode;
5108 T static const openmode app;
5109 T static const openmode ate;
5110 T static const openmode binary;
5111 T static const openmode in;
5112 T static const openmode out;
5113 T static const openmode trunc;
5114 T typedef T4 seekdir;
5115 T static const seekdir beg;
5116 T static const seekdir cur;
5117 T static const seekdir end;
5119 // _lib.fmtflags.state_ fmtflags state:
5120 T fmtflags flags() const;
5121 T fmtflags flags(fmtflags fmtfl);
5122 T fmtflags setf(fmtflags fmtfl);
5123 T fmtflags setf(fmtflags fmtfl, fmtflags mask);
5124 T void unsetf(fmtflags mask);
5125 T streamsize precision() const;
5126 T streamsize precision(streamsize prec);
5127 T streamsize width() const;
5128 T streamsize width(streamsize wide);
5129 // _lib.ios.base.locales_ locales:
5130 T locale imbue(const locale& loc);
5131 T locale getloc() const;
5132 // _lib.ios.base.storage_ storage:
5133 T static int xalloc();
5134 T long& iword(int index);
5135 T void*& pword(int index);
5137 T virtual ~ios_base();
5138 // _lib.ios.base.callback_ callbacks;
5139 T enum event { erase_event, imbue_event, copyfmt_event };
5140 T typedef void (*event_callback)(event, ios_base&, int index);
5141 T void register_callback(event_call_back fn, int index);
5142 T static bool sync_with_stdio(bool sync = true);
5147 27.4.2.1.1 Class ios_base::failure [lib.ios::failure]
5149 T class ios_base::failure : public exception {
5151 T explicit failure(const string& msg);
5152 T virtual ~failure();
5153 T virtual const char* what() const throw();
5157 27.4.2.1.6 Class ios_base::Init [lib.ios::Init]
5159 T class ios_base::Init {
5166 27.4.3 Template class fpos [lib.fpos]
5168 X template <class stateT> class fpos {
5170 // _lib.fpos.members_ Members
5171 T stateT state() const;
5172 T void state(stateT);
5174 T stateT st; // exposition only
5178 27.4.5 Template class basic_ios [lib.ios]
5180 template <class charT, class traits = char_traits<charT> >
5181 X class basic_ios : public ios_base {
5185 T typedef charT char_type;
5186 T typedef typename traits::int_type int_type;
5187 T typedef typename traits::pos_type pos_type;
5188 T typedef typename traits::off_type off_type;
5189 T typedef traits traits_type;
5190 T operator void*() const
5191 T bool operator!() const
5192 T iostate rdstate() const;
5193 T void clear(iostate state = goodbit);
5194 T void setstate(iostate state);
5195 T bool good() const;
5197 T bool fail() const;
5199 T iostate exceptions() const;
5200 T void exceptions(iostate except);
5201 // _lib.basic.ios.cons_ Constructor/destructor:
5202 T explicit basic_ios(basic_streambuf<charT,traits>* sb);
5203 T virtual ~basic_ios();
5204 // _lib.basic.ios.members_ Members:
5205 T basic_ostream<charT,traits>* tie() const;
5206 T basic_ostream<charT,traits>* tie(basic_ostream<charT,traits>* tiestr);
5207 T basic_streambuf<charT,traits>* rdbuf() const;
5208 T basic_streambuf<charT,traits>* rdbuf(basic_streambuf<charT,traits>* sb);
5209 X basic_ios& copyfmt(const basic_ios& rhs);
5210 T char_type fill() const;
5211 T char_type fill(char_type ch);
5212 // _lib.ios.base.locales_ locales:
5213 T locale imbue(const locale& loc);
5214 X char narrow(char_type c, char dfault) const;
5215 X char_type widen(char c) const;
5218 T void init(basic_streambuf<charT,traits>* sb);
5220 T basic_ios(const basic_ios& ); // not defined
5221 T basic_ios& operator=(const basic_ios&); // not defined
5225 27.5 Stream buffers [lib.stream.buffers]
5227 Header <streambuf> synopsis
5229 X template <class charT, class traits = char_traits<charT> >
5230 class basic_streambuf;
5231 T typedef basic_streambuf<char> streambuf;
5232 T typedef basic_streambuf<wchar_t> wstreambuf;
5234 27.5.2 Template class [lib.streambuf]
5235 basic_streambuf<charT,traits>
5237 template <class charT, class traits = char_traits<charT> >
5238 X class basic_streambuf {
5242 T typedef charT char_type;
5243 T typedef typename traits::int_type int_type;
5244 T typedef typename traits::pos_type pos_type;
5245 T typedef typename traits::off_type off_type;
5246 T typedef traits traits_type;
5247 T virtual ~basic_streambuf();
5248 // _lib.streambuf.locales_ locales:
5249 T locale pubimbue(const locale &loc);
5250 T locale getloc() const;
5251 // _lib.streambuf.buffer_ buffer and positioning:
5252 T basic_streambuf<char_type,traits>*
5253 pubsetbuf(char_type* s, streamsize n);
5254 T pos_type pubseekoff(off_type off, ios_base::seekdir way,
5255 ios_base::openmode which =
5256 ios_base::in | ios_base::out);
5257 T pos_type pubseekpos(pos_type sp,
5258 ios_base::openmode which =
5259 ios_base::in | ios_base::out);
5262 // Get and put areas:
5263 // _lib.streambuf.pub.get_ Get area:
5264 T streamsize in_avail();
5265 T int_type snextc();
5266 T int_type sbumpc();
5268 T streamsize sgetn(char_type* s, streamsize n);
5269 // _lib.streambuf.pub.pback_ Putback:
5270 X int_type sputbackc(char_type c);
5271 X int_type sungetc();
5272 // _lib.streambuf.pub.put_ Put area:
5273 T int_type sputc(char_type c);
5274 X streamsize sputn(const char_type* s, streamsize n);
5276 T basic_streambuf();
5277 // _lib.streambuf.get.area_ Get area:
5278 T char_type* eback() const;
5279 T char_type* gptr() const;
5280 T char_type* egptr() const;
5281 T void gbump(int n);
5282 T void setg(char_type* gbeg, char_type* gnext, char_type* gend);
5283 // _lib.streambuf.put.area_ Put area:
5284 T char_type* pbase() const;
5285 T char_type* pptr() const;
5286 T char_type* epptr() const;
5287 T void pbump(int n);
5288 T void setp(char_type* pbeg, char_type* pend);
5289 // _lib.streambuf.virtuals_ virtual functions:
5290 // _lib.streambuf.virt.locales_ Locales:
5291 T virtual void imbue(const locale &loc);
5292 // _lib.streambuf.virt.buffer_ Buffer management and positioning:
5293 T virtual basic_streambuf<char_type,traits>*
5294 setbuf(char_type* s, streamsize n);
5295 T virtual pos_type seekoff(off_type off, ios_base::seekdir way,
5296 ios_base::openmode which = ios_base::in | ios_base::out);
5297 T virtual pos_type seekpos(pos_type sp,
5298 ios_base::openmode which = ios_base::in | ios_base::out);
5299 T virtual int sync();
5300 // _lib.streambuf.virt.get_ Get area:
5301 T virtual int showmanyc();
5302 T virtual streamsize xsgetn(char_type* s, streamsize n);
5303 T virtual int_type underflow();
5304 T virtual int_type uflow();
5305 // _lib.streambuf.virt.pback_ Putback:
5306 T virtual int_type pbackfail(int_type c = traits::eof());
5307 // _lib.streambuf.virt.put_ Put area:
5308 X virtual streamsize xsputn(const char_type* s, streamsize n);
5309 T virtual int_type overflow (int_type c = traits::eof());
5312 27.6 Formatting and manipulators [lib.iostream.format]
5314 Header <istream> synopsis
5316 T template <class charT, class traits = char_traits<charT> >
5317 class basic_istream;
5318 T typedef basic_istream<char> istream;
5319 T typedef basic_istream<wchar_t> wistream;
5321 T template <class charT, class traits = char_traits<charT> >
5322 class basic_iostream;
5323 T typedef basic_iostream<char> iostream;
5324 T typedef basic_iostream<wchar_t> wiostream;
5326 X template <class charT, class traits>
5327 basic_istream<charT,traits>& ws(basic_istream<charT,traits>& is);
5329 Header <ostream> synopsis
5331 X template <class charT, class traits = char_traits<charT> >
5332 class basic_ostream;
5333 T typedef basic_ostream<char> ostream;
5334 T typedef basic_ostream<wchar_t> wostream;
5336 T template <class charT, class traits>
5337 basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
5338 T template <class charT, class traits>
5339 basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os);
5340 T template <class charT, class traits>
5341 basic_ostream<charT,traits>& flush(basic_ostream<charT,traits>& os);
5343 Header <iomanip> synopsis
5345 // Types T1, T2, ... are unspecified implementation types
5346 T T1 resetiosflags(ios_base::fmtflags mask);
5347 T T2 setiosflags (ios_base::fmtflags mask);
5348 T T3 setbase(int base);
5349 T template<charT> T4 setfill(charT c);
5350 T T5 setprecision(int n);
5354 27.6.1.1 Template class basic_istream [lib.istream]
5356 template <class charT, class traits = char_traits<charT> >
5357 T class basic_istream : virtual public basic_ios<charT,traits> {
5359 // Types (inherited from basic_ios (_lib.ios_)):
5360 T typedef charT char_type;
5361 T typedef typename traits::int_type int_type;
5362 T typedef typename traits::pos_type pos_type;
5363 T typedef typename traits::off_type off_type;
5364 T typedef traits traits_type;
5365 // _lib.istream.cons_ Constructor/destructor:
5366 T explicit basic_istream(basic_streambuf<charT,traits>* sb);
5367 T virtual ~basic_istream();
5368 // _lib.istream::sentry_ Prefix/suffix:
5371 // _lib.istream.formatted_ Formatted input:
5372 T basic_istream<charT,traits>& operator>>
5373 (basic_istream<charT,traits>& (*pf)(basic_istream<charT,traits>&))
5374 T basic_istream<charT,traits>& operator>>
5375 (basic_ios<charT,traits>& (*pf)(basic_ios<charT,traits>&))
5376 T basic_istream<charT,traits>& operator>>
5377 (ios_base& (*pf)(ios_base&))
5378 S basic_istream<charT,traits>& operator>>(bool& n);
5379 S basic_istream<charT,traits>& operator>>(short& n);
5380 S basic_istream<charT,traits>& operator>>(unsigned short& n);
5381 S basic_istream<charT,traits>& operator>>(int& n);
5382 S basic_istream<charT,traits>& operator>>(unsigned int& n);
5383 S basic_istream<charT,traits>& operator>>(long& n);
5384 S basic_istream<charT,traits>& operator>>(unsigned long& n);
5385 S basic_istream<charT,traits>& operator>>(float& f);
5386 S basic_istream<charT,traits>& operator>>(double& f);
5387 S basic_istream<charT,traits>& operator>>(long double& f);
5388 S basic_istream<charT,traits>& operator>>(void*& p);
5389 S basic_istream<charT,traits>& operator>>
5390 (basic_streambuf<char_type,traits>* sb);
5391 // _lib.istream.unformatted_ Unformatted input:
5392 T streamsize gcount() const;
5394 S basic_istream<charT,traits>& get(char_type& c);
5395 S basic_istream<charT,traits>& get(char_type* s, streamsize n);
5396 S basic_istream<charT,traits>& get(char_type* s, streamsize n,
5398 S basic_istream<charT,traits>& get(basic_streambuf<char_type,traits>& sb);
5399 S basic_istream<charT,traits>& get(basic_streambuf<char_type,traits>& sb,
5401 S basic_istream<charT,traits>& getline(char_type* s, streamsize n);
5402 S basic_istream<charT,traits>& getline(char_type* s, streamsize n,
5404 S basic_istream<charT,traits>& ignore
5405 (streamsize n = 1, int_type delim = traits::eof());
5407 S basic_istream<charT,traits>& read (char_type* s, streamsize n);
5408 S streamsize readsome(char_type* s, streamsize n);
5409 S basic_istream<charT,traits>& putback(char_type c);
5410 S basic_istream<charT,traits>& unget();
5414 S basic_istream<charT,traits>& seekg(pos_type);
5415 S basic_istream<charT,traits>& seekg(off_type, ios_base::seekdir);
5418 // _lib.istream::extractors_ character extraction templates:
5419 S template<class charT, class traits>
5420 basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&,
5422 S template<class traits>
5423 basic_istream<char,traits>& operator>>(basic_istream<char,traits>&,
5425 S template<class traits>
5426 basic_istream<char,traits>& operator>>(basic_istream<char,traits>&,
5429 S template<class charT, class traits>
5430 basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&,
5432 S template<class traits>
5433 basic_istream<char,traits>& operator>>(basic_istream<char,traits>&,
5435 S template<class traits>
5436 basic_istream<char,traits>& operator>>(basic_istream<char,traits>&,
5439 27.6.1.1.2 Class basic_istream::sentry [lib.istream::sentry]
5442 template <class charT,class traits = char_traits<charT> >
5443 S class basic_istream<charT,traits>::sentry {
5444 typedef traits traits_type;
5445 S bool ok_; // exposition only
5447 S explicit sentry(basic_istream<charT,traits>& is, bool noskipws = false);
5449 S operator bool() const { return ok_; }
5451 T sentry(const sentry&); // not defined
5452 T sentry& operator=(const sentry&); // not defined
5456 27.6.1.5 Template class basic_iostream [lib.iostreamclass]
5458 template <class charT, class traits = char_traits<charT> >
5459 T class basic_iostream :
5460 public basic_istream<charT,traits>,
5461 public basic_ostream<charT,traits> {
5463 // constructor/destructor
5464 T explicit basic_iostream(basic_streambuf<charT,traits>* sb);
5465 T virtual ~basic_iostream();
5469 27.6.2.1 Template class basic_ostream [lib.ostream]
5471 template <class charT, class traits = char_traits<charT> >
5472 X class basic_ostream : virtual public basic_ios<charT,traits> {
5474 // Types (inherited from basic_ios (_lib.ios_)):
5475 T typedef charT char_type;
5476 T typedef typename traits::int_type int_type;
5477 T typedef typename traits::pos_type pos_type;
5478 T typedef typename traits::off_type off_type;
5479 T typedef traits traits_type;
5480 // _lib.ostream.cons_ Constructor/destructor:
5481 T explicit basic_ostream(basic_streambuf<char_type,traits>* sb);
5482 T virtual ~basic_ostream();
5483 // _lib.ostream::sentry_ Prefix/suffix:
5485 // _lib.ostream.formatted_ Formatted output:
5486 T basic_ostream<charT,traits>& operator<<
5487 (basic_ostream<charT,traits>& (*pf)(basic_ostream<charT,traits>&));
5488 T basic_ostream<charT,traits>& operator<<
5489 (basic_ios<charT,traits>& (*pf)(basic_ios<charT,traits>&));
5490 T basic_ostream<charT,traits>& operator<<
5491 (ios_base& (*pf)(ios_base&));
5492 T basic_ostream<charT,traits>& operator<<(bool n);
5493 T basic_ostream<charT,traits>& operator<<(short n);
5494 T basic_ostream<charT,traits>& operator<<(unsigned short n);
5495 T basic_ostream<charT,traits>& operator<<(int n);
5496 T basic_ostream<charT,traits>& operator<<(unsigned int n);
5497 T basic_ostream<charT,traits>& operator<<(long n);
5498 T basic_ostream<charT,traits>& operator<<(unsigned long n);
5499 S basic_ostream<charT,traits>& operator<<(float f);
5500 S basic_ostream<charT,traits>& operator<<(double f);
5501 S basic_ostream<charT,traits>& operator<<(long double f);
5502 T basic_ostream<charT,traits>& operator<<(const void* p);
5503 X basic_ostream<charT,traits>& operator<<
5504 (basic_streambuf<char_type,traits>* sb);
5505 // _lib.ostream.unformatted_ Unformatted output:
5506 T basic_ostream<charT,traits>& put(char_type c);
5507 T basic_ostream<charT,traits>& write(const char_type* s, streamsize n);
5508 X basic_ostream<charT,traits>& flush();
5510 // _lib.ostream.seeks_ seeks:
5512 S basic_ostream<charT,traits>& seekp(pos_type);
5513 S basic_ostream<charT,traits>& seekp(off_type, ios_base::seekdir);
5515 // _lib.ostream.inserters.character_ character inserters
5516 X template<class charT, class traits>
5517 basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&,
5519 X template<class charT, class traits>
5520 basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&,
5523 X template<class traits>
5524 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&,
5526 // signed and unsigned
5527 X template<class traits>
5528 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&,
5530 X template<class traits>
5531 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&,
5533 X template<class charT, class traits>
5534 basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&,
5536 X template<class charT, class traits>
5537 basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&,
5539 // partial specializationss
5540 X template<class traits>
5541 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&,
5543 // signed and unsigned
5544 X template<class traits>
5545 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&,
5546 const signed char*);
5547 X template<class traits>
5548 basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&,
5549 const unsigned char*);
5552 27.6.2.3 Class basic_ostream::sentry [lib.ostream::sentry]
5554 template <class charT,class traits = char_traits<charT> >
5555 X class basic_ostream<charT,traits>::sentry {
5556 bool ok_; // exposition only
5558 X explicit sentry(basic_ostream<charT,traits>& os);
5560 X operator bool() const { return ok_; }
5562 X sentry(const sentry&); // not defined
5563 X sentry& operator=(const sentry&); // not defined
5566 27.7 String-based streams [lib.string.streams]
5568 Header <sstream> synopsis
5570 X template <class charT, class traits = char_traits<charT>,
5571 class Allocator = allocator<charT> >
5572 class basic_stringbuf;
5574 T typedef basic_stringbuf<char> stringbuf;
5575 T typedef basic_stringbuf<wchar_t> wstringbuf;
5577 template <class charT, class traits = char_traits<charT>,
5578 class Allocator = allocator<charT> >
5579 X class basic_istringstream;
5581 T typedef basic_istringstream<char> istringstream;
5582 T typedef basic_istringstream<wchar_t> wistringstream;
5584 template <class charT, class traits = char_traits<charT>,
5585 class Allocator = allocator<charT> >
5586 X class basic_ostringstream;
5587 T typedef basic_ostringstream<char> ostringstream;
5588 T typedef basic_ostringstream<wchar_t> wostringstream;
5590 template <class charT, class traits = char_traits<charT>,
5591 class Allocator = allocator<charT> >
5592 X class basic_stringstream;
5593 T typedef basic_stringstream<char> stringstream;
5594 T typedef basic_stringstream<wchar_t> wstringstream;
5596 27.7.1 Template class basic_stringbuf [lib.stringbuf]
5598 template <class charT, class traits = char_traits<charT>,
5599 class Allocator = allocator<charT> >
5600 X class basic_stringbuf : public basic_streambuf<charT,traits> {
5602 T typedef charT char_type;
5603 T typedef typename traits::int_type int_type;
5604 T typedef typename traits::pos_type pos_type;
5605 T typedef typename traits::off_type off_type;
5606 T typedef traits traits_type;
5607 // _lib.stringbuf.cons_ Constructors:
5608 S explicit basic_stringbuf(ios_base::openmode which
5609 = ios_base::in | ios_base::out);
5610 S explicit basic_stringbuf
5611 (const basic_string<charT,traits,Allocator>& str,
5612 ios_base::openmode which = ios_base::in | ios_base::out);
5613 // _lib.stringbuf.members_ Get and set:
5614 S basic_string<charT,traits,Allocator> str() const;
5615 S void str(const basic_string<charT,traits,Allocator>& s);
5618 // _lib.stringbuf.virtuals_ Overridden virtual functions:
5619 S virtual int_type underflow();
5620 S virtual int_type pbackfail(int_type c = traits::eof());
5621 S virtual int_type overflow (int_type c = traits::eof());
5622 S virtual basic_streambuf<charT,traits>* setbuf(charT*, streamsize);
5624 S virtual pos_type seekoff(off_type off, ios_base::seekdir way,
5625 ios_base::openmode which
5626 = ios_base::in | ios_base::out);
5627 S virtual pos_type seekpos(pos_type sp,
5628 ios_base::openmode which
5629 = ios_base::in | ios_base::out);
5633 27.7.2 Template class basic_istringstream [lib.istringstream]
5635 template <class charT, class traits = char_traits<charT>,
5636 class Allocator = allocator<charT> >
5637 X class basic_istringstream : public basic_istream<charT,traits> {
5639 T typedef charT char_type;
5640 T typedef typename traits::int_type int_type;
5641 T typedef typename traits::pos_type pos_type;
5642 T typedef typename traits::off_type off_type;
5643 T typedef traits traits_type;
5644 // _lib.istringstream.cons_ Constructors:
5645 S explicit basic_istringstream(ios_base::openmode which = ios_base::in);
5646 S explicit basic_istringstream(
5647 const basic_string<charT,traits,Allocator>& str,
5648 ios_base::openmode which = ios_base::in);
5650 // _lib.istringstream.members_ Members:
5651 S basic_stringbuf<charT,traits,Allocator>* rdbuf() const;
5652 S basic_string<charT,traits,Allocator> str() const;
5653 S void str(const basic_string<charT,traits,Allocator>& s);
5655 // basic_stringbuf<charT,traits,Allocator> sb; exposition only
5658 27.7.3 Class basic_ostringstream [lib.ostringstream]
5660 template <class charT, class traits = char_traits<charT>,
5661 class Allocator = allocator<charT> >
5662 X class basic_ostringstream : public basic_ostream<charT,traits> {
5666 T typedef charT char_type;
5667 T typedef typename traits::int_type int_type;
5668 T typedef typename traits::pos_type pos_type;
5669 T typedef typename traits::off_type off_type;
5670 // _lib.ostringstream.cons_ Constructors/destructor:
5671 S explicit basic_ostringstream(ios_base::openmode which = ios_base::out);
5672 S explicit basic_ostringstream(
5673 const basic_string<charT,traits,Allocator>& str,
5674 ios_base::openmode which = ios_base::out);
5675 // _lib.ostringstream.members_ Members:
5676 S basic_stringbuf<charT,traits,Allocator>* rdbuf() const;
5677 S basic_string<charT,traits,Allocator> str() const;
5678 S void str(const basic_string<charT,traits,Allocator>& s);
5682 27.7.4 Template class basic_stringstream [lib.stringstream]
5684 template <class charT, class traits = char_traits<charT>,
5685 class Allocator = allocator<charT> >
5686 X class basic_stringstream
5687 : public basic_iostream<charT,traits> {
5690 T typedef charT char_type;
5691 T typedef typename traits::int_type int_type;
5692 T typedef typename traits::pos_type pos_type;
5693 T typedef typename traits::off_type off_type;
5694 // constructors/destructors
5695 S explicit basic_stringstream(
5696 ios_base::openmode which = ios_base::out|ios_base::in);
5697 S explicit basic_stringstream(
5698 const basic_string<charT,traits,Allocator>& str,
5699 ios_base::openmode which = ios_base::out|ios_base::in);
5701 S basic_stringbuf<charT,traits,Allocator>* rdbuf() const;
5702 S basic_string<charT,traits,Allocator> str() const;
5703 S void str(const basic_string<charT,traits,Allocator>& str);
5708 27.8.1 File streams [lib.fstreams]
5711 Header <fstream> synopsis
5713 X template <class charT, class traits = char_traits<charT> >
5714 class basic_filebuf;
5715 T typedef basic_filebuf<char> filebuf;
5716 T typedef basic_filebuf<wchar_t> wfilebuf;
5718 X template <class charT, class traits = char_traits<charT> >
5719 class basic_ifstream;
5720 T typedef basic_ifstream<char> ifstream;
5721 T typedef basic_ifstream<wchar_t> wifstream;
5723 X template <class charT, class traits = char_traits<charT> >
5724 class basic_ofstream;
5725 T typedef basic_ofstream<char> ofstream;
5726 T typedef basic_ofstream<wchar_t> wofstream;
5728 X template <class charT, class traits = char_traits<charT> >
5729 class basic_fstream;
5730 T typedef basic_fstream<char> fstream;
5731 T typedef basic_fstream<wchar_t> wfstream;
5733 27.8.1.1 Template class basic_filebuf [lib.filebuf]
5735 template <class charT, class traits = char_traits<charT> >
5736 X class basic_filebuf : public basic_streambuf<charT,traits> {
5738 T typedef charT char_type;
5739 T typedef typename traits::int_type int_type;
5740 T typedef typename traits::pos_type pos_type;
5741 T typedef typename traits::off_type off_type;
5742 T typedef traits traits_type;
5743 // _lib.filebuf.cons_ Constructors/destructor:
5745 X virtual ~basic_filebuf();
5746 // _lib.filebuf.members_ Members:
5747 T bool is_open() const;
5748 X basic_filebuf<charT,traits>* open
5749 (const char* s, ios_base::openmode mode);
5750 X basic_filebuf<charT,traits>* close();
5752 // _lib.filebuf.virtuals_ Overridden virtual functions:
5753 X virtual streamsize showmanyc();
5754 X virtual int_type underflow();
5755 X virtual int_type uflow();
5756 X virtual int_type pbackfail(int_type c = traits::eof());
5757 X virtual int_type overflow (int_type c = traits::eof());
5758 S virtual basic_streambuf<charT,traits>*
5759 setbuf(char_type* s, streamsize n);
5760 S virtual pos_type seekoff(off_type off, ios_base::seekdir way,
5761 ios_base::openmode which
5762 = ios_base::in | ios_base::out);
5763 S virtual pos_type seekpos(pos_type sp, ios_base::openmode which
5764 = ios_base::in | ios_base::out);
5765 S virtual int sync();
5766 S virtual void imbue(const locale& loc);
5771 27.8.1.5 Template class basic_ifstream [lib.ifstream]
5773 template <class charT, class traits = char_traits<charT> >
5774 X class basic_ifstream : public basic_istream<charT,traits> {
5776 T typedef charT char_type;
5777 T typedef typename traits::int_type int_type;
5778 T typedef typename traits::pos_type pos_type;
5779 T typedef typename traits::off_type off_type;
5780 T typedef traits traits_type;
5781 // _lib.ifstream.cons_ Constructors:
5783 S explicit basic_ifstream(const char* s,
5784 ios_base::openmode mode = ios_base::in);
5785 // _lib.ifstream.members_ Members:
5786 S basic_filebuf<charT,traits>* rdbuf() const;
5788 S void open(const char* s, ios_base::openmode mode = ios_base::in);
5793 27.8.1.8 Template class basic_ofstream [lib.ofstream]
5795 template <class charT, class traits = char_traits<charT> >
5796 X class basic_ofstream : public basic_ostream<charT,traits> {
5798 T typedef charT char_type;
5799 T typedef typename traits::int_type int_type;
5800 T typedef typename traits::pos_type pos_type;
5801 T typedef typename traits::off_type off_type;
5802 T typedef traits traits_type;
5803 // _lib.ofstream.cons_ Constructors:
5805 X explicit basic_ofstream(const char* s,
5806 ios_base::openmode mode
5808 // _lib.ofstream.members_ Members:
5809 X basic_filebuf<charT,traits>* rdbuf() const;
5811 X void open(const char* s, ios_base::openmode mode = ios_base::out);
5816 27.8.1.11 Template class basic_fstream [lib.fstream]
5818 template <class charT, class traits=char_traits<charT> >
5819 X class basic_fstream
5820 : public basic_iostream<charT,traits> {
5822 T typedef charT char_type;
5823 T typedef typename traits::int_type int_type;
5824 T typedef typename traits::pos_type pos_type;
5825 T typedef typename traits::off_type off_type;
5826 T typedef traits traits_type;
5827 // constructors/destructor
5829 S explicit basic_fstream(
5831 ios_base::openmode mode = ios_base::in|ios_base::out);
5834 S basic_filebuf<charT,traits>* rdbuf() const;
5838 ios_base::openmode mode = ios_base::in|ios_base::out);
5844 27.8.2 C Library files [lib.c.files]
5847 Table 13--Header <cstdio> synopsis
5849 X BUFSIZ L_tmpnam SEEK_SET TMP_MAX
5850 X EOF NULL <cstdio> stderr _IOFBF
5851 X FILENAME_MAX SEEK_CUR stdin _IOLBF
5852 X FOPEN_MAX SEEK_END stdout _IONBF
5854 X Types: FILE fpos_t size_t <cstdio>
5856 X clearerr fgets fscanf gets rewind
5857 X fclose fopen fseek perror scanf tmpnam
5858 X feof fprintf fsetpos printf setbuf ungetc
5859 X ferror fputc ftell putc setvbuf vprintf
5860 X fflush fputs fwrite puts sprintf vfprintf
5861 X fgetc fread getc remove sscanf vsprintf
5862 X fgetpos freopen getchar putchar rename tmpfile
5867 1.5 Standard C library headers [depr.c.headers]
5869 X <assert.h> <iso646.h> <setjmp.h> <stdio.h> <wchar.h>
5870 <ctype.h> <limits.h> <signal.h> <stdlib.h> <wctype.h>
5871 <errno.h> <locale.h> <stdarg.h> <string.h>
5872 <float.h> <math.h> <stddef.h> <time.h>
5874 1.6 Old iostreams members [depr.ios.members]
5876 [Note: these should be #ifdef'd to permit diagnostics if used.]
5880 T typedef T1 io_state;
5881 T typedef T2 open_mode;
5882 T typedef T3 seek_dir;
5883 T typedef OFF_T streamoff;
5884 T typedef OFF_T streampos;
5885 // remainder unchanged
5889 [Note: these should be #ifdef'd to permit diagnostics if used.]
5891 template<class charT, class traits = char_traits<charT> >
5892 class basic_streambuf {
5895 // remainder unchanged
5899 8 An implementation may provide the following member functions that
5900 overload signatures specified in clause _lib.iostreams_:
5902 [Note: the following overloads should be #ifdef'd to permit
5903 diagnostics to be emitted, by default, if used.]
5905 template<class charT, class Traits> class basic_ios {
5907 M void clear(io_state state);
5908 M void setstate(io_state state);
5909 // remainder unchanged
5913 M void exceptions(io_state);
5914 // remainder unchanged
5916 template<class charT, class traits = char_traits<charT> >
5917 class basic_streambuf {
5919 M pos_type pubseekoff(off_type off, ios_base::seek_dir way,
5920 ios_base::open_mode which = ios_base::in | ios_base::out);
5921 M pos_type pubseekpos(pos_type sp,
5922 ios_base::open_mode which = ios_base::in | ios_base::out);
5923 // remainder unchanged
5925 template <class charT, class traits = char_traits<charT> >
5926 class basic_filebuf : public basic_streambuf<charT,traits> {
5928 M basic_filebuf<charT,traits>* open
5929 (const char* s, ios_base::open_mode mode);
5930 // remainder unchanged
5932 template <class charT, class traits = char_traits<charT> >
5933 class basic_ifstream : public basic_istream<charT,traits> {
5935 M void open(const char* s, ios_base::open_mode mode = in);
5936 // remainder unchanged
5938 template <class charT, class traits = char_traits<charT> >
5939 class basic_ofstream : public basic_ostream<charT,traits> {
5941 M void open(const char* s, ios_base::open_mode mode = out | trunc);
5942 // remainder unchanged
5948 1.7.1 Class strstreambuf [depr.strstreambuf]
5950 [Note: It should be possible to adopt these components with only
5951 minor changes from the 2.8 version of the library.]
5953 M class strstreambuf : public basic_streambuf<char> {
5955 M explicit strstreambuf(streamsize alsize_arg = 0);
5956 M strstreambuf(void* (*palloc_arg)(size_t), void (*pfree_arg)(void*));
5957 M strstreambuf(char* gnext_arg, streamsize n, char* pbeg_arg = 0);
5958 M strstreambuf(const char* gnext_arg, streamsize n);
5959 M strstreambuf(signed char* gnext_arg, streamsize n,
5960 signed char* pbeg_arg = 0);
5961 M strstreambuf(const signed char* gnext_arg, streamsize n);
5962 M strstreambuf(unsigned char* gnext_arg, streamsize n,
5963 unsigned char* pbeg_arg = 0);
5964 M strstreambuf(const unsigned char* gnext_arg, streamsize n);
5965 M virtual ~strstreambuf();
5966 M void freeze(bool freezefl = true);
5970 M virtual int_type overflow (int_type c = EOF);
5971 M virtual int_type pbackfail(int_type c = EOF);
5972 M virtual int_type underflow();
5973 M virtual pos_type seekoff(off_type off, ios_base::seekdir way,
5974 ios_base::openmode which
5975 = ios_base::in | ios_base::out);
5976 M virtual pos_type seekpos(pos_type sp, ios_base::openmode which
5977 = ios_base::in | ios_base::out);
5978 M virtual streambuf<char>* setbuf(char* s, streamsize n);
5981 1.7.4 Class strstream [depr.strstream]
5984 : public basic_iostream<char> {
5987 M typedef char char_type;
5988 M typedef typename char_traits<char>::int_type int_type
5989 M typedef typename char_traits<char>::pos_type pos_type;
5990 M typedef typename char_traits<char>::off_type off_type;
5991 // consturctors/destructor
5993 M strstream(char* s, int n,
5994 ios_base::openmode mode = ios_base::in|ios_base::out);
5995 M virtual ~strstream();
5997 M strstreambuf* rdbuf() const;
5998 M void freeze(bool freezefl = true);
5999 M int pcount() const;