aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/docs/html/17_intro
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/docs/html/17_intro')
-rw-r--r--libstdc++-v3/docs/html/17_intro/BADNAMES182
-rw-r--r--libstdc++-v3/docs/html/17_intro/BUGS28
-rw-r--r--libstdc++-v3/docs/html/17_intro/C++STYLE386
-rw-r--r--libstdc++-v3/docs/html/17_intro/CHECKLIST6002
-rw-r--r--libstdc++-v3/docs/html/17_intro/COPYING340
-rw-r--r--libstdc++-v3/docs/html/17_intro/COPYING.DOC355
-rw-r--r--libstdc++-v3/docs/html/17_intro/DESIGN859
-rw-r--r--libstdc++-v3/docs/html/17_intro/HEADER_POLICY164
-rw-r--r--libstdc++-v3/docs/html/17_intro/PROBLEMS8
-rw-r--r--libstdc++-v3/docs/html/17_intro/RELEASE-NOTES83
-rw-r--r--libstdc++-v3/docs/html/17_intro/TODO164
-rw-r--r--libstdc++-v3/docs/html/17_intro/concept_check.diff382
-rw-r--r--libstdc++-v3/docs/html/17_intro/confdeps.dot14
-rw-r--r--libstdc++-v3/docs/html/17_intro/confdeps.pngbin3486 -> 0 bytes
-rw-r--r--libstdc++-v3/docs/html/17_intro/configury.html289
-rw-r--r--libstdc++-v3/docs/html/17_intro/contribute.html132
-rw-r--r--libstdc++-v3/docs/html/17_intro/headers_cc.txt83
-rw-r--r--libstdc++-v3/docs/html/17_intro/howto.html385
-rw-r--r--libstdc++-v3/docs/html/17_intro/license.html119
-rw-r--r--libstdc++-v3/docs/html/17_intro/porting-howto.html744
-rw-r--r--libstdc++-v3/docs/html/17_intro/porting.html992
-rw-r--r--libstdc++-v3/docs/html/17_intro/porting.texi570
22 files changed, 0 insertions, 12281 deletions
diff --git a/libstdc++-v3/docs/html/17_intro/BADNAMES b/libstdc++-v3/docs/html/17_intro/BADNAMES
deleted file mode 100644
index a904704ee39..00000000000
--- a/libstdc++-v3/docs/html/17_intro/BADNAMES
+++ /dev/null
@@ -1,182 +0,0 @@
-
-This is the list of names "reserved to the implementation" that
-have been claimed by certain compilers and system headers of interest,
-and should not be used in the library. It will grow, of course.
-We generally are interested in names that are not all-caps, except
-for those like "_T"
-
-For Solarix:
-_B
-_C
-_L
-_N
-_P
-_S
-_U
-_X
-_E1
-..
-_E24
-
-Irix adds:
-_A
-_G
-
-MS adds:
-_T
-
-BSD adds:
-__used
-__unused
-__inline
-_Complex
-__istype
-__maskrune
-__tolower
-__toupper
-__wchar_t
-__wint_t
-_res
-_res_ext
-__tg_*
-
-For GCC:
-
- [Note that this list is out of date. It applies to the old
- name-mangling; in G++ 3.0 and higher a different name-mangling is
- used. In addition, many of the bugs relating to G++ interpreting
- these names as operators have been fixed.]
-
- The full set of __* identifiers (combined from gcc/cp/lex.c and
- gcc/cplus-dem.c) that are either old or new, but are definitely
- recognized by the demangler, is:
-
-__aa
-__aad
-__ad
-__addr
-__adv
-__aer
-__als
-__alshift
-__amd
-__ami
-__aml
-__amu
-__aor
-__apl
-__array
-__ars
-__arshift
-__as
-__bit_and
-__bit_ior
-__bit_not
-__bit_xor
-__call
-__cl
-__cm
-__cn
-__co
-__component
-__compound
-__cond
-__convert
-__delete
-__dl
-__dv
-__eq
-__er
-__ge
-__gt
-__indirect
-__le
-__ls
-__lt
-__max
-__md
-__method_call
-__mi
-__min
-__minus
-__ml
-__mm
-__mn
-__mult
-__mx
-__ne
-__negate
-__new
-__nop
-__nt
-__nw
-__oo
-__op
-__or
-__pl
-__plus
-__postdecrement
-__postincrement
-__pp
-__pt
-__rf
-__rm
-__rs
-__sz
-__trunc_div
-__trunc_mod
-__truth_andif
-__truth_not
-__truth_orif
-__vc
-__vd
-__vn
-
-SGI badnames:
-__builtin_alloca
-__builtin_fsqrt
-__builtin_sqrt
-__builtin_fabs
-__builtin_dabs
-__builtin_cast_f2i
-__builtin_cast_i2f
-__builtin_cast_d2ll
-__builtin_cast_ll2d
-__builtin_copy_dhi2i
-__builtin_copy_i2dhi
-__builtin_copy_dlo2i
-__builtin_copy_i2dlo
-__add_and_fetch
-__sub_and_fetch
-__or_and_fetch
-__xor_and_fetch
-__and_and_fetch
-__nand_and_fetch
-__mpy_and_fetch
-__min_and_fetch
-__max_and_fetch
-__fetch_and_add
-__fetch_and_sub
-__fetch_and_or
-__fetch_and_xor
-__fetch_and_and
-__fetch_and_nand
-__fetch_and_mpy
-__fetch_and_min
-__fetch_and_max
-__lock_test_and_set
-__lock_release
-__lock_acquire
-__compare_and_swap
-__synchronize
-__high_multiply
-__unix
-__sgi
-__linux__
-__i386__
-__i486__
-__cplusplus
-__embedded_cplusplus
-// long double conversion members mangled as __opr
-// http://gcc.gnu.org/ml/libstdc++/1999-q4/msg00060.html
-_opr
diff --git a/libstdc++-v3/docs/html/17_intro/BUGS b/libstdc++-v3/docs/html/17_intro/BUGS
deleted file mode 100644
index e71304d0666..00000000000
--- a/libstdc++-v3/docs/html/17_intro/BUGS
+++ /dev/null
@@ -1,28 +0,0 @@
-2003-04-26
-
-- _GLIBCPP_HAS_BUILTIN_SINF: We should still hold out for a cleaner solution the is currenly the case in bits/std_cmath.h.
-
-- there may be one set of remaining string bugs, dependent on final
-clarification of the string::find technicalities when finding in an
-empty string or using an empty string for an argument. At the very
-least, v-3 has interpreted the standard in a way that is in opposition
-to other libraries on other platforms.
-
-- trigraphs and keywords a la the iso646 header are not correctly
-implemented. It looks like the compiler recognizes them as keywords
-but then doesn't translate into the correct bit ops. It is a mystery.
-
-- wide strings have not been tested, and may therefore be unusable.
-
-- Chapter 27 io functionality is not finished. As such, there are
-known bugs in: filebuf::putbackfail
-
-- Many facet implementations are stubs. (22)
-
-- Almost no optimizations for small-footprint/low-overhead. (22,27)
-
-- There has been some work to wrap the C headers in namespace std::, but
- it may not be complete yet, and C macros are not shadowed. Please consult
- the mailing list archives for more information.
-
-
diff --git a/libstdc++-v3/docs/html/17_intro/C++STYLE b/libstdc++-v3/docs/html/17_intro/C++STYLE
deleted file mode 100644
index 87f53d0ea05..00000000000
--- a/libstdc++-v3/docs/html/17_intro/C++STYLE
+++ /dev/null
@@ -1,386 +0,0 @@
-
-C++ Standard Library Style Guidelines DRAFT 2001-01-15
--------------------------------------
-
-This library is written to appropriate C++ coding standards. As such,
-it is intended to precede the recommendations of the GNU Coding
-Standard, which can be referenced here:
-
-http://www.gnu.org/prep/standards_toc.html
-
-ChangeLog entries for member functions should use the
-classname::member function name syntax as follows:
-
-1999-04-15 Dennis Ritchie <dr@att.com>
-
- * src/basic_file.cc (__basic_file::open): Fix thinko in
- _G_HAVE_IO_FILE_OPEN bits.
-
-Notable areas of divergence from what may be previous local practice
-(particularly for GNU C) include:
-
-01. Pointers and references
- char* p = "flop";
- char& c = *p;
- -NOT-
- char *p = "flop"; // wrong
- char &c = *p; // wrong
-
- Reason: In C++, definitions are mixed with executable code. Here,
- p is being initialized, not *p. This is near-universal
- practice among C++ programmers; it is normal for C hackers
- to switch spontaneously as they gain experience.
-
-02. Operator names and parentheses
- operator==(type)
- -NOT-
- operator == (type) // wrong
-
- Reason: The == is part of the function name. Separating
- it makes the declaration look like an expression.
-
-03. Function names and parentheses
- void mangle()
- -NOT-
- void mangle () // wrong
-
- Reason: no space before parentheses (except after a control-flow
- keyword) is near-universal practice for C++. It identifies the
- parentheses as the function-call operator or declarator, as
- opposed to an expression or other overloaded use of parentheses.
-
-04. Template function indentation
- template<typename T>
- void
- template_function(args)
- { }
- -NOT-
- template<class T>
- void template_function(args) {};
-
- Reason: In class definitions, without indentation whitespace is
- needed both above and below the declaration to distinguish
- it visually from other members. (Also, re: "typename"
- rather than "class".) T often could be int, which is
- not a class. ("class", here, is an anachronism.)
-
-05. Template class indentation
- template<typename _CharT, typename _Traits>
- class basic_ios : public ios_base
- {
- public:
- // Types:
- };
- -NOT-
- template<class _CharT, class _Traits>
- class basic_ios : public ios_base
- {
- public:
- // Types:
- };
- -NOT-
- template<class _CharT, class _Traits>
- class basic_ios : public ios_base
- {
- public:
- // Types:
- };
-
-06. Enumerators
- enum
- {
- space = _ISspace,
- print = _ISprint,
- cntrl = _IScntrl
- };
- -NOT-
- enum { space = _ISspace, print = _ISprint, cntrl = _IScntrl };
-
-07. Member initialization lists
- All one line, separate from class name.
-
- gribble::gribble()
- : _M_private_data(0), _M_more_stuff(0), _M_helper(0);
- { }
- -NOT-
- gribble::gribble() : _M_private_data(0), _M_more_stuff(0), _M_helper(0);
- { }
-
-08. Try/Catch blocks
- try
- {
- //
- }
- catch (...)
- {
- //
- }
- -NOT-
- try {
- //
- } catch(...) {
- //
- }
-
-09. Member functions declarations and definitions
- Keywords such as extern, static, export, explicit, inline, etc
- go on the line above the function name. Thus
-
- virtual int
- foo()
- -NOT-
- virtual int foo()
-
- Reason: GNU coding conventions dictate return types for functions
- are on a separate line than the function name and parameter list
- for definitions. For C++, where we have member functions that can
- be either inline definitions or declarations, keeping to this
- standard allows all member function names for a given class to be
- aligned to the same margin, increasing readibility.
-
-
-10. Invocation of member functions with "this->"
- For non-uglified names, use this->name to call the function.
-
- this->sync()
- -NOT-
- sync()
-
- Reason: Koenig lookup.
-
-11. Namespaces
- namespace std
- {
- blah blah blah;
- } // namespace std
-
- -NOT-
-
- namespace std {
- blah blah blah;
- } // namespace std
-
-12. Spacing under protected and private in class declarations:
- space above, none below
- ie
-
- public:
- int foo;
-
- -NOT-
- public:
-
- int foo;
-
-13. Spacing WRT return statements.
- no extra spacing before returns, no parenthesis
- ie
-
- }
- return __ret;
-
- -NOT-
- }
-
- return __ret;
-
- -NOT-
-
- }
- return (__ret);
-
-
-14. Location of global variables.
- All global variables of class type, whether in the "user visable"
- space (e.g., cin) or the implementation namespace, must be defined
- as a character array with the appropriate alignment and then later
- re-initialized to the correct value.
-
- This is due to startup issues on certain platforms, such as AIX.
- For more explanation and examples, see src/globals.cc. All such
- variables should be contained in that file, for simplicity.
-
-15. Exception abstractions
- Use the exception abstractions found in functexcept.h, which allow
- C++ programmers to use this library with -fno-exceptions. (Even if
- that is rarely advisable, it's a necessary evil for backwards
- compatibility.)
-
-16. Exception error messages
- All start with the name of the function where the exception is
- thrown, and then (optional) descriptive text is added. Example:
-
- __throw_logic_error(__N("basic_string::_S_construct NULL not valid"));
-
- Reason: The verbose terminate handler prints out exception::what(),
- as well as the typeinfo for the thrown exception. As this is the
- default terminate handler, by putting location info into the
- exception string, a very useful error message is printed out for
- uncaught exceptions. So useful, in fact, that non-programmers can
- give useful error messages, and programmers can intelligently
- speculate what went wrong without even using a debugger.
-
-The library currently has a mixture of GNU-C and modern C++ coding
-styles. The GNU C usages will be combed out gradually.
-
-Name patterns:
-
-For nonstandard names appearing in Standard headers, we are constrained
-to use names that begin with underscores. This is called "uglification".
-The convention is:
-
- Local and argument names: __[a-z].*
-
- Examples: __count __ix __s1
-
- Type names and template formal-argument names: _[A-Z][^_].*
-
- Examples: _Helper _CharT _N
-
- Member data and function names: _M_.*
-
- Examples: _M_num_elements _M_initialize ()
-
- Static data members, constants, and enumerations: _S_.*
-
- Examples: _S_max_elements _S_default_value
-
-Don't use names in the same scope that differ only in the prefix,
-e.g. _S_top and _M_top. See BADNAMES for a list of forbidden names.
-(The most tempting of these seem to be and "_T" and "__sz".)
-
-Names must never have "__" internally; it would confuse name
-unmanglers on some targets. Also, never use "__[0-9]", same reason.
-
---------------------------
-
-[BY EXAMPLE]
-
-#ifndef _HEADER_
-#define _HEADER_ 1
-
-namespace std
-{
- class gribble
- {
- public:
- // ctor, op=, dtor
- gribble() throw();
-
- gribble(const gribble&);
-
- explicit
- gribble(int __howmany);
-
- gribble&
- operator=(const gribble&);
-
- virtual
- ~gribble() throw ();
-
- // argument
- inline void
- public_member(const char* __arg) const;
-
- // in-class function definitions should be restricted to one-liners.
- int
- one_line() { return 0 }
-
- int
- two_lines(const char* arg)
- { return strchr(arg, 'a'); }
-
- inline int
- three_lines(); // inline, but defined below.
-
- // note indentation
- template<typename _Formal_argument>
- void
- public_template() const throw();
-
- template<typename _Iterator>
- void
- other_template();
-
- private:
- class _Helper;
-
- int _M_private_data;
- int _M_more_stuff;
- _Helper* _M_helper;
- int _M_private_function();
-
- enum _Enum
- {
- _S_one,
- _S_two
- };
-
- static void
- _S_initialize_library();
- };
-
-// More-or-less-standard language features described by lack, not presence:
-# ifndef _G_NO_LONGLONG
- extern long long _G_global_with_a_good_long_name; // avoid globals!
-# endif
-
- // Avoid in-class inline definitions, define separately;
- // likewise for member class definitions:
- inline int
- gribble::public_member() const
- { int __local = 0; return __local; }
-
- class gribble::_Helper
- {
- int _M_stuff;
-
- friend class gribble;
- };
-}
-
-// Names beginning with "__": only for arguments and
-// local variables; never use "__" in a type name, or
-// within any name; never use "__[0-9]".
-
-#endif /* _HEADER_ */
-
-
-namespace std
-{
- template<typename T> // notice: "typename", not "class", no space
- long_return_value_type<with_many, args>
- function_name(char* pointer, // "char *pointer" is wrong.
- char* argument,
- const Reference& ref)
- {
- // int a_local; /* wrong; see below. */
- if (test)
- {
- nested code
- }
-
- int a_local = 0; // declare variable at first use.
-
- // char a, b, *p; /* wrong */
- char a = 'a';
- char b = a + 1;
- char* c = "abc"; // each variable goes on its own line, always.
-
- // except maybe here...
- for (unsigned i = 0, mask = 1; mask; ++i, mask <<= 1) {
- // ...
- }
- }
-
- gribble::gribble()
- : _M_private_data(0), _M_more_stuff(0), _M_helper(0);
- { }
-
- inline int
- gribble::three_lines()
- {
- // doesn't fit in one line.
- }
-} // namespace std
-
diff --git a/libstdc++-v3/docs/html/17_intro/CHECKLIST b/libstdc++-v3/docs/html/17_intro/CHECKLIST
deleted file mode 100644
index ad02b0d8731..00000000000
--- a/libstdc++-v3/docs/html/17_intro/CHECKLIST
+++ /dev/null
@@ -1,6002 +0,0 @@
-
- Completion Checklist for the Standard C++ Library
- Updated: 2003-04-25
-
- Status Code Legend:
- M - Missing
- S - Present as stub.
- X - Partially implemented, or buggy.
- T - Implemented, pending test/inspection.
- V - Verified to pass all available test suites.
- Q - Qualified by inspection for non-testable correctness.
- P - Portability verified.
- C - Certified.
-
- Lexical notes:
- Only status codes appear in column 0. Notes relating to conformance
- issues appear [in brackets].
-
- Note that this checklist does not (yet) include all emendations
- recommended by the ISO Library Working Group:
- http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-toc.html
-
- Detailed explanation of status codes:
-
- M - Missing: The name is not visible to programs that include
- the specified header, either at compile or link stage.
-
- S - Present as stub: A program can use the name, but no implementation
- is provided. Programs that use the name link correctly, but
- cannot usefully be run.
-
- X - Partially implemented, or buggy: Some implementation has been
- provided, but it is known or believed not to conform fully.
- It may have an incorrect base class, wrong namespace, wrong
- storage class, or simply not fully implement requirements.
- However, it may be sufficiently usable to help test other
- components.
-
- T - Implemented, pending test/inspection: Implementation believed
- to be complete, and informal testing suggests it is ready for
- formal verification.
-
- V - Verified, passes all test suites: Verified to satisfy all
- generically testable conformance requirements.
-
- Q - Qualified by inspection for non-testable correctness:
- Inspected, "implementation-defined" documentation accepted,
- local usability criteria satisfied, formally inspected for
- other untestable conformance. (Untestable requirements
- include exception-safety, thread-safety, worst-case
- complexity, memory cleanliness, usefulness.)
-
- P - Portability verified: Qualified on all primary target platforms.
-
- C - Certified: Formally certified to have passed all tests,
- inspections, qualifications; approved under "signing authority"
- to be used to satisfy contractual guarantees.
-
- ----------------------------------------------------------------------
- <algorithm> <iomanip> <list> <ostream> <streambuf>
- <bitset> <ios> <locale> <queue> <string>
- <complex> <iosfwd> <map> <set> <typeinfo>
-X <deque> <iostream> <memory> <sstream> <utility>
- <exception> <istream> <new> <stack> <valarray>
- <fstream> <iterator> <numeric> <stdexcept> <vector>
- <functional> <limits>
-
- [C header names must be in std:: to qualify. Related to shadow/ dir.]
- <cassert> <ciso646> <csetjmp> <cstdio> <ctime>
- <cctype> <climits> <csignal> <cstdlib> <cwchar>
-X <cerrno> <clocale> <cstdarg> <cstring> <cwctype>
- <cfloat> <cmath> <cstddef>
-
- Macro:
-X errno, declared or defined in <cerrno>.
-
- Macro fn:
-X setjmp(jmp_buf), declared or defined in <csetjmp>
-X va_end(va_list), declared or defined in <cstdarg>
-
- Types:
-X clock_t, div_t, FILE, fpos_t, lconv, ldiv_t, mbstate_t,
-X ptrdiff_t, sig_atomic_t, size_t, time_t, tm, va_list,
-X wctrans_t, wctype_t, and wint_t.
-
- 1 Which of the functions in the C++ Standard Library are not reentrant
- subroutines is implementation-defined.
-
- 18.1 Types [lib.support.types]
-X <cstddef>
-X NULL
-X offsetof
-X ptrdiff_t
-X size_t
-
- 18.2 Implementation properties [lib.support.limits]
-
- <limits>, <climits>, and <cfloat>
-
- 18.2.1 Numeric limits [lib.limits]
-
-X template<class T> class numeric_limits;
-
-T enum float_round_style;
-T enum float_denorm_style;
-
-T template<> class numeric_limits<bool>;
-
-T template<> class numeric_limits<char>;
-T template<> class numeric_limits<signed char>;
-T template<> class numeric_limits<unsigned char>;
-T template<> class numeric_limits<wchar_t>;
-
-T template<> class numeric_limits<short>;
-T template<> class numeric_limits<int>;
-T template<> class numeric_limits<long>;
-T template<> class numeric_limits<unsigned short>;
-T template<> class numeric_limits<unsigned int>;
-T template<> class numeric_limits<unsigned long>;
-
-X template<> class numeric_limits<float>;
-X template<> class numeric_limits<double>;
-X template<> class numeric_limits<long double>;
-
- 18.2.1.1 Template class numeric_limits [lib.numeric.limits]
-T template<class T> class numeric_limits {
- public:
-T static const bool is_specialized = false;
-T static T min() throw();
-T static T max() throw();
-T static const int digits = 0;
-T static const int digits10 = 0;
-T static const bool is_signed = false;
-T static const bool is_integer = false;
-T static const bool is_exact = false;
-T static const int radix = 0;
-T static T epsilon() throw();
-T static T round_error() throw();
-
-T static const int min_exponent = 0;
-T static const int min_exponent10 = 0;
-T static const int max_exponent = 0;
-T static const int max_exponent10 = 0;
-
-T static const bool has_infinity = false;
-T static const bool has_quiet_NaN = false;
-T static const bool has_signaling_NaN = false;
-T static const float_denorm_style has_denorm = denorm_absent;
-T static const bool has_denorm_loss = false;
-T static T infinity() throw();
-T static T quiet_NaN() throw();
-T static T signaling_NaN() throw();
-T static T denorm_min() throw();
-
-T static const bool is_iec559 = false;
-T static const bool is_bounded = false;
-T static const bool is_modulo = false;
-
-T static const bool traps = false;
-T static const bool tinyness_before = false;
-T static const float_round_style round_style = round_toward_zero;
- };
-
- 18.2.1.3 Type float_round_style [lib.round.style]
-
-T enum float_round_style {
-T round_indeterminate = -1,
-T round_toward_zero = 0,
-T round_to_nearest = 1,
-T round_toward_infinity = 2,
-T round_toward_neg_infinity = 3
- };
-
- 18.2.1.4 Type float_denorm_style [lib.denorm.style]
-
-T enum float_denorm_style {
-T denorm_indeterminate = -1;
-T denorm_absent = 0;
-T denorm present = 1;
- };
-
- 18.2.1.5 numeric_limits specializations [lib.numeric.special]
-
- [Note: see Note at 18.2.1. ]
-
- 18.2.2 C Library [lib.c.limits]
-
- 1 Header <climits> (Table 3):
- CHAR_BIT INT_MAX LONG_MIN SCHAR_MIN UCHAR_MAX USHRT_MAX
-X CHAR_MAX INT_MIN MB_LEN_MAX SHRT_MAX UINT_MAX
- CHAR_MIN LONG_MAX SCHAR_MAX SHRT_MIN ULONG_MAX
-
- 3 Header <cfloat> (Table 4):
-
- DBL_DIG DBL_MIN_EXP FLT_MIN_10_EXP LDBL_MAX_10_EXP
- DBL_EPSILON FLT_DIG FLT_MIN_EXP LDBL_MAX_EXP
- DBL_MANT_DIG FLT_EPSILON FLT_RADIX LDBL_MIN
-X DBL_MAX FLT_MANT_DIG FLT_ROUNDS LDBL_MIN_10_EXP
- DBL_MAX_10_EXP FLT_MAX LDBL_DIG LDBL_MIN_EXP
- DBL_MAX_EXP FLT_MAX_10_EXP LDBL_EPSILON
- DBL_MIN FLT_MAX_EXP LDBL_MANT_DIG
- DBL_MIN_10_EXP FLT_MIN LDBL_MAX
-
-
- 1 Header <cstdlib> (partial), Table 5:
-X EXIT_FAILURE EXIT_SUCCESS
- abort atexit exit
-
-S abort(void)
-S extern "C" int atexit(void (*f)(void))
-S extern "C++" int atexit(void (*f)(void))
-S exit(int status)
-
- 18.4 Dynamic memory management [lib.support.dynamic]
-
- Header <new> synopsis
-
-T class bad_alloc;
-T struct nothrow_t {};
-T extern const nothrow_t nothrow;
-T typedef void (*new_handler)();
-T new_handler set_new_handler(new_handler new_p) throw();
-
-T void* operator new(std::size_t size) throw(std::bad_alloc);
-T void* operator new(std::size_t size, const std::nothrow_t&) throw();
-T void operator delete(void* ptr) throw();
-T void operator delete(void* ptr, const std::nothrow_t&) throw();
-T void* operator new[](std::size_t size) throw(std::bad_alloc);
-T void* operator new[](std::size_t size, const std::nothrow_t&) throw();
-T void operator delete[](void* ptr) throw();
-T void operator delete[](void* ptr, const std::nothrow_t&) throw();
-T void* operator new (std::size_t size, void* ptr) throw();
-T void* operator new[](std::size_t size, void* ptr) throw();
-T void operator delete (void* ptr, void*) throw();
-T void operator delete[](void* ptr, void*) throw();
-
- 18.4.2.1 Class bad_alloc [lib.bad.alloc]
-
-T class bad_alloc : public exception {
- public:
-T bad_alloc() throw();
-T bad_alloc(const bad_alloc&) throw();
-T bad_alloc& operator=(const bad_alloc&) throw();
-T virtual ~bad_alloc() throw();
-T virtual const char* what() const throw();
-
-
-
-T new_handler set_new_handler(new_handler new_p) throw();
-
-
- Header <typeinfo> synopsis
-
-T class type_info;
-T class bad_cast;
-T class bad_typeid;
-
- 18.5.1 - Class type_info [lib.type.info]
-
-T class type_info {
- public:
-T virtual ~type_info();
-T bool operator==(const type_info& rhs) const;
-T bool operator!=(const type_info& rhs) const;
-T bool before(const type_info& rhs) const;
-T const char* name() const;
- private:
-T type_info(const type_info& rhs);
-T type_info& operator=(const type_info& rhs);
- };
-
- 18.5.2 - Class bad_cast [lib.bad.cast]
-
-T bad_cast() throw();
-T virtual const char* bad_cast::what() const throw();
-
- 18.5.3 Class bad_typeid [lib.bad.typeid]
-
-T class bad_typeid : public exception {
- public:
-T bad_typeid() throw();
-T bad_typeid(const bad_typeid&) throw();
-T bad_typeid& operator=(const bad_typeid&) throw();
-T virtual ~bad_typeid() throw();
-T virtual const char* what() const throw();
- };
-
- 18.6 Exception handling [lib.support.exception]
-
-T Header <exception> synopsis
-
-T class exception;
-T class bad_exception;
-
-T typedef void (*unexpected_handler)();
-T unexpected_handler set_unexpected(unexpected_handler f) throw();
-T void unexpected();
-T typedef void (*terminate_handler)();
-T terminate_handler set_terminate(terminate_handler f) throw();
-T void terminate();
-T bool uncaught_exception();
-
- 18.6.1 Class exception [lib.exception]
-
-T class exception {
- public:
-T exception() throw();
-T exception(const exception&) throw();
-T exception& operator=(const exception&) throw();
-T virtual ~exception() throw();
-T virtual const char* what() const throw();
- };
-
- 18.6.2.1 Class bad_exception [lib.bad.exception]
-T class bad_exception : public exception {
- public:
-T bad_exception() throw();
-T bad_exception(const bad_exception&) throw();
-T bad_exception& operator=(const bad_exception&) throw();
-T virtual ~bad_exception() throw();
-T virtual const char* what() const throw();
- };
-
- 18.7 Other runtime support [lib.support.runtime]
-
- 1 Headers <cstdarg> (variable arguments), <csetjmp> (nonlocal jumps),
- <ctime> (system clock clock(), time()), <csignal> (signal handling),
- and <cstdlib> (runtime environment getenv(), system()).
-
- Table 6--Header <cstdarg> synopsis
- Macros: va_arg va_end va_start
-X Type: va_list
-
- Table 7--Header <csetjmp> synopsis
-
- Macro: setjmp |
-X Type: jmp_buf
- Function: longjmp
-
- Table 8--Header <ctime> synopsis
-
- Macros: CLOCKS_PER_SEC
-X Types: clock_t
- Functions: clock
-
- Table 9--Header <csignal> synopsis
-
-X Macros: SIGABRT SIGILL SIGSEGV SIG_DFL
- SIG_IGN SIGFPE SIGINT SIGTERM SIG_ERR
- Type: sig_atomic_t
- Functions: raise signal
-
- Table 10--Header <cstdlib> synopsis
-
-X Functions: getenv system
-
- 19.1 Exception classes [lib.std.exceptions]
-
- Header <stdexcept> synopsis
-
-T class logic_error;
-T class domain_error;
-T class invalid_argument;
-T class length_error;
-T class out_of_range;
-T class runtime_error;
-T class range_error;
-T class overflow_error;
-T class underflow_error;
-
- 19.1.1 Class logic_error [lib.logic.error]
-T class logic_error : public exception {
- public:
-T explicit logic_error(const string& what_arg);
- };
-
- 19.1.2 Class domain_error [lib.domain.error]
-
-T class domain_error : public logic_error {
- public:
-T explicit domain_error(const string& what_arg);
- };
-
- 19.1.3 Class invalid_argument [lib.invalid.argument]
-
-T class invalid_argument : public logic_error {
- public:
-T explicit invalid_argument(const string& what_arg);
- };
-
- 19.1.4 Class length_error [lib.length.error]
-
-T class length_error : public logic_error {
- public:
-T explicit length_error(const string& what_arg);
- };
-
- 19.1.5 Class out_of_range [lib.out.of.range]
-
-T class out_of_range : public logic_error {
- public:
-T explicit out_of_range(const string& what_arg);
- };
-
-
- 19.1.6 Class runtime_error [lib.runtime.error]
-
-T class runtime_error : public exception {
- public:
-T explicit runtime_error(const string& what_arg);
- };
-
-
- 19.1.7 Class range_error [lib.range.error]
-
-T class range_error : public runtime_error {
- public:
-T explicit range_error(const string& what_arg);
- };
-
- 19.1.8 Class overflow_error [lib.overflow.error]
-
-T class overflow_error : public runtime_error {
- public:
-T explicit overflow_error(const string& what_arg);
- };
-
-
- 19.1.9 Class underflow_error [lib.underflow.error]
-
-T class underflow_error : public runtime_error {
- public:
-T explicit underflow_error(const string& what_arg);
- };
-
-
- 19.2 Assertions [lib.assertions]
-
- Table 2--Header <cassert> synopsis
-
-X Macro: assert
-
- 19.3 Error numbers [lib.errno]
-
- Table 3--Header <cerrno> synopsis
-
-X |Macros: EDOM ERANGE errno |
-
-
- 20.2 Utility components [lib.utility]
-
- Header <utility> synopsis
-
- // _lib.operators_, operators:
-T namespace rel_ops {
-T template<class T> bool operator!=(const T&, const T&);
-T template<class T> bool operator> (const T&, const T&);
-T template<class T> bool operator<=(const T&, const T&);
-T template<class T> bool operator>=(const T&, const T&);
- }
- // _lib.pairs_, pairs:
-T template <class T1, class T2> struct pair;
-T template <class T1, class T2>
- bool operator==(const pair<T1,T2>&, const pair<T1,T2>&);
-T template <class T1, class T2>
- bool operator< (const pair<T1,T2>&, const pair<T1,T2>&);
-T template <class T1, class T2>
- bool operator!=(const pair<T1,T2>&, const pair<T1,T2>&);
-T template <class T1, class T2>
- bool operator> (const pair<T1,T2>&, const pair<T1,T2>&);
-T template <class T1, class T2>
- bool operator>=(const pair<T1,T2>&, const pair<T1,T2>&);
-T template <class T1, class T2>
- bool operator<=(const pair<T1,T2>&, const pair<T1,T2>&);
-T template <class T1, class T2> pair<T1,T2> make_pair(const T1&, const T2&);
-
-
- 20.2.2 Pairs [lib.pairs]
-
-T template <class T1, class T2>
- struct pair {
-T typedef T1 first_type;
-T typedef T2 second_type;
-
-T T1 first;
-T T2 second;
-T pair();
-T pair(const T1& x, const T2& y);
-T template<class U, class V> pair(const pair<U, V> &p);
- };
-
- 20.3 Function objects [lib.function.objects]
-
- Header <functional> synopsis
-
- // _lib.base_, base:
-V template <class Arg, class Result> struct unary_function;
-V template <class Arg1, class Arg2, class Result> struct binary_function;
-
- // _lib.arithmetic.operations_, arithmetic operations:
-V template <class T> struct plus;
-V template <class T> struct minus;
-V template <class T> struct multiplies;
-V template <class T> struct divides;
-V template <class T> struct modulus;
-V template <class T> struct negate;
- // _lib.comparisons_, comparisons:
-V template <class T> struct equal_to;
-V template <class T> struct not_equal_to;
-V template <class T> struct greater;
-V template <class T> struct less;
-V template <class T> struct greater_equal;
-V template <class T> struct less_equal;
- // _lib.logical.operations_, logical operations:
-V template <class T> struct logical_and;
-V template <class T> struct logical_or;
-V template <class T> struct logical_not;
- // _lib.negators_, negators:
- template <class Predicate> struct unary_negate;
-V template <class Predicate>
- unary_negate<Predicate> not1(const Predicate&);
-V template <class Predicate> struct binary_negate;
-V template <class Predicate>
- binary_negate<Predicate> not2(const Predicate&);
- // _lib.binders_, binders:
-V template <class Operation> class binder1st;
-V template <class Operation, class T>
- binder1st<Operation> bind1st(const Operation&, const T&);
-V template <class Operation> class binder2nd;
-V template <class Operation, class T>
- binder2nd<Operation> bind2nd(const Operation&, const T&);
- // _lib.function.pointer.adaptors_, adaptors:
-V template <class Arg, class Result> class pointer_to_unary_function;
-V template <class Arg, class Result>
- pointer_to_unary_function<Arg,Result> ptr_fun(Result (*)(Arg));
-V template <class Arg1, class Arg2, class Result>
- class pointer_to_binary_function;
-V template <class Arg1, class Arg2, class Result>
- pointer_to_binary_function<Arg1,Arg2,Result>
- ptr_fun(Result (*)(Arg1,Arg2));
-
- // _lib.member.pointer.adaptors_, adaptors:
-V template<class S, class T> class mem_fun_t;
-V template<class S, class T, class A> class mem_fun1_t;
-V template<class S, class T>
- mem_fun_t<S,T> mem_fun(S (T::*f)());
-V template<class S, class T, class A>
- mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A));
-V template<class S, class T> class mem_fun_ref_t;
-V template<class S, class T, class A> class mem_fun1_ref_t;
-V template<class S, class T>
- mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)());
-V template<class S, class T, class A>
- mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A));
-
-V template <class S, class T> class const_mem_fun_t;
-V template <class S, class T, class A> class const_mem_fun1_t;
-V template <class S, class T>
- const_mem_fun_t<S,T> mem_fun(S (T::*f)() const);
-V template <class S, class T, class A>
- const_mem_fun1_t<S,T,A> mem_fun(S (T::*f)(A) const);
-V template <class S, class T> class const_mem_fun_ref_t;
-V template <class S, class T, class A> class const_mem_fun1_ref_t;
-V template <class S, class T>
- const_mem_fun_ref_t<S,T> mem_fun_ref(S (T::*f)() const);
-V template <class S, class T, class A>
- const_mem_fun1_ref_t<S,T,A> mem_fun_ref(S (T::*f)(A) const);
- }
-
- 20.3.1 Base [lib.base]
-
-V template <class Arg, class Result>
- struct unary_function {
-V typedef Arg argument_type;
-V typedef Result result_type;
- };
-V template <class Arg1, class Arg2, class Result>
- struct binary_function {
-V typedef Arg1 first_argument_type;
-V typedef Arg2 second_argument_type;
-V typedef Result result_type;
- };
-
- 20.3.2 Arithmetic operations [lib.arithmetic.operations]
-
-T template <class T> struct plus : binary_function<T,T,T> {
-V T operator()(const T& x, const T& y) const;
- };
-
-T template <class T> struct minus : binary_function<T,T,T> {
-V T operator()(const T& x, const T& y) const;
- };
-
-T template <class T> struct multiplies : binary_function<T,T,T> {
-V T operator()(const T& x, const T& y) const;
- };
-
-T template <class T> struct divides : binary_function<T,T,T> {
-V T operator()(const T& x, const T& y) const;
- };
-
-T template <class T> struct modulus : binary_function<T,T,T> {
-V T operator()(const T& x, const T& y) const;
- };
-
-T template <class T> struct negate : unary_function<T,T> {
-V T operator()(const T& x) const;
- };
-
- 20.3.3 Comparisons [lib.comparisons]
-
-T template <class T> struct equal_to : binary_function<T,T,bool> {
-V bool operator()(const T& x, const T& y) const;
- };
-
-T template <class T> struct not_equal_to : binary_function<T,T,bool> {
-V bool operator()(const T& x, const T& y) const;
- };
-
-T template <class T> struct greater : binary_function<T,T,bool> {
-V bool operator()(const T& x, const T& y) const;
- };
-
-T template <class T> struct less : binary_function<T,T,bool> {
-V bool operator()(const T& x, const T& y) const;
- };
-
-T template <class T> struct greater_equal : binary_function<T,T,bool> {
-V bool operator()(const T& x, const T& y) const;
- };
-
-T template <class T> struct less_equal : binary_function<T,T,bool> {
-V bool operator()(const T& x, const T& y) const;
- };
-
- 20.3.4 Logical operations [lib.logical.operations]
-
-T template <class T> struct logical_and : binary_function<T,T,bool> {
-V bool operator()(const T& x, const T& y) const;
- };
-
-T template <class T> struct logical_or : binary_function<T,T,bool> {
-V bool operator()(const T& x, const T& y) const;
- };
-
-T template <class T> struct logical_not : unary_function<T,bool> {
-V bool operator()(const T& x) const;
- };
-
- 20.3.5 Negators [lib.negators]
-
-T template <class Predicate>
- class unary_negate
- : public unary_function<typename Predicate::argument_type,bool> {
- public:
-T explicit unary_negate(const Predicate& pred);
-V bool operator()(const typename Predicate::argument_type& x) const;
- };
-
-T template <class Predicate>
- class binary_negate
- : public binary_function<typename Predicate::first_argument_type,
- typename Predicate::second_argument_type, bool> {
- public:
-T explicit binary_negate(const Predicate& pred);
-V bool operator()(const typename Predicate::first_argument_type& x,
- const typename Predicate::second_argument_type& y) const;
- };
-
-
- 20.3.6 Binders [lib.binders]
-
- 20.3.6.1 Template class binder1st [lib.binder.1st]
-T template <class Operation>
- class binder1st
- : public unary_function<typename Operation::second_argument_type,
- typename Operation::result_type> {
- protected:
-T Operation op;
-T typename Operation::first_argument_type value;
- public:
-V binder1st(const Operation& x,
- const typename Operation::first_argument_type& y);
-V typename Operation::result_type
- operator()(const typename Operation::second_argument_type& x) const;
- };
-
- 20.3.6.2 bind1st [lib.bind.1st]
-
-V template <class Operation, class T>
- binder1st<Operation> bind1st(const Operation& op, const T& x);
-
- 20.3.6.3 Template class binder2nd [lib.binder.2nd]
-T template <class Operation>
- class binder2nd
- : public unary_function<typename Operation::first_argument_type,
- typename Operation::result_type> {
- protected:
-T Operation op;
-T typename Operation::second_argument_type value;
- public:
-V binder2nd(const Operation& x,
- const typename Operation::second_argument_type& y);
-V typename Operation::result_type
- operator()(const typename Operation::first_argument_type& x) const;
- };
-
- 20.3.6.4 bind2nd [lib.bind.2nd]
-
-T template <class Operation, class T>
- binder2nd<Operation> bind2nd(const Operation& op, const T& x);
-
-
- 20.3.7 Adaptors for pointers to [lib.function.pointer.adaptors]
- functions
-
- 1 To allow pointers to (unary and binary) functions to work with func-
- tion adaptors the library provides:
-
-T template <class Arg, class Result>
- class pointer_to_unary_function : public unary_function<Arg, Result> {
- public:
-T explicit pointer_to_unary_function(Result (*f)(Arg));
-V Result operator()(Arg x) const;
- };
-
-T template <class Arg, class Result>
- pointer_to_unary_function<Arg, Result> ptr_fun(Result (*f)(Arg));
-
-T template <class Arg1, class Arg2, class Result>
- class pointer_to_binary_function :
- public binary_function<Arg1,Arg2,Result> {
- public:
-T explicit pointer_to_binary_function(Result (*f)(Arg1, Arg2));
-V Result operator()(Arg1 x, Arg2 y) const;
- };
-
-
- 20.3.8 Adaptors for pointers to [lib.member.pointer.adaptors]
- members
-
-T template <class S, class T> class mem_fun_t
- : public unary_function<T*, S> {
- public:
-T explicit mem_fun_t(S (T::*p)());
-V S operator()(T* p) const;
- };
-
-T template <class S, class T, class A> class mem_fun1_t
- : public binary_function<T*, A, S> {
- public:
-T explicit mem_fun1_t(S (T::*p)(A));
-V S operator()(T* p, A x) const;
- };
-
-V template<class S, class T> mem_fun_t<S,T>
- mem_fun(S (T::*f)());
-V template<class S, class T, class A> mem_fun1_t<S,T,A>
- mem_fun(S (T::*f)(A));
-
-T template <class S, class T> class mem_fun_ref_t
- : public unary_function<T, S> {
- public:
-T explicit mem_fun_ref_t(S (T::*p)());
-V S operator()(T& p) const;
- };
-
-T template <class S, class T, class A> class mem_fun1_ref_t
- : public binary_function<T, A, S> {
- public:
-T explicit mem_fun1_ref_t(S (T::*p)(A));
-V S operator()(T& p, A x) const;
- };
-
-T template<class S, class T> mem_fun_ref_t<S,T>
- mem_fun_ref(S (T::*f)());
-
-T template<class S, class T, class A> mem_fun1_ref_t<S,T,A>
- mem_fun_ref(S (T::*f)(A));
-
-T template <class S, class T> class const_mem_fun_t
- : public unary_function<T*, S> {
- public:
-T explicit const_mem_fun_t(S (T::*p)() const);
-V S operator()(const T* p) const;
- };
-
-T template <class S, class T, class A> class const_mem_fun1_t
- : public binary_function<T*, A, S> {
- public:
-T explicit const mem_fun1_t(S (T::*p)(A) const);
-V S operator()(const T* p, A x) const;
- };
-
-V template<class S, class T> const_mem_fun_t<S,T>
- mem_fun(S (T::*f)() const);
-V template<class S, class T, class A> const_mem_fun1_t<S,T,A>
- mem_fun(S (T::*f)(A) const);
-
-T template <class S, class T> class const_mem_fun_ref_t
- : public unary_function<T, S> {
- public:
-T explicit const_mem_fun_ref_t(S (T::*p)() const);
-V S operator()(const T& p) const;
- };
-
-T template <class S, class T, class A> class const_mem_fun1_ref_t
- : public binary_function<T, A, S> {
- public:
-T explicit const_mem_fun1_ref_t(S (T::*p)(A) const);
-V S operator()(const T& p, A x) const;
- };
-
-T template<class S, class T> const_mem_fun_ref_t<S,T>
- mem_fun_ref(S (T::*f)() const);
-
-T template<class S, class T, class A> const_mem_fun1_ref_t<S,T,A>
- mem_fun_ref(S (T::*f)(A) const);
-
- 20.4 Memory [lib.memory]
-
- Header <memory> synopsis
-
- // _lib.default.allocator_, the default allocator:
-T template <class T> class allocator;
-T template <> class allocator<void>;
-T template <class T, class U>
- bool operator==(const allocator<T>&, const allocator<U>&) throw();
-T template <class T, class U>
- bool operator!=(const allocator<T>&, const allocator<U>&) throw();
- // _lib.storage.iterator_, raw storage iterator:
-T template <class OutputIterator, class T> class raw_storage_iterator;
- // _lib.temporary.buffer_, temporary buffers:
-T template <class T>
- pair<T*,ptrdiff_t> get_temporary_buffer(ptrdiff_t n);
-T template <class T>
- void return_temporary_buffer(T* p);
- // _lib.specialized.algorithms_, specialized algorithms:
-T template <class InputIterator, class ForwardIterator>
- ForwardIterator
- uninitialized_copy(InputIterator first, InputIterator last,
- ForwardIterator result);
-T template <class ForwardIterator, class T>
- void uninitialized_fill(ForwardIterator first, ForwardIterator last,
- const T& x);
-T template <class ForwardIterator, class Size, class T>
- void uninitialized_fill_n(ForwardIterator first, Size n, const T& x);
- // _lib.auto.ptr_, pointers:
-X template<class X> class auto_ptr;
- }
-
- 20.4.1 The default allocator [lib.default.allocator]
-
-T template <class T> class allocator;
- // specialize for void:
-T template <> class allocator<void> {
- public:
-T typedef void* pointer;
-T typedef const void* const_pointer;
- // reference-to-void members are impossible.
-T typedef void value_type;
-T template <class U> struct rebind { typedef allocator<U> other; };
- };
-
-T template <class T> class allocator {
- public:
-T typedef size_t size_type;
-T typedef ptrdiff_t difference_type;
-T typedef T* pointer;
-T typedef const T* const_pointer;
-T typedef T& reference;
-T typedef const T& const_reference;
-T typedef T value_type;
-T template <class U> struct rebind { typedef allocator<U> other; };
-T allocator() throw();
-T allocator(const allocator&) throw();
-T template <class U> allocator(const allocator<U>&) throw();
-T ~allocator() throw();
-T pointer address(reference x) const;
-T const_pointer address(const_reference x) const;
-T pointer allocate(
- size_type, allocator<void>::const_pointer hint = 0);
-T void deallocate(pointer p, size_type n);
-T size_type max_size() const throw();
-T void construct(pointer p, const T& val);
-T void destroy(pointer p);
- };
-
- 20.4.1.2 allocator globals [lib.allocator.globals]
-
-T template <class T1, class T2>
- bool operator==(const allocator<T1>&, const allocator<T2>&) throw();
-T template <class T1, class T2>
- bool operator!=(const allocator<T1>&, const allocator<T2>&) throw();
-
- 20.4.2 Raw storage iterator [lib.storage.iterator]
-
-T template <class OutputIterator, class T>
- class raw_storage_iterator
- : public iterator<output_iterator_tag,void,void,void,void> {
- public:
-T explicit raw_storage_iterator(OutputIterator x);
-T raw_storage_iterator<OutputIterator,T>& operator*();
-T raw_storage_iterator<OutputIterator,T>& operator=(const T& element);
-T raw_storage_iterator<OutputIterator,T>& operator++();
-T raw_storage_iterator<OutputIterator,T> operator++(int);
- };
-
- 20.4.3 Temporary buffers [lib.temporary.buffer]
-
-T template <class T>
- pair<T*, ptrdiff_t> get_temporary_buffer(ptrdiff_t n);
-
-T template <class T> void return_temporary_buffer(T* p);
-
- 20.4.4 Specialized algorithms [lib.specialized.algorithms]
-
- 20.4.4.1 uninitialized_copy [lib.uninitialized.copy]
-
-V template <class InputIterator, class ForwardIterator>
- ForwardIterator
- uninitialized_copy(InputIterator first, InputIterator last,
- ForwardIterator result);
-
- 20.4.4.2 uninitialized_fill [lib.uninitialized.fill]
-
-V template <class ForwardIterator, class T>
- void uninitialized_fill(ForwardIterator first, ForwardIterator last,
- const T& x);
-
- 20.4.4.3 uninitialized_fill_n [lib.uninitialized.fill.n]
-
-V template <class ForwardIterator, class Size, class T>
- void uninitialized_fill_n(ForwardIterator first, Size n, const T& x);
-
- 20.4.5 Template class auto_ptr [lib.auto.ptr]
-
-X template<class X> class auto_ptr {
- template <class Y> struct auto_ptr_ref {};
- public:
-T typedef X element_type;
- // _lib.auto.ptr.cons_ construct/copy/destroy:
-T explicit auto_ptr(X* p =0) throw();
-T auto_ptr(auto_ptr&) throw();
-T template<class Y> auto_ptr(auto_ptr<Y>&) throw();
-T auto_ptr& operator=(auto_ptr&) throw();
-T template<class Y> auto_ptr& operator=(auto_ptr<Y>&) throw();
-T ~auto_ptr() throw();
- // _lib.auto.ptr.members_ members:
-T X& operator*() const throw();
-T X* operator->() const throw();
-T X* get() const throw();
-T X* release() throw();
-T void reset(X* p =0) throw();
-
- // _lib.auto.ptr.conv_ conversions:
-X auto_ptr(auto_ptr_ref<X>) throw();
-X template<class Y> operator auto_ptr_ref<Y>() throw();
-X template<class Y> operator auto_ptr<Y>() throw();
- };
-
- 20.4.6 C Library [lib.c.malloc]
-
- Table 7--Header <cstdlib> synopsis
-
-X Functions: calloc malloc
- free realloc
-
-
- Table 8--Header <cstring> synopsis
-
-X Macro: NULL
-X Type: size_t
-X Functions: memchr memcmp
-X memcpy memmove memset
-
- Table 9--Header <ctime> synopsis
-
-X Macros: NULL
-X Types: size_t clock_t time_t
-X Struct: tm
- Functions:
-X asctime clock difftime localtime strftime
-X ctime gmtime mktime time
-
- 21.1.1 Character traits requirements [lib.char.traits.require]
-
- 2 The struct template
-T template<class charT> struct char_traits;
- shall be provided in the header <string> as a basis for explicit spe-
- cializations.
-
-
- 21.1.3.1 struct [lib.char.traits.specializations.char]
- char_traits<char>
-
-T template<>
- struct char_traits<char> {
-T typedef char char_type;
-T typedef int int_type;
-T typedef streamoff off_type;
-T typedef streampos pos_type;
-T typedef mbstate_t state_type;
-
-T static void assign(char_type& c1, const char_type& c2);
-T static bool eq(const char_type& c1, const char_type& c2);
-T static bool lt(const char_type& c1, const char_type& c2);
-
-T static int compare(const char_type* s1, const char_type* s2, size_t n);
-T static size_t length(const char_type* s);
-T static const char_type* find(const char_type* s, size_t n,
- const char_type& a);
-T static char_type* move(char_type* s1, const char_type* s2, size_t n);
-T static char_type* copy(char_type* s1, const char_type* s2, size_t n);
-T static char_type* assign(char_type* s, size_t n, char_type a);
-
-T static int_type not_eof(const int_type& c);
-T static char_type to_char_type(const int_type& c);
-T static int_type to_int_type(const char_type& c);
-T static bool eq_int_type(const int_type& c1, const int_type& c2);
-T static int_type eof();
- };
-
- 21.1.3.2 struct [lib.char.traits.specializations.wchar.t]
- char_traits<wchar_t>
-
-V template<>
- struct char_traits<wchar_t> {
-V typedef wchar_t char_type;
-V typedef wint_t int_type;
-V typedef streamoff off_type;
-V typedef wstreampos pos_type;
-V typedef mbstate_t state_type;
-
-V static void assign(char_type& c1, const char_type& c2);
-V static bool eq(const char_type& c1, const char_type& c2);
-V static bool lt(const char_type& c1, const char_type& c2);
-
-V static int compare(const char_type* s1, const char_type* s2, size_t n);
-V static size_t length(const char_type* s);
-V static const char_type* find(const char_type* s, size_t n,
- const char_type& a);
-V static char_type* move(char_type* s1, const char_type* s2, size_t n);
-V static char_type* copy(char_type* s1, const char_type* s2, size_t n);
-V static char_type* assign(char_type* s, size_t n, char_type a);
-
-V static int_type not_eof(const int_type& c);
-V static char_type to_char_type(const int_type& c);
-V static int_type to_int_type(const char_type& c);
-V static bool eq_int_type(const int_type& c1, const int_type& c2);
-V static int_type eof();
- };
-
- 21.2 String classes [lib.string.classes]
-
- // _lib.char.traits_, character traits:
-V template<class charT>
- struct char_traits;
-V template <> struct char_traits<char>;
-V template <> struct char_traits<wchar_t>;
-
- // _lib.basic.string_, basic_string:
-V template<class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
- class basic_string;
-V template<class charT, class traits, class Allocator>
- basic_string<charT,traits,Allocator>
- operator+(const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- basic_string<charT,traits,Allocator>
- operator+(const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- basic_string<charT,traits,Allocator>
- operator+(charT lhs, const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- basic_string<charT,traits,Allocator>
- operator+(const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-V template<class charT, class traits, class Allocator>
- basic_string<charT,traits,Allocator>
- operator+(const basic_string<charT,traits,Allocator>& lhs, charT rhs);
-
-V template<class charT, class traits, class Allocator>
- bool operator==(const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- bool operator==(const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- bool operator==(const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-V template<class charT, class traits, class Allocator>
- bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- bool operator!=(const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- bool operator!=(const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-V template<class charT, class traits, class Allocator>
- bool operator< (const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- bool operator< (const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-V template<class charT, class traits, class Allocator>
- bool operator< (const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- bool operator> (const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- bool operator> (const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-V template<class charT, class traits, class Allocator>
- bool operator> (const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- bool operator<=(const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- bool operator<=(const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-V template<class charT, class traits, class Allocator>
- bool operator<=(const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- bool operator>=(const basic_string<charT,traits,Allocator>& lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- bool operator>=(const basic_string<charT,traits,Allocator>& lhs,
- const charT* rhs);
-V template<class charT, class traits, class Allocator>
- bool operator>=(const charT* lhs,
- const basic_string<charT,traits,Allocator>& rhs);
-
- // _lib.string.special_:
-V template<class charT, class traits, class Allocator>
- void swap(basic_string<charT,traits,Allocator>& lhs,
- basic_string<charT,traits,Allocator>& rhs);
-V template<class charT, class traits, class Allocator>
- basic_istream<charT,traits>&
- operator>>(basic_istream<charT,traits>& is,
- basic_string<charT,traits,Allocator>& str);
-T template<class charT, class traits, class Allocator>
- basic_ostream<charT, traits>&
- operator<<(basic_ostream<charT, traits>& os,
- const basic_string<charT,traits,Allocator>& str);
-V template<class charT, class traits, class Allocator>
- basic_istream<charT,traits>&
- getline(basic_istream<charT,traits>& is,
- basic_string<charT,traits,Allocator>& str,
- charT delim);
-V template<class charT, class traits, class Allocator>
- basic_istream<charT,traits>&
- getline(basic_istream<charT,traits>& is,
- basic_string<charT,traits,Allocator>& str);
-V typedef basic_string<char> string;
-T typedef basic_string<wchar_t> wstring;
- }
-
- 21.3 Template class basic_string [lib.basic.string]
-
-V namespace std {
- template<class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
- class basic_string {
- public:
- // types:
- typedef traits traits_type;
- typedef typename traits::char_type value_type;
- typedef Allocator allocator_type;
- typedef typename Allocator::size_type size_type;
- typedef typename Allocator::difference_type difference_type;
- typedef typename Allocator::reference reference;
- typedef typename Allocator::const_reference const_reference;
- typedef typename Allocator::pointer pointer;
- typedef typename Allocator::const_pointer const_pointer;
- typedef implementation defined iterator;
- typedef implementation defined const_iterator;
- typedef std::reverse_iterator<iterator> reverse_iterator;
- typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
- static const size_type npos = -1;
-
- // _lib.string.cons_ construct/copy/destroy:
-V explicit basic_string(const Allocator& a = Allocator());
-V basic_string(const basic_string& str, size_type pos = 0,
- size_type n = npos, const Allocator& a = Allocator());
-V basic_string(const charT* s,
- size_type n, const Allocator& a = Allocator());
-V basic_string(const charT* s, const Allocator& a = Allocator());
-V basic_string(size_type n, charT c, const Allocator& a = Allocator());
-V template<class InputIterator>
- basic_string(InputIterator begin, InputIterator end,
- const Allocator& a = Allocator());
-V ~basic_string();
-V basic_string& operator=(const basic_string& str);
-V basic_string& operator=(const charT* s);
-V basic_string& operator=(charT c);
- // _lib.string.iterators_ iterators:
-V iterator begin();
-V const_iterator begin() const;
-V iterator end();
-V const_iterator end() const;
-
-V reverse_iterator rbegin();
-V const_reverse_iterator rbegin() const;
-V reverse_iterator rend();
-V const_reverse_iterator rend() const;
- // _lib.string.capacity_ capacity:
-V size_type size() const;
-V size_type length() const;
-V size_type max_size() const;
-V void resize(size_type n, charT c);
-V void resize(size_type n);
-V size_type capacity() const;
-V void reserve(size_type res_arg = 0);
-V void clear();
-V bool empty() const;
- // _lib.string.access_ element access:
-V const_reference operator[](size_type pos) const;
-V reference operator[](size_type pos);
-V const_reference at(size_type n) const;
-V reference at(size_type n);
- // _lib.string.modifiers_ modifiers:
-V basic_string& operator+=(const basic_string& str);
-V basic_string& operator+=(const charT* s);
-V basic_string& operator+=(charT c);
-V basic_string& append(const basic_string& str);
-V basic_string& append(const basic_string& str, size_type pos,
- size_type n);
-V basic_string& append(const charT* s, size_type n);
-V basic_string& append(const charT* s);
-V basic_string& append(size_type n, charT c);
-V template<class InputIterator>
- basic_string& append(InputIterator first, InputIterator last);
-V void push_back(const charT);
-
-V basic_string& assign(const basic_string&);
-V basic_string& assign(const basic_string& str, size_type pos,
- size_type n);
-V basic_string& assign(const charT* s, size_type n);
-V basic_string& assign(const charT* s);
-V basic_string& assign(size_type n, charT c);
-V template<class InputIterator>
- basic_string& assign(InputIterator first, InputIterator last);
-V basic_string& insert(size_type pos1, const basic_string& str);
-V basic_string& insert(size_type pos1, const basic_string& str,
- size_type pos2, size_type n);
-V basic_string& insert(size_type pos, const charT* s, size_type n);
-V basic_string& insert(size_type pos, const charT* s);
-V basic_string& insert(size_type pos, size_type n, charT c);
-V iterator insert(iterator p, charT c);
-V void insert(iterator p, size_type n, charT c);
-V template<class InputIterator>
- void insert(iterator p, InputIterator first, InputIterator last);
-V basic_string& erase(size_type pos = 0, size_type n = npos);
-V iterator erase(iterator position);
-V iterator erase(iterator first, iterator last);
-V basic_string& replace(size_type pos1, size_type n1,
- const basic_string& str);
-V basic_string& replace(size_type pos1, size_type n1,
- const basic_string& str,
- size_type pos2, size_type n2);
-V basic_string& replace(size_type pos, size_type n1, const charT* s,
- size_type n2);
-V basic_string& replace(size_type pos, size_type n1, const charT* s);
-V basic_string& replace(size_type pos, size_type n1, size_type n2,
- charT c);
-V basic_string& replace(iterator i1, iterator i2, const basic_string& str);
-V basic_string& replace(iterator i1, iterator i2, const charT* s,
- size_type n);
-V basic_string& replace(iterator i1, iterator i2, const charT* s);
-V basic_string& replace(iterator i1, iterator i2,
- size_type n, charT c);
-V template<class InputIterator>
- basic_string& replace(iterator i1, iterator i2,
- InputIterator j1, InputIterator j2);
-V size_type copy(charT* s, size_type n, size_type pos = 0) const;
-V void swap(basic_string<charT,traits,Allocator>&);
- // _lib.string.ops_ string operations:
-V const charT* c_str() const; // explicit
-V const charT* data() const;
-V allocator_type get_allocator() const;
-V size_type find (const basic_string& str, size_type pos = 0) const;
-V size_type find (const charT* s, size_type pos, size_type n) const;
-V size_type find (const charT* s, size_type pos = 0) const;
-V size_type find (charT c, size_type pos = 0) const;
-V size_type rfind(const basic_string& str, size_type pos = npos) const;
-V size_type rfind(const charT* s, size_type pos, size_type n) const;
-V size_type rfind(const charT* s, size_type pos = npos) const;
-V size_type rfind(charT c, size_type pos = npos) const;
-
-V size_type find_first_of(const basic_string& str,
- size_type pos = 0) const;
-V size_type find_first_of(const charT* s,
- size_type pos, size_type n) const;
-V size_type find_first_of(const charT* s, size_type pos = 0) const;
-V size_type find_first_of(charT c, size_type pos = 0) const;
-V size_type find_last_of (const basic_string& str,
- size_type pos = npos) const;
-V size_type find_last_of (const charT* s,
- size_type pos, size_type n) const;
-V size_type find_last_of (const charT* s, size_type pos = npos) const;
-V size_type find_last_of (charT c, size_type pos = npos) const;
-V size_type find_first_not_of(const basic_string& str,
- size_type pos = 0) const;
-V size_type find_first_not_of(const charT* s, size_type pos,
- size_type n) const;
-V size_type find_first_not_of(const charT* s, size_type pos = 0) const;
-V size_type find_first_not_of(charT c, size_type pos = 0) const;
-V size_type find_last_not_of (const basic_string& str,
- size_type pos = npos) const;
-V size_type find_last_not_of (const charT* s, size_type pos,
- size_type n) const;
-V size_type find_last_not_of (const charT* s,
- size_type pos = npos) const;
-V size_type find_last_not_of (charT c, size_type pos = npos) const;
-V basic_string substr(size_type pos = 0, size_type n = npos) const;
-V int compare(const basic_string& str) const;
-V int compare(size_type pos1, size_type n1,
- const basic_string& str) const;
-V int compare(size_type pos1, size_type n1,
- const basic_string& str,
- size_type pos2, size_type n2) const;
-V int compare(const charT* s) const;
-V int compare(size_type pos1, size_type n1,
- const charT* s, size_type n2 = npos) const;
- };
- }
-
- 21.4 Null-terminated sequence utilities [lib.c.strings]
-
- Table 10--Header <cctype> synopsis
-
- isalnum isdigit isprint isupper tolower
-X isalpha isgraph ispunct isxdigit toupper
- iscntrl islower isspace
-
- Table 11--Header <cwctype> synopsis
-
-X Macro: WEOF <cwctype>
-X Types: wctrans_t wctype_t wint_t <cwctype>
- Functions:
-X iswalnum iswctype iswlower iswspace towctrans wctrans
-X iswalpha iswdigit iswprint iswupper towlower wctype
-X iswcntrl iswgraph iswpunct iswxdigit towupper
-
- Table 12--Header <cstring> synopsis
-
-X Macro: NULL <cstring>
-X Type: size_t <cstring>
- Functions:
-X memchr strcat strcspn strncpy strtok
-X memcmp strchr strerror strpbrk strxfrm
-X memcpy strcmp strlen strrchr
-X memmove strcoll strncat strspn
-X memset strcpy strncmp strstr
-
- Table 13--Header <cwchar> synopsis
- Macros: NULL <cwchar> WCHAR_MAX WCHAR_MIN WEOF <cwchar>
- Types: mbstate_t wint_t <cwchar> size_t
- Functions:
-X btowc getwchar ungetwc wcscpy wcsrtombs wmemchr
-X fgetwc mbrlen vfwprintf wcscspn wcsspn wmemcmp
-X fgetws mbrtowc vswprintf wcsftime wcsstr wmemcpy
-X fputwc mbsinit vwprintf wcslen wcstod wmemmove
-X fputws mbsrtowcs wcrtomb wcsncat wcstok wmemset
-X fwide putwc wcscat wcsncmp wcstol wprintf
-X fwprintf putwchar wcschr wcsncpy wcstoul wscanf
-X fwscanf swprintf wcscmp wcspbrk wcsxfrm
-X getwc swscanf wcscoll wcsrchr wctob
-
- Table 14--Header <cstdlib> synopsis
-
- Macros: MB_CUR_MAX
- Functions:
-X atol mblen strtod wctomb
-X atof mbstowcs strtol wcstombs
-X atoi mbtowc strtoul
-
-X const char* strchr(const char* s, int c);
-X char* strchr( char* s, int c);
-
-X const char* strpbrk(const char* s1, const char* s2);
-X char* strpbrk( char* s1, const char* s2);
-
-X const char* strrchr(const char* s, int c);
-X char* strrchr( char* s, int c);
-
-X const char* strstr(const char* s1, const char* s2);
-X char* strstr( char* s1, const char* s2);
-
-X const void* memchr(const void* s, int c, size_t n);
-X void* memchr( void* s, int c, size_t n);
-
-X const wchar_t* wcschr(const wchar_t* s, wchar_t c);
-X wchar_t* wcschr( wchar_t* s, wchar_t c);
-
-X const wchar_t* wcspbrk(const wchar_t* s1, const wchar_t* s2);
-X wchar_t* wcspbrk( wchar_t* s1, const wchar_t* s2);
-
-X const wchar_t* wcsrchr(const wchar_t* s, wchar_t c);
-X wchar_t* wcsrchr( wchar_t* s, wchar_t c);
-
-X const wchar_t* wcsstr(const wchar_t* s1, const wchar_t* s2);
-X wchar_t* wcsstr( wchar_t* s1, const wchar_t* s2);
-
-X const wchar_t* wmemchr(const wchar_t* s, wchar_t c, size_t n);
-X wchar_t* wmemchr( wchar_t* s, wchar_t c, size_t n);
-
- [for initial efforts on the above, see shadow/string.h]
-
- 22.1 Locales [lib.locales]
-
- Header <locale> synopsis
-
- // _lib.locale_, locale:
-T class locale;
-T template <class Facet> const Facet& use_facet(const locale&);
-T template <class Facet> bool has_facet(const locale&) throw();
-
- // _lib.locale.convenience_, convenience interfaces:
-T template <class charT> bool isspace (charT c, const locale& loc);
-T template <class charT> bool isprint (charT c, const locale& loc);
-T template <class charT> bool iscntrl (charT c, const locale& loc);
-T template <class charT> bool isupper (charT c, const locale& loc);
-T template <class charT> bool islower (charT c, const locale& loc);
-T template <class charT> bool isalpha (charT c, const locale& loc);
-T template <class charT> bool isdigit (charT c, const locale& loc);
-T template <class charT> bool ispunct (charT c, const locale& loc);
-T template <class charT> bool isxdigit(charT c, const locale& loc);
-T template <class charT> bool isalnum (charT c, const locale& loc);
-T template <class charT> bool isgraph (charT c, const locale& loc);
-T template <class charT> charT toupper(charT c, const locale& loc);
-T template <class charT> charT tolower(charT c, const locale& loc);
- // _lib.category.ctype_ and _lib.facet.ctype.special_, ctype:
- class ctype_base;
-T template <class charT> class ctype;
-T template <> class ctype<char>; // specialization
-S template <class charT> class ctype_byname;
-S template <> class ctype_byname<char>; // specialization
-T class codecvt_base;
-X template <class internT, class externT, class stateT> class codecvt;
-S template <class internT, class externT, class stateT> class codecvt_byname;
- // _lib.category.numeric_ and _lib.facet.numpunct_, numeric:
-X template <class charT, class InputIterator> class num_get;
-X template <class charT, class OutputIterator> class num_put;
-T template <class charT> class numpunct;
-S template <class charT> class numpunct_byname;
- // _lib.category.collate_, collation:
-T template <class charT> class collate;
-S template <class charT> class collate_byname;
- // _lib.category.time_, date and time:
-T class time_base;
-S template <class charT, class InputIterator> class time_get;
-S template <class charT, class InputIterator> class time_get_byname;
-S template <class charT, class OutputIterator> class time_put;
-S template <class charT, class OutputIterator> class time_put_byname;
- // _lib.category.monetary_, money:
-T class money_base;
-S template <class charT, class InputIterator> class money_get;
-S template <class charT, class OutputIterator> class money_put;
-S template <class charT, bool Intl> class moneypunct;
-S template <class charT, bool Intl> class moneypunct_byname;
- // _lib.category.messages_, message retrieval:
-T class messages_base;
-S template <class charT> class messages;
-S template <class charT> class messages_byname;
-
-
- 22.1.1 Class locale [lib.locale]
-
-X class locale {
- public:
- // types:
-T class facet;
-T class id;
-T typedef int category;
-T static const category // values assigned here are for exposition only
-T none = 0,
-T collate = 0x010, ctype = 0x020,
-T monetary = 0x040, numeric = 0x080,
-T time = 0x100, messages = 0x200,
-T all = collate | ctype | monetary | numeric | time | messages;
- // construct/copy/destroy:
-T locale() throw()
-T locale(const locale& other) throw()
-X explicit locale(const char* std_name);
-X locale(const locale& other, const char* std_name, category);
-T template <class Facet> locale(const locale& other, Facet* f);
-T locale(const locale& other, const locale& one, category);
-T ~locale() throw(); // non-virtual
-T const locale& operator=(const locale& other) throw();
-T template <class Facet> locale combine(const locale& other) const;
- // locale operations:
-X basic_string<char> name() const;
-T bool operator==(const locale& other) const;
-T bool operator!=(const locale& other) const;
-T template <class charT, class Traits, class Allocator>
- bool operator()(const basic_string<charT,Traits,Allocator>& s1,
- const basic_string<charT,Traits,Allocator>& s2) const;
- // global locale objects:
-T static locale global(const locale&);
-T static const locale& classic();
- };
-
- 22.1.1.1 locale types [lib.locale.types]
-
- 22.1.1.1.1 Type locale::category [lib.locale.category]
-
-T typedef int category;
-
-T none, collate, ctype, monetary, numeric, time, and messages
-
- [required locale members]
-T collate<char>, collate<wchar_t>
-T ctype<char>, ctype<wchar_t>
-T codecvt<char,char,mbstate_t>,
-S codecvt<wchar_t,char,mbstate_t>
-T moneypunct<char>, moneypunct<wchar_t>
-T moneypunct<char,true>, moneypunct<wchar_t,true>,
-S money_get<char>, money_get<wchar_t
-S money_put<char>, money_put<wchar_t>
-T numpunct<char>, numpunct<wchar_t>,
-X num_get<char>, num_get<wchar_t>
-X num_put<char>, num_put<wchar_t>
-S time_get<char>, time_get<wchar_t>,
-S time_put<char>, time_put<wchar_t>
-S messages<char>, messages<wchar_t>
-
- [required instantiations]
-S collate_byname<char>, collate_byname<wchar_t>
-S ctype_byname<char>, ctype_byname<wchar_t>
-S codecvt_byname<char,char,mbstate_t>,
-S codecvt_byname<wchar_t,char,mbstate_t>
-S moneypunct_byname<char,International>,
-S moneypunct_byname<wchar_t,International>,
-S money_get<C,InputIterator>,
-S money_put<C,OutputIterator>
-S numpunct_byname<char>, numpunct_byname<wchar_t>
-X num_get<C,InputIterator>, num_put<C,OutputIterator>
-S time_get<char,InputIterator>,
-S time_get_byname<char,InputIterator>,
-S time_get<wchar_t,OutputIterator>,
-S time_get_byname<wchar_t,OutputIterator>,
-S time_put<char,OutputIterator>,
-S time_put_byname<char,OutputIterator>,
-S time_put<wchar_t,OutputIterator>
-S time_put_byname<wchar_t,OutputIterator>
-S messages_byname<char>, messages_byname<wchar_t>
-
-
- 22.1.1.1.2 Class locale::facet [lib.locale.facet]
-
-T class locale::facet {
- protected:
-T explicit facet(size_t refs = 0);
-T virtual ~facet();
- private:
-T facet(const facet&); // not defined
-T void operator=(const facet&); // not defined
- };
- }
-
-
- 22.1.1.1.3 Class locale::id [lib.locale.id]
-
-T class locale::id {
- public:
-T id();
- private:
-T void operator=(const id&); // not defined
-T id(const id&); // not defined
- };
- }
-
-
- 22.2.1 The ctype category [lib.category.ctype]
-
-T class ctype_base {
- public:
-T enum mask { // numeric values are for exposition only.
-T space=, print=, cntrl=, upper=, lower=,
-T alpha=, digit=, punct=, xdigit=,
-T alnum=, graph=
- };
- };
-
-
- 22.2.1.1 Template class ctype [lib.locale.ctype]
-
-T template <class charT>
- class ctype : public locale::facet, public ctype_base {
- public:
-T typedef charT char_type;
-T explicit ctype(size_t refs = 0);
-T bool is(mask m, charT c) const;
-T const charT* is(const charT* low, const charT* high, mask* vec) const;
-T const charT* scan_is(mask m,
- const charT* low, const charT* high) const;
-T const charT* scan_not(mask m,
- const charT* low, const charT* high) const;
-T charT toupper(charT c) const;
-T const charT* toupper(charT* low, const charT* high) const;
-T charT tolower(charT c) const;
-T const charT* tolower(charT* low, const charT* high) const;
-T charT widen(char c) const;
-T const char* widen(const char* low, const char* high, charT* to) const;
-T char narrow(charT c, char dfault) const;
-T const charT* narrow(const charT* low, const charT*, char dfault,
- char* to) const;
-T static locale::id id;
-
- protected:
-T ~ctype(); // virtual
-T virtual bool do_is(mask m, charT c) const;
-T virtual const charT* do_is(const charT* low, const charT* high,
- mask* vec) const;
-T virtual const charT* do_scan_is(mask m,
- const charT* low, const charT* high) const;
-T virtual const charT* do_scan_not(mask m,
- const charT* low, const charT* high) const;
-T virtual charT do_toupper(charT) const;
-T virtual const charT* do_toupper(charT* low, const charT* high) const;
-T virtual charT do_tolower(charT) const;
-T virtual const charT* do_tolower(charT* low, const charT* high) const;
-T virtual charT do_widen(char) const;
-T virtual const char* do_widen(const char* low, const char* high,
- charT* dest) const;
-T virtual char do_narrow(charT, char dfault) const;
-T virtual const charT* do_narrow(const charT* low, const charT* high,
- char dfault, char* dest) const;
- };
-
-
- 22.2.1.2 Template class ctype_byname [lib.locale.ctype.byname]
-
-X template <class charT>
- class ctype_byname : public ctype<charT> {
- public:
-T typedef ctype<charT>::mask mask;
-S explicit ctype_byname(const char*, size_t refs = 0);
- protected:
-S ~ctype_byname(); // virtual
-S virtual bool do_is(mask m, charT c) const;
-S virtual const charT* do_is(const charT* low, const charT* high,
- mask* vec) const;
-S virtual const char* do_scan_is(mask m,
- const charT* low, const charT* high) const;
-S virtual const char* do_scan_not(mask m,
- const charT* low, const charT* high) const;
-S virtual charT do_toupper(charT) const;
-S virtual const charT* do_toupper(charT* low, const charT* high) const;
-S virtual charT do_tolower(charT) const;
-S virtual const charT* do_tolower(charT* low, const charT* high) const;
-S virtual charT do_widen(char) const;
-S virtual const char* do_widen(const char* low, const char* high,
- charT* dest) const;
-S virtual char do_narrow(charT, char dfault) const;
-S virtual const charT* do_narrow(const charT* low, const charT* high,
- char dfault, char* dest) const;
- };
-
- 22.2.1.3 ctype specializations [lib.facet.ctype.special]
-
-T template <> class ctype<char>
- : public locale::facet, public ctype_base {
- public:
-T typedef char char_type;
-T explicit ctype(const mask* tab = 0, bool del = false,
- size_t refs = 0);
-T bool is(mask m, char c) const;
-T const char* is(const char* low, const char* high, mask* vec) const;
-T const char* scan_is (mask m,
- const char* low, const char* high) const;
-T const char* scan_not(mask m,
- const char* low, const char* high) const;
-T char toupper(char c) const;
-T const char* toupper(char* low, const char* high) const;
-T char tolower(char c) const;
-T const char* tolower(char* low, const char* high) const;
-T char widen(char c) const;
-T const char* widen(const char* low, const char* high, char* to) const;
-T char narrow(char c, char dfault) const;
-T const char* narrow(const char* low, const char* high, char dfault,
- char* to) const;
-T static locale::id id;
-T static const size_t table_size = IMPLEMENTATION_DEFINED;
-
- protected:
-T const mask* table() const throw();
-T static const mask* classic_table() throw();
-T ~ctype(); // virtual
-T virtual char do_toupper(char c) const;
-T virtual const char* do_toupper(char* low, const char* high) const;
-T virtual char do_tolower(char c) const;
-T virtual const char* do_tolower(char* low, const char* high) const;
-
-T virtual char do_widen(char c) const;
-T virtual const char* do_widen(const char* low,
- const char* high,
- char* to) const;
-T virtual char do_narrow(char c, char dfault) const;
-T virtual const char* do_narrow(const char* low,
- const char* high,
- char dfault, char* to) const;
- };
-
-
- 22.2.1.4 Class [lib.locale.ctype.byname.special]
- ctype_byname<char>
-
-X template <> class ctype_byname<char> : public ctype<char> {
- public:
-S explicit ctype_byname(const char*, size_t refs = 0);
- protected:
-S ~ctype_byname(); // virtual
-S virtual char do_toupper(char c) const;
-S virtual const char* do_toupper(char* low, const char* high) const;
-S virtual char do_tolower(char c) const;
-S virtual const char* do_tolower(char* low, const char* high) const;
-
-S virtual char do_widen(char c) const;
-S virtual const char* do_widen(char* low,
- const char* high,
- char* to) const;
-S virtual char do_widen(char c) const;
-S virtual const char* do_widen(char* low, const char* high) const;
-
- };
-
-
-
- 22.2.1.5 Template class codecvt [lib.locale.codecvt]
-
-T class codecvt_base {
- public:
-T enum result { ok, partial, error, noconv };
- };
-
-T template <class internT, class externT, class stateT>
- class codecvt : public locale::facet, public codecvt_base {
- public:
-T typedef internT intern_type;
-T typedef externT extern_type;
-T typedef stateT state_type;
-T explicit codecvt(size_t refs = 0)
-T result out(stateT& state,
- const internT* from, const internT* from_end, const internT*& from_next,
- externT* to, externT* to_limit, externT*& to_next) const;
-T result unshift(stateT& state,
- externT* to, externT* to_limit, externT*& to_next) const;
-T result in(stateT& state,
- const externT* from, const externT* from_end, const externT*& from_next,
- internT* to, internT* to_limit, internT*& to_next) const;
-T int encoding() const throw();
-T bool always_noconv() const throw();
-T int length(const stateT&, const externT* from, const externT* end,
- size_t max) const;
-T int max_length() const throw();
-T static locale::id id;
-
- protected:
-T ~codecvt(); // virtual
-T virtual result do_out(stateT& state,
- const internT* from, const internT* from_end, const internT*& from_next,
- externT* to, externT* to_limit, externT*& to_next) const;
-T virtual result do_in(stateT& state,
-T const externT* from, const externT* from_end, const externT*& from_next,
- internT* to, internT* to_limit, internT*& to_next) const;
-T virtual result do_unshift(stateT& state,
- externT* to, externT* to_limit, externT*& to_next) const;
-T virtual int do_encoding() const throw();
-T virtual bool do_always_noconv() const throw();
-T virtual int do_length(const stateT&, const externT* from,
- const externT* end, size_t max) const;
-T virtual int do_max_length() const throw();
- };
- }
-
-
- 22.2.1.6 Template class [lib.locale.codecvt.byname]
- codecvt_byname
-
-X template <class internT, class externT, class stateT>
- class codecvt_byname : public codecvt<internT, externT, stateT> {
- public:
-S explicit codecvt_byname(const char*, size_t refs = 0);
- protected:
-S ~codecvt_byname(); // virtual
-S virtual result do_out(stateT& state,
- const internT* from, const internT* from_end, const internT*& from_next,
- externT* to, externT* to_limit, externT*& to_next) const;
-S virtual result do_in(stateT& state,
- const externT* from, const externT* from_end, const externT*& from_next,
- internT* to, internT* to_limit, internT*& to_next) const;
-S virtual result do_unshift(stateT& state,
- externT* to, externT* to_limit, externT*& to_next) const;
-S virtual int do_encoding() const throw();
-S virtual bool do_always_noconv() const throw();
-S virtual int do_length(const stateT&, const externT* from,
- const externT* end, size_t max) const;
-S virtual result do_unshift(stateT& state,
- externT* to, externT* to_limit, externT*& to_next) const;
-S virtual int do_max_length() const throw();
- };
-
-
- 22.2.2.1 Template class num_get [lib.locale.num.get]
-
-X template <class charT, class InputIterator = istreambuf_iterator<charT> >
- class num_get : public locale::facet {
- public:
-T typedef charT char_type;
-T typedef InputIterator iter_type;
-T explicit num_get(size_t refs = 0);
-T iter_type get(iter_type in, iter_type end, ios_base&,
- ios_base::iostate& err, bool& v) const;
-T iter_type get(iter_type in, iter_type end, ios_base& ,
- ios_base::iostate& err, long& v) const;
-T iter_type get(iter_type in, iter_type end, ios_base&,
- ios_base::iostate& err, unsigned short& v) const;
-T iter_type get(iter_type in, iter_type end, ios_base&,
- ios_base::iostate& err, unsigned int& v) const;
-T iter_type get(iter_type in, iter_type end, ios_base&,
- ios_base::iostate& err, unsigned long& v) const;
-T iter_type get(iter_type in, iter_type end, ios_base&,
- ios_base::iostate& err, float& v) const;
-T iter_type get(iter_type in, iter_type end, ios_base&,
- ios_base::iostate& err, double& v) const;
-T iter_type get(iter_type in, iter_type end, ios_base&,
- ios_base::iostate& err, long double& v) const;
-T iter_type get(iter_type in, iter_type end, ios_base&,
- ios_base::iostate& err, void*& v) const;
-T static locale::id id;
-
- protected:
-T ~num_get(); // virtual
-T virtual iter_type do_get(iter_type, iter_type, ios_base&,
- ios_base::iostate& err, bool& v) const;
-S virtual iter_type do_get(iter_type, iter_type, ios_base&,
- ios_base::iostate& err, long& v) const;
-S virtual iter_type do_get(iter_type, iter_type, ios_base&,
- ios_base::iostate& err, unsigned short& v) const;
-S virtual iter_type do_get(iter_type, iter_type, ios_base&,
- ios_base::iostate& err, unsigned int& v) const;
-S virtual iter_type do_get(iter_type, iter_type, ios_base&,
- ios_base::iostate& err, unsigned long& v) const;
-S virtual iter_type do_get(iter_type, iter_type, ios_base&,
- ios_base::iostate& err, float& v) const;
-S virtual iter_type do_get(iter_type, iter_type, ios_base&,
- ios_base::iostate& err, double& v) const;
-S virtual iter_type do_get(iter_type, iter_type, ios_base&,
- ios_base::iostate& err, long double& v) const;
-S virtual iter_type do_get(iter_type, iter_type, ios_base&,
- ios_base::iostate& err, void*& v) const;
- };
-
-
-
- 22.2.2.2 Template class num_put [lib.locale.nm.put]
-
-X template <class charT, class OutputIterator = ostreambuf_iterator<charT> >
- class num_put : public locale::facet {
- public:
-T typedef charT char_type;
-T typedef OutputIterator iter_type;
-T explicit num_put(size_t refs = 0);
-T iter_type put(iter_type s, ios_base& f, char_type fill, bool v) const;
-T iter_type put(iter_type s, ios_base& f, char_type fill, long v) const;
-T iter_type put(iter_type s, ios_base& f, char_type fill,
- unsigned long v) const;
-T iter_type put(iter_type s, ios_base& f, char_type fill,
- double v) const;
-T iter_type put(iter_type s, ios_base& f, char_type fill,
- long double v) const;
-T iter_type put(iter_type s, ios_base& f, char_type fill,
- const void* v) const;
-T static locale::id id;
- protected:
-T ~num_put(); // virtual
-T virtual iter_type do_put(iter_type, ios_base&, char_type fill,
- bool v) const;
-T virtual iter_type do_put(iter_type, ios_base&, char_type fill,
- long v) const;
-T virtual iter_type do_put(iter_type, ios_base&, char_type fill,
- unsigned long) const;
-S virtual iter_type do_put(iter_type, ios_base&, char_type fill,
- double v) const;
-S virtual iter_type do_put(iter_type, ios_base&, char_type fill,
- long double v) const;
-T virtual iter_type do_put(iter_type, ios_base&, char_type fill,
- const void* v) const;
- };
- }
-
- 22.2.3.1 Template class numpunct [lib.locale.numpunct]
-
-T template <class charT>
- class numpunct : public locale::facet {
- public:
-T typedef charT char_type;
-T typedef basic_string<charT> string_type;
-T explicit numpunct(size_t refs = 0);
-T char_type decimal_point() const;
-T char_type thousands_sep() const;
-T string grouping() const;
-T string_type truename() const;
-T string_type falsename() const;
-T static locale::id id;
- protected:
-T ~numpunct(); // virtual
-T virtual char_type do_decimal_point() const;
-T virtual char_type do_thousands_sep() const;
-T virtual string do_grouping() const;
-T virtual string_type do_truename() const; // for bool
-T virtual string_type do_falsename() const; // for bool
- };
- }
-
-
-
- 22.2.3.2 Template class [lib.locale.numpunct.byname]
- numpunct_byname
-
-X template <class charT>
- class numpunct_byname : public numpunct<charT> {
- // this class is specialized for char and wchar_t.
- public:
-T typedef charT char_type;
-T typedef basic_string<charT> string_type;
-S explicit numpunct_byname(const char*, size_t refs = 0);
- protected:
-S ~numpunct_byname(); // virtual
-S virtual char_type do_decimal_point() const;
-S virtual char_type do_thousands_sep() const;
-S virtual string do_grouping() const;
-S virtual string_type do_truename() const; // for bool
-S virtual string_type do_falsename() const; // for bool
- };
-
-
- 22.2.4.1 Template class collate [lib.locale.collate]
-
-T template <class charT>
- class collate : public locale::facet {
- public:
-T typedef charT char_type;
-T typedef basic_string<charT> string_type;
-T explicit collate(size_t refs = 0);
-T int compare(const charT* low1, const charT* high1,
- const charT* low2, const charT* high2) const;
-T string_type transform(const charT* low, const charT* high) const;
-T long hash(const charT* low, const charT* high) const;
-T static locale::id id;
- protected:
-T ~collate(); // virtual
-T virtual int do_compare(const charT* low1, const charT* high1,
- const charT* low2, const charT* high2) const;
-T virtual string_type do_transform
- (const charT* low, const charT* high) const;
-T virtual long do_hash (const charT* low, const charT* high) const;
- };
-
-
- 22.2.4.2 Template class [lib.locale.collate.byname]
- collate_byname
-
-X template <class charT>
- class collate_byname : public collate<charT> {
- public:
-T typedef basic_string<charT> string_type;
-T explicit collate_byname(const char*, size_t refs = 0);
- protected:
-S ~collate_byname(); // virtual
-S virtual int do_compare(const charT* low1, const charT* high1,
- const charT* low2, const charT* high2) const;
-S virtual string_type do_transform
- (const charT* low, const charT* high) const;
-S virtual long do_hash (const charT* low, const charT* high) const;
- };
-
-
- 22.2.5.1 Template class time_get [lib.locale.time.get]
-
-T class time_base {
- public:
-T enum dateorder { no_order, dmy, mdy, ymd, ydm };
- };
-
- [Note: semantics of time_get members are implementation-defined.
- To complete implementation requires documenting behavior.]
-
-X template <class charT, class InputIterator = istreambuf_iterator<charT> >
- class time_get : public locale::facet, public time_base {
- public:
-T typedef charT char_type;
-T typedef InputIterator iter_type;
-T explicit time_get(size_t refs = 0);
-
-T dateorder date_order() const { return do_date_order(); }
-T iter_type get_time(iter_type s, iter_type end, ios_base& f,
- ios_base::iostate& err, tm* t) const;
-T iter_type get_date(iter_type s, iter_type end, ios_base& f,
- ios_base::iostate& err, tm* t) const;
-T iter_type get_weekday(iter_type s, iter_type end, ios_base& f,
- ios_base::iostate& err, tm* t) const;
-T iter_type get_monthname(iter_type s, iter_type end, ios_base& f,
- ios_base::iostate& err, tm* t) const;
-T iter_type get_year(iter_type s, iter_type end, ios_base& f,
- ios_base::iostate& err, tm* t) const;
-T static locale::id id;
- protected:
- ~time_get(); // virtual
-X virtual dateorder do_date_order() const;
-S virtual iter_type do_get_time(iter_type s, iter_type end, ios_base&,
- ios_base::iostate& err, tm* t) const;
-S virtual iter_type do_get_date(iter_type s, iter_type end, ios_base&,
- ios_base::iostate& err, tm* t) const;
-S virtual iter_type do_get_weekday(iter_type s, iter_type end, ios_base&,
- ios_base::iostate& err, tm* t) const;
-S virtual iter_type do_get_monthname(iter_type s, ios_base&,
- ios_base::iostate& err, tm* t) const;
-S virtual iter_type do_get_year(iter_type s, iter_type end, ios_base&,
- ios_base::iostate& err, tm* t) const;
- };
-
-
-
- 22.2.5.2 Template class [lib.locale.time.get.byname]
- time_get_byname
-
-X template <class charT, class InputIterator = istreambuf_iterator<charT> >
- class time_get_byname : public time_get<charT, InputIterator> {
- public:
-T typedef time_base::dateorder dateorder;
-T typedef InputIterator iter_type
-
-S explicit time_get_byname(const char*, size_t refs = 0);
- protected:
-S ~time_get_byname(); // virtual
-S virtual dateorder do_date_order() const;
-S virtual iter_type do_get_time(iter_type s, iter_type end, ios_base&,
- ios_base::iostate& err, tm* t) const;
-S virtual iter_type do_get_date(iter_type s, iter_type end, ios_base&,
- ios_base::iostate& err, tm* t) const;
-T virtual iter_type do_get_weekday(iter_type s, iter_type end, ios_base&,
- ios_base::iostate& err, tm* t) const;
-T virtual iter_type do_get_monthname(iter_type s, iter_type end, ios_base&,
- ios_base::iostate& err, tm* t) const;
-S virtual iter_type do_get_year(iter_type s, iter_type end, ios_base&,
- ios_base::iostate& err, tm* t) const;
- };
- }
-
- 22.2.5.3 Template class time_put [lib.locale.time.put]
-
-X template <class charT, class OutputIterator = ostreambuf_iterator<charT> >
- class time_put : public locale::facet {
- public:
-T typedef charT char_type;
-T typedef OutputIterator iter_type;
-T explicit time_put(size_t refs = 0);
- // the following is implemented in terms of other member functions.
-S iter_type put(iter_type s, ios_base& f, char_type fill, const tm* tmb,
- const charT* pattern, const charT* pat_end) const;
-T iter_type put(iter_type s, ios_base& f, char_type fill,
- const tm* tmb, char format, char modifier = 0) const;
-T static locale::id id;
- protected:
-T ~time_put(); // virtual
-S virtual iter_type do_put(iter_type s, ios_base&, char_type, const tm* t,
- char format, char modifier) const;
- };
-
-
-
- 22.2.5.4 Template class [lib.locale.time.put.byname]
- time_put_byname
-
-T template <class charT, class OutputIterator = ostreambuf_iterator<charT> >
- class time_put_byname : public time_put<charT, OutputIterator>
- {
- public:
-T typedef charT char_type;
-T typedef OutputIterator iter_type;
-
-T explicit time_put_byname(const char*, size_t refs = 0);
- protected:
-T ~time_put_byname(); // virtual
-S virtual iter_type do_put(iter_type s, ios_base&, char_type, const tm* t,
- char format, char modifier) const;
- };
-
-
- 22.2.6.1 Template class money_get [lib.locale.money.get]
-
-X template <class charT,
- class InputIterator = istreambuf_iterator<charT> >
- class money_get : public locale::facet {
- public:
-T typedef charT char_type;
-T typedef InputIterator iter_type;
-T typedef basic_string<charT> string_type;
-T explicit money_get(size_t refs = 0);
-T iter_type get(iter_type s, iter_type end, bool intl,
- ios_base& f, ios_base::iostate& err,
- long double& units) const;
-T iter_type get(iter_type s, iter_type end, bool intl,
- ios_base& f, ios_base::iostate& err,
- string_type& digits) const;
-T static locale::id id;
- protected:
-T ~money_get(); // virtual
-S virtual iter_type do_get(iter_type, iter_type, bool, ios_base&,
- ios_base::iostate& err, long double& units) const;
-S virtual iter_type do_get(iter_type, iter_type, bool, ios_base&,
- ios_base::iostate& err, string_type& digits) const;
- };
-
- 22.2.6.2 Template class money_put [lib.locale.money.put]
-
-X template <class charT,
- class OutputIterator = ostreambuf_iterator<charT> >
- class money_put : public locale::facet {
- public:
-T typedef charT char_type;
-T typedef OutputIterator iter_type;
-T typedef basic_string<charT> string_type;
-T explicit money_put(size_t refs = 0);
-T iter_type put(iter_type s, bool intl, ios_base& f,
- char_type fill, long double units) const;
-T iter_type put(iter_type s, bool intl, ios_base& f,
- char_type fill, const string_type& digits) const;
-T static locale::id id;
-
- protected:
-T ~money_put(); // virtual
-S virtual iter_type
- do_put(iter_type, bool, ios_base&, char_type fill,
- long double units) const;
-S virtual iter_type
- do_put(iter_type, bool, ios_base&, char_type fill,
- const string_type& digits) const;
- };
-
-
- 22.2.6.3 Template class moneypunct [lib.locale.moneypunct]
-
-T class money_base {
- public:
-T enum part { none, space, symbol, sign, value };
-T struct pattern { char field[4]; };
- };
-
-X template <class charT, bool International = false>
- class moneypunct : public locale::facet, public money_base {
- public:
-T typedef charT char_type;
-T typedef basic_string<charT> string_type;
-T explicit moneypunct(size_t refs = 0);
-T charT decimal_point() const;
-T charT thousands_sep() const;
-T string grouping() const;
-T string_type curr_symbol() const;
-T string_type positive_sign() const;
-T string_type negative_sign() const;
-T int frac_digits() const;
-T pattern pos_format() const;
-T pattern neg_format() const;
-T static locale::id id;
-T static const bool intl = International;
- protected:
-T ~moneypunct(); // virtual
-S virtual charT do_decimal_point() const;
-S virtual charT do_thousands_sep() const;
-S virtual string do_grouping() const;
-S virtual string_type do_curr_symbol() const;
-S virtual string_type do_positive_sign() const;
-S virtual string_type do_negative_sign() const;
-S virtual int do_frac_digits() const;
-T virtual pattern do_pos_format() const;
-T virtual pattern do_neg_format() const;
- };
- }
-
- 22.2.6.4 Template class [lib.locale.moneypunct.byname]
- moneypunct_byname
-
-X template <class charT, bool Intl = false>
- class moneypunct_byname : public moneypunct<charT, Intl> {
- public:
-T typedef money_base::pattern pattern;
-T typedef basic_string<charT> string_type;
-
-T explicit moneypunct_byname(const char*, size_t refs = 0);
- protected:
-T ~moneypunct_byname(); // virtual
-S virtual charT do_decimal_point() const;
-S virtual charT do_thousands_sep() const;
-S virtual string do_grouping() const;
-S virtual string_type do_curr_symbol() const;
-S virtual string_type do_positive_sign() const;
-S virtual string_type do_negative_sign() const;
-S virtual int do_frac_digits() const;
-S virtual pattern do_pos_format() const;
-S virtual pattern do_neg_format() const;
- };
-
- 22.2.7.1 Template class messages [lib.locale.messages]
-
-T class messages_base {
- public:
-T typedef int catalog;
- };
-
-X template <class charT>
- class messages : public locale::facet, public messages_base {
- public:
-T typedef charT char_type;
-T typedef basic_string<charT> string_type;
-T explicit messages(size_t refs = 0);
-T catalog open(const basic_string<char>& fn, const locale&) const;
-T string_type get(catalog c, int set, int msgid,
- const string_type& dfault) const;
-T void close(catalog c) const;
-T static locale::id id;
- protected:
-T ~messages(); // virtual
-S virtual catalog do_open(const basic_string<char>&, const locale&) const;
-S virtual string_type do_get(catalog, int set, int msgid,
- const string_type& dfault) const;
-S virtual void do_close(catalog) const;
- };
-
- 22.2.7.2 Template class [lib.locale.messages.byname]
- messages_byname
-
-
-X template <class charT>
- class messages_byname : public messages<charT> {
- public:
-T typedef messages_base::catalog catalog;
-T typedef basic_string<charT> string_type;
-
-T explicit messages_byname(const char*, size_t refs = 0);
- protected:
-T ~messages_byname(); // virtual
-S virtual catalog do_open(const basic_string<char>&, const locale&) const;
-S virtual string_type do_get(catalog, int set, int msgid,
- const string_type& dfault) const;
-S virtual void do_close(catalog) const;
- };
-
-
- 22.3 C Library Locales [lib.c.locales]
-
-
- Table 13--Header <clocale> synopsis
- Macros:
-X LC_ALL LC_COLLATE LC_CTYPE
-X LC_MONETARY LC_NUMERIC LC_TIME
-X NULL
-X Struct: lconv
-X Functions: localeconv setlocale
-
-
- 23.2 Sequences [lib.sequences]
-
- <deque>, <list>, <queue>, <stack>, and <vector>.
-
- Header <deque> synopsis
-
-T template <class T, class Allocator = allocator<T> > class deque;
-T template <class T, class Allocator>
- bool operator==(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator< (const deque<T,Allocator>& x, const deque<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator!=(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator> (const deque<T,Allocator>& x, const deque<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator>=(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator<=(const deque<T,Allocator>& x, const deque<T,Allocator>& y);
-T template <class T, class Allocator>
- void swap(deque<T,Allocator>& x, deque<T,Allocator>& y);
- }
-
- Header <list> synopsis
-
-T template <class T, class Allocator = allocator<T> > class list;
-T template <class T, class Allocator>
- bool operator==(const list<T,Allocator>& x, const list<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator< (const list<T,Allocator>& x, const list<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator!=(const list<T,Allocator>& x, const list<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator> (const list<T,Allocator>& x, const list<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator>=(const list<T,Allocator>& x, const list<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator<=(const list<T,Allocator>& x, const list<T,Allocator>& y);
-T template <class T, class Allocator>
- void swap(list<T,Allocator>& x, list<T,Allocator>& y);
- }
-
- Header <queue> synopsis
-
- namespace std {
-T template <class T, class Container = deque<T> > class queue;
-T template <class T, class Container>
- bool operator==(const queue<T, Container>& x,
- const queue<T, Container>& y);
-T template <class T, class Container>
- bool operator< (const queue<T, Container>& x,
- const queue<T, Container>& y);
-T template <class T, class Container>
- bool operator!=(const queue<T, Container>& x,
- const queue<T, Container>& y);
-T template <class T, class Container>
- bool operator> (const queue<T, Container>& x,
- const queue<T, Container>& y);
-T template <class T, class Container>
- bool operator>=(const queue<T, Container>& x,
- const queue<T, Container>& y);
-T template <class T, class Container>
- bool operator<=(const queue<T, Container>& x,
- const queue<T, Container>& y);
-T template <class T, class Container = vector<T>,
- class Compare = less<typename Container::value_type> >
-T class priority_queue;
- }
-
- Header <stack> synopsis
-
- namespace std {
-T template <class T, class Container = deque<T> > class stack;
-T template <class T, class Container>
- bool operator==(const stack<T, Container>& x,
- const stack<T, Container>& y);
-T template <class T, class Container>
- bool operator< (const stack<T, Container>& x,
- const stack<T, Container>& y);
-T template <class T, class Container>
- bool operator!=(const stack<T, Container>& x,
- const stack<T, Container>& y);
-T template <class T, class Container>
- bool operator> (const stack<T, Container>& x,
- const stack<T, Container>& y);
-T template <class T, class Container>
- bool operator>=(const stack<T, Container>& x,
- const stack<T, Container>& y);
-T template <class T, class Container>
- bool operator<=(const stack<T, Container>& x,
- const stack<T, Container>& y);
- }
-
- Header <vector> synopsis
-
-T template <class T, class Allocator = allocator<T> > class vector;
-
-T template <class T, class Allocator>
- bool operator==(const vector<T,Allocator>& x,
- const vector<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator< (const vector<T,Allocator>& x,
- const vector<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator!=(const vector<T,Allocator>& x,
- const vector<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator> (const vector<T,Allocator>& x,
- const vector<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator>=(const vector<T,Allocator>& x,
- const vector<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator<=(const vector<T,Allocator>& x,
- const vector<T,Allocator>& y);
-T template <class T, class Allocator>
- void swap(vector<T,Allocator>& x, vector<T,Allocator>& y);
-
-T template <class Allocator> class vector<bool,Allocator>;
-T template <class Allocator>
- bool operator==(const vector<bool,Allocator>& x,
- const vector<bool,Allocator>& y);
-T template <class Allocator>
- bool operator< (const vector<bool,Allocator>& x,
- const vector<bool,Allocator>& y);
-T template <class Allocator>
- bool operator!=(const vector<bool,Allocator>& x,
- const vector<bool,Allocator>& y);
-T template <class Allocator>
- bool operator> (const vector<bool,Allocator>& x,
- const vector<bool,Allocator>& y);
-T template <class Allocator>
- bool operator>=(const vector<bool,Allocator>& x,
- const vector<bool,Allocator>& y);
-T template <class Allocator>
- bool operator<=(const vector<bool,Allocator>& x,
- const vector<bool,Allocator>& y);
-T template <class Allocator>
- void swap(vector<bool,Allocator>& x, vector<bool,Allocator>& y);
- }
-
- 23.2.1 Template class deque [lib.deque]
-
- template <class T, class Allocator = allocator<T> >
-T class deque {
- public:
- // types:
-T typedef typename Allocator::reference reference;
-T typedef typename Allocator::const_reference const_reference;
-T typedef implementation defined iterator;
-T typedef implementation defined const_iterator;
-T typedef implementation defined size_type;
-T typedef implementation defined difference_type;
-T typedef T value_type;
-T typedef Allocator allocator_type;
-T typedef typename Allocator::pointer pointer;
-T typedef typename Allocator::const_pointer const_pointer;
-T typedef std::reverse_iterator<iterator> reverse_iterator;
-T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
- // _lib.deque.cons_ construct/copy/destroy:
-T explicit deque(const Allocator& = Allocator());
-T explicit deque(size_type n, const T& value = T(),
- const Allocator& = Allocator());
-T template <class InputIterator>
- deque(InputIterator first, InputIterator last,
- const Allocator& = Allocator());
-T deque(const deque<T,Allocator>& x);
-T ~deque();
-T deque<T,Allocator>& operator=(const deque<T,Allocator>& x);
-T template <class InputIterator>
- void assign(InputIterator first, InputIterator last);
-T void assign(size_type n, const T& t);
-T allocator_type get_allocator() const;
- // iterators:
-T iterator begin();
-T const_iterator begin() const;
-T iterator end();
-T const_iterator end() const;
-T reverse_iterator rbegin();
-T const_reverse_iterator rbegin() const;
-T reverse_iterator rend();
-T const_reverse_iterator rend() const;
- // _lib.deque.capacity_ capacity:
-T size_type size() const;
-T size_type max_size() const;
-T void resize(size_type sz, T c = T());
-T bool empty() const;
-
- // element access:
-T reference operator[](size_type n);
-T const_reference operator[](size_type n) const;
-T reference at(size_type n);
-T const_reference at(size_type n) const;
-T reference front();
-T const_reference front() const;
-T reference back();
-T const_reference back() const;
- // _lib.deque.modifiers_ modifiers:
-T void push_front(const T& x);
-T void push_back(const T& x);
-T iterator insert(iterator position, const T& x);
-T void insert(iterator position, size_type n, const T& x);
-T template <class InputIterator>
- void insert (iterator position,
- InputIterator first, InputIterator last);
-T void pop_front();
-T void pop_back();
-T iterator erase(iterator position);
-T iterator erase(iterator first, iterator last);
-T void swap(deque<T,Allocator>&);
-T void clear();
- };
-T template <class T, class Allocator>
- bool operator==(const deque<T,Allocator>& x,
- const deque<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator< (const deque<T,Allocator>& x,
- const deque<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator!=(const deque<T,Allocator>& x,
- const deque<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator> (const deque<T,Allocator>& x,
- const deque<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator>=(const deque<T,Allocator>& x,
- const deque<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator<=(const deque<T,Allocator>& x,
- const deque<T,Allocator>& y);
- // specialized algorithms:
-T template <class T, class Allocator>
- void swap(deque<T,Allocator>& x, deque<T,Allocator>& y);
-
-
- 23.2.2 Template class list [lib.list]
-
-T template <class T, class Allocator = allocator<T> >
- class list {
- public:
- // types:
-T typedef typename Allocator::reference reference;
-T typedef typename Allocator::const_reference const_reference;
-T typedef implementation defined iterator;
-T typedef implementation defined const_iterator;
-T typedef implementation defined size_type;
-T typedef implementation defined difference_type;
-T typedef T value_type;
-T typedef Allocator allocator_type;
-T typedef typename Allocator::pointer pointer;
-T typedef typename Allocator::const_pointer const_pointer;
-T typedef std::reverse_iterator<iterator> reverse_iterator;
-T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-
- // _lib.list.cons_ construct/copy/destroy:
-T explicit list(const Allocator& = Allocator());
-T explicit list(size_type n, const T& value = T(),
- const Allocator& = Allocator());
-T template <class InputIterator>
- list(InputIterator first, InputIterator last,
- const Allocator& = Allocator());
-T list(const list<T,Allocator>& x);
-T ~list();
-T list<T,Allocator>& operator=(const list<T,Allocator>& x);
-T template <class InputIterator>
- void assign(InputIterator first, InputIterator last);
-T void assign(size_type n, const T& t);
-T allocator_type get_allocator() const;
- // iterators:
-T iterator begin();
-T const_iterator begin() const;
-T iterator end();
-T const_iterator end() const;
-T reverse_iterator rbegin();
-T const_reverse_iterator rbegin() const;
-T reverse_iterator rend();
-T const_reverse_iterator rend() const;
- // _lib.list.capacity_ capacity:
-T bool empty() const;
-T size_type size() const;
-T size_type max_size() const;
-T void resize(size_type sz, T c = T());
- // element access:
-T reference front();
-T const_reference front() const;
-T reference back();
-T const_reference back() const;
- // _lib.list.modifiers_ modifiers:
-T void push_front(const T& x);
-T void pop_front();
-T void push_back(const T& x);
-T void pop_back();
-T iterator insert(iterator position, const T& x);
-T void insert(iterator position, size_type n, const T& x);
-T template <class InputIterator>
- void insert(iterator position, InputIterator first,
- InputIterator last);
-T iterator erase(iterator position);
-T iterator erase(iterator position, iterator last);
-T void swap(list<T,Allocator>&);
-T void clear();
- // _lib.list.ops_ list operations:
-T void splice(iterator position, list<T,Allocator>& x);
-T void splice(iterator position, list<T,Allocator>& x, iterator i);
-T void splice(iterator position, list<T,Allocator>& x, iterator first,
- iterator last);
-T void remove(const T& value);
-T template <class Predicate> void remove_if(Predicate pred);
-
-T void unique();
-T template <class BinaryPredicate>
- void unique(BinaryPredicate binary_pred);
-T void merge(list<T,Allocator>& x);
-T template <class Compare> void merge(list<T,Allocator>& x, Compare comp);
- void sort();
-T template <class Compare> void sort(Compare comp);
- void reverse();
- };
-T template <class T, class Allocator>
- bool operator==(const list<T,Allocator>& x, const list<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator< (const list<T,Allocator>& x, const list<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator!=(const list<T,Allocator>& x, const list<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator> (const list<T,Allocator>& x, const list<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator>=(const list<T,Allocator>& x, const list<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator<=(const list<T,Allocator>& x, const list<T,Allocator>& y);
- // specialized algorithms:
-T template <class T, class Allocator>
- void swap(list<T,Allocator>& x, list<T,Allocator>& y);
-
-
- 23.2.3.1 Template class queue [lib.queue]
-
-T template <class T, class Container = deque<T> >
- class queue {
- public:
-T typedef typename Container::value_type value_type;
-T typedef typename Container::size_type size_type;
-T typedef Container container_type;
- protected:
-T Container c;
- public:
-T explicit queue(const Container& = Container());
-
-T bool empty() const { return c.empty(); }
-T size_type size() const { return c.size(); }
-T value_type& front() { return c.front(); }
-T const value_type& front() const { return c.front(); }
-T value_type& back() { return c.back(); }
-T const value_type& back() const { return c.back(); }
-T void push(const value_type& x) { c.push_back(x); }
-T void pop() { c.pop_front(); }
- };
-
-T template <class T, class Container>
- bool operator==(const queue<T, Container>& x,
- const queue<T, Container>& y);
-T template <class T, class Container>
- bool operator< (const queue<T, Container>& x,
- const queue<T, Container>& y);
-T template <class T, class Container>
- bool operator!=(const queue<T, Container>& x,
- const queue<T, Container>& y);
-T template <class T, class Container>
- bool operator> (const queue<T, Container>& x,
- const queue<T, Container>& y);
-T template <class T, class Container>
- bool operator>=(const queue<T, Container>& x,
- const queue<T, Container>& y);
-T template <class T, class Container>
- bool operator<=(const queue<T, Container>& x,
- const queue<T, Container>& y);
-
- 23.2.3.2 Template class priority_queue [lib.priority.queue]
-
-T template <class T, class Container = vector<T>,
- class Compare = less<typename Container::value_type> >
- class priority_queue {
- public:
-T typedef typename Container::value_type value_type;
-T typedef typename Container::size_type size_type;
-T typedef Container container_type;
- protected:
-T Container c;
-T Compare comp;
- public:
-T explicit priority_queue(const Compare& x = Compare(),
- const Container& = Container());
-T template <class InputIterator>
- priority_queue(InputIterator first, InputIterator last,
- const Compare& x = Compare(),
- const Container& = Container());
-
-T bool empty() const { return c.empty(); }
-T size_type size() const { return c.size(); }
-T const value_type& top() const { return c.front(); }
-T void push(const value_type& x);
-T void pop();
- };
-
- 23.2.3.3 Template class stack [lib.stack]
-
-T template <class T, class Container = deque<T> >
- class stack {
- public:
-T typedef typename Container::value_type value_type;
-T typedef typename Container::size_type size_type;
-T typedef Container container_type;
- protected:
-T Container c;
- public:
-T explicit stack(const Container& = Container());
-
-T bool empty() const { return c.empty(); }
-T size_type size() const { return c.size(); }
-T value_type& top() { return c.back(); }
-T const value_type& top() const { return c.back(); }
-T void push(const value_type& x) { c.push_back(x); }
-T void pop() { c.pop_back(); }
- };
-T template <class T, class Container>
- bool operator==(const stack<T, Container>& x,
- const stack<T, Container>& y);
-T template <class T, class Container>
- bool operator< (const stack<T, Container>& x,
- const stack<T, Container>& y);
-T template <class T, class Container>
- bool operator!=(const stack<T, Container>& x,
- const stack<T, Container>& y);
-T template <class T, class Container>
- bool operator> (const stack<T, Container>& x,
- const stack<T, Container>& y);
-T template <class T, class Container>
- bool operator>=(const stack<T, Container>& x,
- const stack<T, Container>& y);
-T template <class T, class Container>
- bool operator<=(const stack<T, Container>& x,
- const stack<T, Container>& y);
-
- 23.2.4 Template class vector [lib.vector]
-
- template <class T, class Allocator = allocator<T> >
-T class vector {
- public:
- // types:
-T typedef typename Allocator::reference reference;
-T typedef typename Allocator::const_reference const_reference;
-T typedef implementation defined iterator;
-T typedef implementation defined const_iterator;
-T typedef implementation defined size_type;
-T typedef implementation defined difference_type;
-T typedef T value_type;
-T typedef Allocator allocator_type;
-T typedef typename Allocator::pointer pointer;
-T typedef typename Allocator::const_pointer const_pointer
-T typedef std::reverse_iterator<iterator> reverse_iterator;
-T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
- // _lib.vector.cons_ construct/copy/destroy:
-T explicit vector(const Allocator& = Allocator());
-T explicit vector(size_type n, const T& value = T(),
- const Allocator& = Allocator());
-T template <class InputIterator>
- vector(InputIterator first, InputIterator last,
- const Allocator& = Allocator());
-T vector(const vector<T,Allocator>& x);
-T ~vector();
-T vector<T,Allocator>& operator=(const vector<T,Allocator>& x);
-T template <class InputIterator>
- void assign(InputIterator first, InputIterator last);
-T void assign(size_type n, const T& u);
-T allocator_type get_allocator() const;
- // iterators:
-T iterator begin();
-T const_iterator begin() const;
-T iterator end();
-T const_iterator end() const;
-T reverse_iterator rbegin();
-T const_reverse_iterator rbegin() const;
-T reverse_iterator rend();
-T const_reverse_iterator rend() const;
- // _lib.vector.capacity_ capacity:
-T size_type size() const;
-T size_type max_size() const;
-T void resize(size_type sz, T c = T());
-T size_type capacity() const;
-T bool empty() const;
-T void reserve(size_type n);
-
- // element access:
-T reference operator[](size_type n);
-T const_reference operator[](size_type n) const;
-T const_reference at(size_type n) const;
-T reference at(size_type n);
-T reference front();
-T const_reference front() const;
-T reference back();
-T const_reference back() const;
- // _lib.vector.modifiers_ modifiers:
-T void push_back(const T& x);
-T void pop_back();
-T iterator insert(iterator position, const T& x);
-T void insert(iterator position, size_type n, const T& x);
-T template <class InputIterator>
- void insert(iterator position,
- InputIterator first, InputIterator last);
-T iterator erase(iterator position);
-T iterator erase(iterator first, iterator last);
-T void swap(vector<T,Allocator>&);
-T void clear();
- };
-
-T template <class T, class Allocator>
- bool operator==(const vector<T,Allocator>& x,
- const vector<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator< (const vector<T,Allocator>& x,
- const vector<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator!=(const vector<T,Allocator>& x,
- const vector<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator> (const vector<T,Allocator>& x,
- const vector<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator>=(const vector<T,Allocator>& x,
- const vector<T,Allocator>& y);
-T template <class T, class Allocator>
- bool operator<=(const vector<T,Allocator>& x,
- const vector<T,Allocator>& y);
- // specialized algorithms:
-T template <class T, class Allocator>
- void swap(vector<T,Allocator>& x, vector<T,Allocator>& y);
-
-
- 23.2.5 Class vector<bool> [lib.vector.bool]
-
-T template <class Allocator> class vector<bool, Allocator> {
- public:
- // types:
-T typedef bool const_reference;
-T typedef implementation defined iterator;
-T typedef implementation defined const_iterator;
-T typedef implementation defined size_type;
-T typedef implementation defined difference_type;
-T typedef bool value_type;
-T typedef Allocator allocator_type;
-T typedef implementation defined pointer;
-T typedef implementation defined const_pointer
-T typedef std::reverse_iterator<iterator> reverse_iterator;
-T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
- // bit reference:
-T class reference {
- friend class vector;
-T reference();
- public:
-T ~reference();
-T operator bool() const;
-T reference& operator=(const bool x);
-T reference& operator=(const reference& x);
-T void flip(); // flips the bit
- };
-
- // construct/copy/destroy:
-T explicit vector(const Allocator& = Allocator());
-T explicit vector(size_type n, const bool& value = bool(),
- const Allocator& = Allocator());
-T template <class InputIterator>
- vector(InputIterator first, InputIterator last,
- const Allocator& = Allocator());
-T vector(const vector<bool,Allocator>& x);
-T ~vector();
-T vector<bool,Allocator>& operator=(const vector<bool,Allocator>& x);
-T template <class InputIterator>
- void assign(InputIterator first, InputIterator last);
-T void assign(size_type n, const T& t);
-T allocator_type get_allocator() const;
- // iterators:
-T iterator begin();
-T const_iterator begin() const;
-T iterator end();
-T const_iterator end() const;
-T reverse_iterator rbegin();
-T const_reverse_iterator rbegin() const;
-T reverse_iterator rend();
-T const_reverse_iterator rend() const;
- // capacity:
-T size_type size() const;
-T size_type max_size() const;
-T void resize(size_type sz, bool c = false);
-T size_type capacity() const;
-T bool empty() const;
-T void reserve(size_type n);
- // element access:
-T reference operator[](size_type n);
-T const_reference operator[](size_type n) const;
-T const_reference at(size_type n) const;
-T reference at(size_type n);
-T reference front();
-T const_reference front() const;
-T reference back();
-T const_reference back() const;
- // modifiers:
-T void push_back(const bool& x);
-T void pop_back();
-T iterator insert(iterator position, const bool& x);
-T void insert (iterator position, size_type n, const bool& x);
-T template <class InputIterator>
- void insert(iterator position,
- InputIterator first, InputIterator last);
-T iterator erase(iterator position);
-T iterator erase(iterator first, iterator last);
-T void swap(vector<bool,Allocator>&);
-T static void swap(reference x, reference y);
-T void flip(); // flips all bits
-T void clear();
- };
-
-T template <class Allocator>
- bool operator==(const vector<bool,Allocator>& x,
- const vector<bool,Allocator>& y);
-T template <class Allocator>
- bool operator< (const vector<bool,Allocator>& x,
- const vector<bool,Allocator>& y);
-T template <class Allocator>
- bool operator!=(const vector<bool,Allocator>& x,
- const vector<bool,Allocator>& y);
-T template <class Allocator>
- bool operator> (const vector<bool,Allocator>& x,
- const vector<bool,Allocator>& y);
-T template <class Allocator>
- bool operator>=(const vector<bool,Allocator>& x,
- const vector<bool,Allocator>& y);
-T template <class Allocator>
- bool operator<=(const vector<bool,Allocator>& x,
- const vector<bool,Allocator>& y);
- // specialized algorithms:
-T template <class Allocator>
- void swap(vector<bool,Allocator>& x, vector<bool,Allocator>& y);
-
- 23.3 Associative containers [lib.associative]
-
- <map> and <set>:
-
- Header <map> synopsis
-
- template <class Key, class T, class Compare = less<Key>,
- class Allocator = allocator<pair<const Key, T> > >
-T class map;
-
-T template <class Key, class T, class Compare, class Allocator>
- bool operator==(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator< (const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator!=(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator> (const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator>=(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator<=(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- void swap(map<Key,T,Compare,Allocator>& x,
- map<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare = less<Key>,
- class Allocator = allocator<pair<const Key, T> > >
- class multimap;
-T template <class Key, class T, class Compare, class Allocator>
- bool operator==(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator< (const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator!=(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator> (const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator>=(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator<=(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- void swap(multimap<Key,T,Compare,Allocator>& x,
- multimap<Key,T,Compare,Allocator>& y);
- }
-
- Header <set> synopsis
-
- template <class Key, class Compare = less<Key>,
- class Allocator = allocator<Key> >
-T class set;
-
-T template <class Key, class Compare, class Allocator>
- bool operator==(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator< (const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator!=(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator> (const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator>=(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator<=(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- void swap(set<Key,Compare,Allocator>& x,
- set<Key,Compare,Allocator>& y);
-T template <class Key, class Compare = less<Key>,
- class Allocator = allocator<Key> >
- class multiset;
-T template <class Key, class Compare, class Allocator>
- bool operator==(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator< (const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator!=(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator> (const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator>=(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator<=(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- void swap(multiset<Key,Compare,Allocator>& x,
- multiset<Key,Compare,Allocator>& y);
- }
-
- 23.3.1 Template class map [lib.map]
-
- template <class Key, class T, class Compare = less<Key>,
- class Allocator = allocator<pair<const Key, T> > >
-T class map {
- public:
- // types:
-T typedef Key key_type;
-T typedef T mapped_type;
-T typedef pair<const Key, T> value_type;
-T typedef Compare key_compare;
-T typedef Allocator allocator_type;
-T typedef typename Allocator::reference reference;
-T typedef typename Allocator::const_reference const_reference;
-T typedef implementation defined iterator;
-T typedef implementation defined const_iterator;
-T typedef implementation defined size_type;
-T typedef implementation defined difference_type;
-T typedef typename Allocator::pointer pointer;
-T typedef typename Allocator::const_pointer const_pointer;
-T typedef std::reverse_iterator<iterator> reverse_iterator;
-T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-T class value_compare
- : public binary_function<value_type,value_type,bool> {
- friend class map;
- protected:
-T Compare comp;
-T value_compare(Compare c) : comp(c) {}
- public:
-T bool operator()(const value_type& x, const value_type& y) const {
- return comp(x.first, y.first);
- }
- };
-
- // _lib.map.cons_ construct/copy/destroy:
-T explicit map(const Compare& comp = Compare(),
- const Allocator& = Allocator());
-T template <class InputIterator>
- map(InputIterator first, InputIterator last,
- const Compare& comp = Compare(), const Allocator& = Allocator());
-T map(const map<Key,T,Compare,Allocator>& x);
-T ~map();
-T map<Key,T,Compare,Allocator>&
- operator=(const map<Key,T,Compare,Allocator>& x);
- // iterators:
-T iterator begin();
-T const_iterator begin() const;
-T iterator end();
-T const_iterator end() const;
-T reverse_iterator rbegin();
-T const_reverse_iterator rbegin() const;
-T reverse_iterator rend();
-T const_reverse_iterator rend() const;
- // capacity:
-T bool empty() const;
-T size_type size() const;
-T size_type max_size() const;
- // _lib.map.access_ element access:
-T T& operator[](const key_type& x);
- // modifiers:
-T pair<iterator, bool> insert(const value_type& x);
-T iterator insert(iterator position, const value_type& x);
-T template <class InputIterator>
- void insert(InputIterator first, InputIterator last);
-T void erase(iterator position);
-T size_type erase(const key_type& x);
-T void erase(iterator first, iterator last);
-T void swap(map<Key,T,Compare,Allocator>&);
-T void clear();
- // observers:
-T key_compare key_comp() const;
-T value_compare value_comp() const;
- // _lib.map.ops_ map operations:
-T iterator find(const key_type& x);
-T const_iterator find(const key_type& x) const;
-T size_type count(const key_type& x) const;
-T iterator lower_bound(const key_type& x);
-T const_iterator lower_bound(const key_type& x) const;
-T iterator upper_bound(const key_type& x);
-T const_iterator upper_bound(const key_type& x) const;
-T pair<iterator,iterator>
- equal_range(const key_type& x);
-T pair<const_iterator,const_iterator>
- equal_range(const key_type& x) const;
- };
-
-T template <class Key, class T, class Compare, class Allocator>
- bool operator==(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator< (const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator!=(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator> (const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator>=(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator<=(const map<Key,T,Compare,Allocator>& x,
- const map<Key,T,Compare,Allocator>& y);
- // specialized algorithms:
-T template <class Key, class T, class Compare, class Allocator>
- void swap(map<Key,T,Compare,Allocator>& x,
- map<Key,T,Compare,Allocator>& y);
-
- 23.3.2 Template class multimap [lib.multimap]
-
- template <class Key, class T, class Compare = less<Key>,
- class Allocator = allocator<pair<const Key, T> > >
-T class multimap {
- public:
- // types:
-T typedef Key key_type;
-T typedef T mapped_type;
-T typedef pair<const Key,T> value_type;
-T typedef Compare key_compare;
-T typedef Allocator allocator_type;
-T typedef typename Allocator::reference reference;
-T typedef typename Allocator::const_reference const_reference;
-T typedef implementation defined iterator;
-T typedef implementation defined const_iterator;
-T typedef implementation defined size_type;
-T typedef implementation defined difference_type
-T typedef typename Allocator::pointer pointer;
-T typedef typename Allocator::const_pointer const_pointer;
-T typedef std::reverse_iterator<iterator> reverse_iterator;
-T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-T class value_compare
- : public binary_function<value_type,value_type,bool> {
- friend class multimap;
- protected:
-T Compare comp;
-T value_compare(Compare c) : comp(c) {}
- public:
-T bool operator()(const value_type& x, const value_type& y) const {
- return comp(x.first, y.first);
- }
- };
- // construct/copy/destroy:
-T explicit multimap(const Compare& comp = Compare(),
- const Allocator& = Allocator());
-T template <class InputIterator>
- multimap(InputIterator first, InputIterator last,
- const Compare& comp = Compare(),
- const Allocator& = Allocator());
-T multimap(const multimap<Key,T,Compare,Allocator>& x);
-T ~multimap();
-T multimap<Key,T,Compare,Allocator>&
- operator=(const multimap<Key,T,Compare,Allocator>& x);
-T allocator_type get_allocator() const;
-
- // iterators:
-T iterator begin();
-T const_iterator begin() const;
-T iterator end();
-T const_iterator end() const;
-T reverse_iterator rbegin();
-T const_reverse_iterator rbegin() const;
-T reverse_iterator rend();
-T const_reverse_iterator rend() const;
- // capacity:
-T bool empty() const;
-T size_type size() const;
-T size_type max_size() const;
- // modifiers:
-T iterator insert(const value_type& x);
-T iterator insert(iterator position, const value_type& x);
-T template <class InputIterator>
- void insert(InputIterator first, InputIterator last);
-T void erase(iterator position);
-T size_type erase(const key_type& x);
-T void erase(iterator first, iterator last);
-T void swap(multimap<Key,T,Compare,Allocator>&);
-T void clear();
- // observers:
-T key_compare key_comp() const;
-T value_compare value_comp() const;
- // map operations:
-T iterator find(const key_type& x);
-T const_iterator find(const key_type& x) const;
-T size_type count(const key_type& x) const;
-T iterator lower_bound(const key_type& x);
-T const_iterator lower_bound(const key_type& x) const;
-T iterator upper_bound(const key_type& x);
-T const_iterator upper_bound(const key_type& x) const;
-T pair<iterator,iterator> equal_range(const key_type& x);
-T pair<const_iterator,const_iterator> equal_range(const key_type& x) const;
- };
-
-T template <class Key, class T, class Compare, class Allocator>
- bool operator==(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator< (const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator!=(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator> (const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator>=(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
-T template <class Key, class T, class Compare, class Allocator>
- bool operator<=(const multimap<Key,T,Compare,Allocator>& x,
- const multimap<Key,T,Compare,Allocator>& y);
- // specialized algorithms:
-T template <class Key, class T, class Compare, class Allocator>
- void swap(multimap<Key,T,Compare,Allocator>& x,
- multimap<Key,T,Compare,Allocator>& y);
-
-
- 23.3.3 Template class set [lib.set]
-
- template <class Key, class Compare = less<Key>,
- class Allocator = allocator<Key> >
-T class set {
- public:
- // types:
-T typedef Key key_type;
-T typedef Key value_type;
-T typedef Compare key_compare;
-T typedef Compare value_compare;
-T typedef Allocator allocator_type;
-T typedef typename Allocator::reference reference;
-T typedef typename Allocator::const_reference const_reference;
-T typedef implementation defined iterator;
-T typedef implementation defined const_iterator;
-T typedef implementation defined size_type;
-T typedef implementation defined difference_type;
-T typedef typename Allocator::pointer pointer;
-T typedef typename Allocator::const_pointer const_pointer;
-T typedef std::reverse_iterator<iterator> reverse_iterator;
-T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
- // _lib.set.cons_ construct/copy/destroy:
-T explicit set(const Compare& comp = Compare(),
- const Allocator& = Allocator());
-T template <class InputIterator>
- set(InputIterator first, InputIterator last,
- const Compare& comp = Compare(), const Allocator& = Allocator());
-T set(const set<Key,Compare,Allocator>& x);
-T ~set();
-T set<Key,Compare,Allocator>&
- operator=(const set<Key,Compare,Allocator>& x);
-T allocator_type get_allocator() const;
- // iterators:
-T iterator begin();
-T const_iterator begin() const;
-T iterator end();
-T const_iterator end() const;
-T reverse_iterator rbegin();
-T const_reverse_iterator rbegin() const;
-T reverse_iterator rend();
-T const_reverse_iterator rend() const;
- // capacity:
-T bool empty() const;
-T size_type size() const;
-T size_type max_size() const;
- // modifiers:
-T pair<iterator,bool> insert(const value_type& x);
-T iterator insert(iterator position, const value_type& x);
-T template <class InputIterator>
-T void insert(InputIterator first, InputIterator last);
-T void erase(iterator position);
-T size_type erase(const key_type& x);
-T void erase(iterator first, iterator last);
-T void swap(set<Key,Compare,Allocator>&);
-T void clear();
-
- // observers:
-T key_compare key_comp() const;
-T value_compare value_comp() const;
- // set operations:
-T iterator find(const key_type& x) const;
-T size_type count(const key_type& x) const;
-T iterator lower_bound(const key_type& x) const;
-T iterator upper_bound(const key_type& x) const;
-T pair<iterator,iterator> equal_range(const key_type& x) const;
- };
-T template <class Key, class Compare, class Allocator>
- bool operator==(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator< (const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator!=(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator> (const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator>=(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator<=(const set<Key,Compare,Allocator>& x,
- const set<Key,Compare,Allocator>& y);
- // specialized algorithms:
-T template <class Key, class Compare, class Allocator>
- void swap(set<Key,Compare,Allocator>& x,
- set<Key,Compare,Allocator>& y);
-
- 23.3.4 Template class multiset [lib.multiset]
-
- template <class Key, class Compare = less<Key>,
- class Allocator = allocator<Key> >
-T class multiset {
- public:
- // types:
-T typedef Key key_type;
-T typedef Key value_type;
-T typedef Compare key_compare;
-T typedef Compare value_compare;
-T typedef Allocator allocator_type;
-T typedef typename Allocator::reference reference;
-T typedef typename Allocator::const_reference const_reference;
-T typedef implementation defined iterator;
-T typedef implementation defined const_iterator;
-T typedef implementation defined size_type;
-T typedef implementation defined difference_type
-T typedef typename Allocator::pointer pointer;
-T typedef typename Allocator::const_pointer const_pointer;
-T typedef std::reverse_iterator<iterator> reverse_iterator;
-T typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
-
- // construct/copy/destroy:
-T explicit multiset(const Compare& comp = Compare(),
- const Allocator& = Allocator());
-T template <class InputIterator>
- multiset(InputIterator first, InputIterator last,
- const Compare& comp = Compare(),
- const Allocator& = Allocator());
-T multiset(const multiset<Key,Compare,Allocator>& x);
-T ~multiset();
-T multiset<Key,Compare,Allocator>&
- operator=(const multiset<Key,Compare,Allocator>& x);
-T allocator_type get_allocator() const;
- // iterators:
-T iterator begin();
-T const_iterator begin() const;
-T iterator end();
-T const_iterator end() const;
-T reverse_iterator rbegin();
-T const_reverse_iterator rbegin() const;
-T reverse_iterator rend();
-T const_reverse_iterator rend() const;
- // capacity:
-T bool empty() const;
-T size_type size() const;
-T size_type max_size() const;
- // modifiers:
-T iterator insert(const value_type& x);
-T iterator insert(iterator position, const value_type& x);
-T template <class InputIterator>
- void insert(InputIterator first, InputIterator last);
-T void erase(iterator position);
-T size_type erase(const key_type& x);
-T void erase(iterator first, iterator last);
-T void swap(multiset<Key,Compare,Allocator>&);
-T void clear();
- // observers:
-T key_compare key_comp() const;
-T value_compare value_comp() const;
- // set operations:
-T iterator find(const key_type& x) const;
-T size_type count(const key_type& x) const;
-T iterator lower_bound(const key_type& x) const;
-T iterator upper_bound(const key_type& x) const;
-T pair<iterator,iterator> equal_range(const key_type& x) const;
- };
-
-T template <class Key, class Compare, class Allocator>
- bool operator==(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator< (const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator!=(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator> (const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator>=(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
-T template <class Key, class Compare, class Allocator>
- bool operator<=(const multiset<Key,Compare,Allocator>& x,
- const multiset<Key,Compare,Allocator>& y);
- // specialized algorithms:
-T template <class Key, class Compare, class Allocator>
- void swap(multiset<Key,Compare,Allocator>& x,
- multiset<Key,Compare,Allocator>& y);
-
- 23.3.5 Template class bitset [lib.template.bitset]
-
- Header <bitset> synopsis
-
-T template <size_t N> class bitset;
- // _lib.bitset.operators_ bitset operations:
-T template <size_t N>
- bitset<N> operator&(const bitset<N>&, const bitset<N>&);
-T template <size_t N>
- bitset<N> operator|(const bitset<N>&, const bitset<N>&);
-T template <size_t N>
- bitset<N> operator^(const bitset<N>&, const bitset<N>&);
-T template <class charT, class traits, size_t N>
- basic_istream<charT, traits>&
- operator>>(basic_istream<charT, traits>& is, bitset<N>& x);
-T template <class charT, class traits, size_t N>
- basic_ostream<charT, traits>&
- operator<<(basic_ostream<charT, traits>& os, const bitset<N>& x);
-
-T template<size_t N> class bitset {
- public:
- // bit reference:
-T class reference {
- friend class bitset;
-T reference();
- public:
-T ~reference();
-T reference& operator=(bool x); // for b[i] = x;
-T reference& operator=(const reference&); // for b[i] = b[j];
-T bool operator~() const; // flips the bit
-T operator bool() const; // for x = b[i];
-T reference& flip(); // for b[i].flip();
- };
-
- // _lib.bitset.cons_ constructors:
-T bitset();
-T bitset(unsigned long val);
-T template<class charT, class traits, class Allocator>
- explicit bitset(
- const basic_string<charT,traits,Allocator>& str,
- typename basic_string<charT,traits,Allocator>::size_type pos = 0,
- typename basic_string<charT,traits,Allocator>::size_type n =
- basic_string<charT,traits,Allocator>::npos);
- // _lib.bitset.members_ bitset operations:
-T bitset<N>& operator&=(const bitset<N>& rhs);
-T bitset<N>& operator|=(const bitset<N>& rhs);
-T bitset<N>& operator^=(const bitset<N>& rhs);
-T bitset<N>& operator<<=(size_t pos);
-T bitset<N>& operator>>=(size_t pos);
-T bitset<N>& set();
-T bitset<N>& set(size_t pos, int val = true);
-T bitset<N>& reset();
-T bitset<N>& reset(size_t pos);
-T bitset<N> operator~() const;
-T bitset<N>& flip();
-T bitset<N>& flip(size_t pos);
- // element access:
-T reference operator[](size_t pos); // for b[i];
-T unsigned long to_ulong() const;
-T template <class charT, class traits, class Allocator>
- basic_string<charT, traits, Allocator> to_string() const;
-T size_t count() const;
-T size_t size() const;
-T bool operator==(const bitset<N>& rhs) const;
-T bool operator!=(const bitset<N>& rhs) const;
-T bool test(size_t pos) const;
-T bool any() const;
-T bool none() const;
-T bitset<N> operator<<(size_t pos) const;
-T bitset<N> operator>>(size_t pos) const;
- };
-
-
-
-
- 24.2 Header <iterator> synopsis [lib.iterator.synopsis]
-
- // _lib.iterator.primitives_, primitives:
-T template<class Iterator> struct iterator_traits;
-T template<class T> struct iterator_traits<T*>;
-
-X template<class Category, class T, class Distance = ptrdiff_t,
- class Pointer = T*, class Reference = T&> struct iterator;
-T struct input_iterator_tag {};
-T struct output_iterator_tag {};
-T struct forward_iterator_tag: public input_iterator_tag {};
-T struct bidirectional_iterator_tag: public forward_iterator_tag {};
-T struct random_access_iterator_tag: public bidirectional_iterator_tag {};
- // _lib.iterator.operations_, iterator operations:
-T template <class InputIterator, class Distance>
- void advance(InputIterator& i, Distance n);
-T template <class InputIterator>
- typename iterator_traits<InputIterator>::difference_type
- distance(InputIterator first, InputIterator last);
- // _lib.predef.iterators_, predefined iterators:
-X template <class Iterator> class reverse_iterator;
-T template <class Iterator>
- bool operator==(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- bool operator<(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- bool operator!=(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- bool operator>(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- bool operator>=(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- bool operator<=(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- typename reverse_iterator<Iterator>::difference_type operator-(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- reverse_iterator<Iterator>
- operator+(
- typename reverse_iterator<Iterator>::difference_type n,
- const reverse_iterator<Iterator>& x);
-
-X template <class Container> class back_insert_iterator;
-T template <class Container>
- back_insert_iterator<Container> back_inserter(Container& x);
-X template <class Container> class front_insert_iterator;
-T template <class Container>
- front_insert_iterator<Container> front_inserter(Container& x);
-X template <class Container> class insert_iterator;
-T template <class Container, class Iterator>
- insert_iterator<Container> inserter(Container& x, Iterator i);
- // _lib.stream.iterators_, stream iterators:
-X template <class T, class charT = char, class traits = char_traits<charT>,
- class Distance = ptrdiff_t>
- class istream_iterator;
- template <class T, class charT, class traits, class Distance>
-X bool operator==(const istream_iterator<T,charT,traits,Distance>& x,
- const istream_iterator<T,charT,traits,Distance>& y);
- template <class T, class charT, class traits, class Distance>
-X bool operator!=(const istream_iterator<T,charT,traits,Distance>& x,
- const istream_iterator<T,charT,traits,Distance>& y);
-X template <class T, class charT = char, class traits = char_traits<charT> >
- class ostream_iterator;
-X template<class charT, class traits = char_traits<charT> >
- class istreambuf_iterator;
-X template <class charT, class traits>
- bool operator==(const istreambuf_iterator<charT,traits>& a,
- const istreambuf_iterator<charT,traits>& b);
-X template <class charT, class traits>
- bool operator!=(const istreambuf_iterator<charT,traits>& a,
- const istreambuf_iterator<charT,traits>& b);
-T template <class charT, class traits = char_traits<charT> >
- class ostreambuf_iterator;
-
- 24.3 Iterator primitives [lib.iterator.primitives]
-
-T template<class Iterator> struct iterator_traits {
-T typedef typename Iterator::difference_type difference_type;
-T typedef typename Iterator::value_type value_type;
-T typedef typename Iterator::pointer pointer;
-T typedef typename Iterator::reference reference;
-T typedef typename Iterator::iterator_category iterator_category;
- };
-
-T template<class T> struct iterator_traits<T*> {
-T typedef ptrdiff_t difference_type;
-T typedef T value_type;
-T typedef T* pointer;
-T typedef T& reference;
-T typedef random_access_iterator_tag iterator_category;
- };
-
-T template<class T> struct iterator_traits<const T*> {
-T typedef ptrdiff_t difference_type;
-T typedef T value_type;
-T typedef const T* pointer;
-T typedef const T& reference;
-T typedef random_access_iterator_tag iterator_category;
- };
-
- 24.3.2 Basic iterator [lib.iterator.basic]
-
- template<class Category, class T, class Distance = ptrdiff_t,
- class Pointer = T*, class Reference = T&>
-X struct iterator {
-T typedef T value_type;
-T typedef Distance difference_type;
-T typedef Pointer pointer;
-T typedef Reference reference;
-T typedef Category iterator_category;
- };
-
- 24.3.3 Standard iterator tags [lib.std.iterator.tags]
-
-T struct input_iterator_tag {};
-T struct output_iterator_tag {};
-T struct forward_iterator_tag: public input_iterator_tag {};
-T struct bidirectional_iterator_tag: public forward_iterator_tag {};
-T struct random_access_iterator_tag: public bidirectional_iterator_tag {};
-
-
- 24.4.1 Reverse iterators [lib.reverse.iterators]
-
- template <class Iterator>
-X class reverse_iterator : public
- iterator<typename iterator_traits<Iterator>::iterator_category,
- typename iterator_traits<Iterator>::value_type,
- typename iterator_traits<Iterator>::difference_type,
- typename iterator_traits<Iterator>::pointer,
- typename iterator_traits<Iterator>::reference> {
- protected:
-T Iterator current;
- public:
-T typedef Iterator
- iterator_type;
-T typedef typename iterator_traits<Iterator>::difference_type
- difference_type;
-T typedef typename iterator_traits<Iterator>::reference
- reference;
-T typedef typename iterator_traits<Iterator>::pointer
- pointer;
-
-T reverse_iterator();
-T explicit reverse_iterator(Iterator x);
-T template <class U> reverse_iterator(const reverse_iterator<U>& u);
-T Iterator base() const; // explicit
-T reference operator*() const;
-T pointer operator->() const;
-T reverse_iterator& operator++();
-T reverse_iterator operator++(int);
-T reverse_iterator& operator--();
-T reverse_iterator operator--(int);
-
-T reverse_iterator operator+ (difference_type n) const;
-T reverse_iterator& operator+=(difference_type n);
-T reverse_iterator operator- (difference_type n) const;
-T reverse_iterator& operator-=(difference_type n);
-T reference operator[](difference_type n) const;
- };
-T template <class Iterator>
- bool operator==(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- bool operator<(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- bool operator!=(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- bool operator>(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- bool operator>=(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- bool operator<=(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- typename reverse_iterator<Iterator>::difference_type operator-(
- const reverse_iterator<Iterator>& x,
- const reverse_iterator<Iterator>& y);
-T template <class Iterator>
- reverse_iterator<Iterator> operator+(
- typename reverse_iterator<Iterator>::difference_type n,
- const reverse_iterator<Iterator>& x);
-
-
- 24.4.2.1 Template class [lib.back.insert.iterator]
- back_insert_iterator
-
- template <class Container>
-X class back_insert_iterator :
- public iterator<output_iterator_tag,void,void,void,void> {
- protected:
-T Container* container;
- public:
-T typedef Container container_type;
-T explicit back_insert_iterator(Container& x);
-T back_insert_iterator<Container>&
- operator=(typename Container::const_reference value);
-
-T back_insert_iterator<Container>& operator*();
-T back_insert_iterator<Container>& operator++();
-T back_insert_iterator<Container> operator++(int);
- };
-T template <class Container>
- back_insert_iterator<Container> back_inserter(Container& x);
-
-
-
- 24.4.2.3 Template class [lib.front.insert.iterator]
- front_insert_iterator
-
- template <class Container>
-X class front_insert_iterator :
- public iterator<output_iterator_tag,void,void,void,void> {
- protected:
-T Container* container;
- public:
-T typedef Container container_type;
-T explicit front_insert_iterator(Container& x);
-T front_insert_iterator<Container>&
- operator=(typename Container::const_reference value);
-T front_insert_iterator<Container>& operator*();
-T front_insert_iterator<Container>& operator++();
-T front_insert_iterator<Container> operator++(int);
- };
-T template <class Container>
- front_insert_iterator<Container> front_inserter(Container& x);
-
-
- 24.4.2.5 Template class insert_iterator [lib.insert.iterator]
-
- template <class Container>
-X class insert_iterator :
- public iterator<output_iterator_tag,void,void,void,void> {
- protected:
-T Container* container;
-T typename Container::iterator iter;
- public:
-T typedef Container container_type;
-T insert_iterator(Container& x, typename Container::iterator i);
-T insert_iterator<Container>&
- operator=(typename Container::const_reference value);
-T insert_iterator<Container>& operator*();
-T insert_iterator<Container>& operator++();
-T insert_iterator<Container>& operator++(int);
- };
-T template <class Container, class Iterator>
- insert_iterator<Container> inserter(Container& x, Iterator i);
-
- 24.5.1 Template class istream_iterator [lib.istream.iterator]
-
- template <class T, class charT = char, class traits = char_traits<charT>,
- class Distance = ptrdiff_t>
-X class istream_iterator:
- public iterator<input_iterator_tag, T, Distance, const T*, const T&> {
- public:
-T typedef charT char_type
-T typedef traits traits_type;
-T typedef basic_istream<charT,traits> istream_type;
-T istream_iterator();
-T istream_iterator(istream_type& s);
-T istream_iterator(const istream_iterator<T,charT,traits,Distance>& x);
-T ~istream_iterator();
-
-T const T& operator*() const;
-T const T* operator->() const;
-T istream_iterator<T,charT,traits,Distance>& operator++();
-T istream_iterator<T,charT,traits,Distance> operator++(int);
- };
-
-T template <class T, class charT, class traits, class Distance>
- bool operator==(const istream_iterator<T,charT,traits,Distance>& x,
- const istream_iterator<T,charT,traits,Distance>& y);
-T template <class T, class charT, class traits, class Distance>
- bool operator!=(const istream_iterator<T,charT,traits,Distance>& x,
- const istream_iterator<T,charT,traits,Distance>& y);
-
-
- 24.5.2 Template class ostream_iterator [lib.ostream.iterator]
-
- template <class T, class charT = char, class traits = char_traits<charT> >
-X class ostream_iterator:
- public iterator<output_iterator_tag, void, void, void, void> {
- public:
-T typedef charT char_type;
-T typedef traits traits_type;
-T typedef basic_ostream<charT,traits> ostream_type;
-T ostream_iterator(ostream_type& s);
-T ostream_iterator(ostream_type& s, const charT* delimiter);
-T ostream_iterator(const ostream_iterator<T,charT,traits>& x);
-T ~ostream_iterator();
-T ostream_iterator<T,charT,traits>& operator=(const T& value);
-
-T ostream_iterator<T,charT,traits>& operator*();
-T ostream_iterator<T,charT,traits>& operator++();
-T ostream_iterator<T,charT,traits>& operator++(int);
- };
-
-
- 24.5.3 Template class [lib.istreambuf.iterator]
- istreambuf_iterator
-
- template<class charT, class traits = char_traits<charT> >
-X class istreambuf_iterator
- : public iterator<input_iterator_tag, charT,
- typename traits::off_type, charT*, charT&> {
- public:
-T typedef charT char_type;
-T typedef traits traits_type;
-T typedef typename traits::int_type int_type;
-T typedef basic_streambuf<charT,traits> streambuf_type;
-T typedef basic_istream<charT,traits> istream_type;
-T class proxy; // exposition only
-T istreambuf_iterator() throw();
-T istreambuf_iterator(istream_type& s) throw();
-T istreambuf_iterator(streambuf_type* s) throw();
-T istreambuf_iterator(const proxy& p) throw();
-T charT operator*() const;
-T istreambuf_iterator<charT,traits>& operator++();
-T proxy operator++(int);
-X bool equal(istreambuf_iterator& b);
- };
-
-T template <class charT, class traits>
- bool operator==(const istreambuf_iterator<charT,traits>& a,
- const istreambuf_iterator<charT,traits>& b);
-
-T template <class charT, class traits>
- bool operator!=(const istreambuf_iterator<charT,traits>& a,
- const istreambuf_iterator<charT,traits>& b);
-
- 24.5.3.1 Template class [lib.istreambuf.iterator::proxy]
- istreambuf_iterator::proxy
-
- template <class charT, class traits = char_traits<charT> >
-T class istreambuf_iterator<charT, traits>::proxy
- {
-T charT keep_;
-T basic_streambuf<charT,traits>* sbuf_;
-T proxy(charT c,
- basic_streambuf<charT,traits>* sbuf);
- : keep_(c), sbuf_(sbuf) {}
- public:
-T charT operator*() { return keep_; }
- };
-
-
-
- 24.5.4 Template class [lib.ostreambuf.iterator]
- ostreambuf_iterator
-
- template <class charT, class traits = char_traits<charT> >
-T class ostreambuf_iterator:
- public iterator<output_iterator_tag, void, void, void, void> {
- public:
-T typedef charT char_type;
-T typedef traits traits_type;
-T typedef basic_streambuf<charT,traits> streambuf_type;
-T typedef basic_ostream<charT,traits> ostream_type;
- public:
-T ostreambuf_iterator(ostream_type& s) throw();
-T ostreambuf_iterator(streambuf_type* s) throw();
-T ostreambuf_iterator& operator=(charT c);
-T ostreambuf_iterator& operator*();
-T ostreambuf_iterator& operator++();
-T ostreambuf_iterator& operator++(int);
-T bool failed() const throw();
- };
-
-
- Header <algorithm> synopsis
-
-
- // _lib.alg.nonmodifying_, non-modifying sequence operations:
-T template<class InputIterator, class Function>
- Function for_each(InputIterator first, InputIterator last, Function f);
-T template<class InputIterator, class T>
- InputIterator find(InputIterator first, InputIterator last,
- const T& value);
-T template<class InputIterator, class Predicate>
- InputIterator find_if(InputIterator first, InputIterator last,
- Predicate pred);
-T template<class ForwardIterator1, class ForwardIterator2>
- ForwardIterator1
- find_end(ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2);
-T template<class ForwardIterator1, class ForwardIterator2,
- class BinaryPredicate>
- ForwardIterator1
- find_end(ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2,
- BinaryPredicate pred);
-T template<class ForwardIterator1, class ForwardIterator2>
- ForwardIterator1
- find_first_of(ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2);
-T template<class ForwardIterator1, class ForwardIterator2,
- class BinaryPredicate>
- ForwardIterator1
- find_first_of(ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2,
- BinaryPredicate pred);
-T template<class ForwardIterator>
- ForwardIterator adjacent_find(ForwardIterator first,
- ForwardIterator last);
-T template<class ForwardIterator, class BinaryPredicate>
- ForwardIterator adjacent_find(ForwardIterator first,
- ForwardIterator last, BinaryPredicate pred);
-T template<class InputIterator, class T>
- typename iterator_traits<InputIterator>::difference_type
- count(InputIterator first, InputIterator last, const T& value);
-T template<class InputIterator, class Predicate>
- typename iterator_traits<InputIterator>::difference_type
- count_if(InputIterator first, InputIterator last, Predicate pred);
-T template<class InputIterator1, class InputIterator2>
- pair<InputIterator1, InputIterator2>
- mismatch(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2);
-T template<class InputIterator1, class InputIterator2, class BinaryPredicate>
- pair<InputIterator1, InputIterator2>
- mismatch(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, BinaryPredicate pred);
-
-T template<class InputIterator1, class InputIterator2>
- bool equal(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2);
-T template<class InputIterator1, class InputIterator2, class BinaryPredicate>
- bool equal(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, BinaryPredicate pred);
-T template<class ForwardIterator1, class ForwardIterator2>
- ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2);
-T template<class ForwardIterator1, class ForwardIterator2,
- class BinaryPredicate>
- ForwardIterator1 search(ForwardIterator1 first1, ForwardIterator1 last1,
- ForwardIterator2 first2, ForwardIterator2 last2,
- BinaryPredicate pred);
-T template<class ForwardIterator, class Size, class T>
- ForwardIterator search_n(ForwardIterator first, ForwardIterator last,
- Size count, const T& value);
-T template<class ForwardIterator, class Size, class T, class BinaryPredicate>
- ForwardIterator1 search_n(ForwardIterator first, ForwardIterator last,
- Size count, const T& value,
- BinaryPredicate pred);
- // _lib.alg.modifying.operations_, modifying sequence operations:
- // _lib.alg.copy_, copy:
-T template<class InputIterator, class OutputIterator>
- OutputIterator copy(InputIterator first, InputIterator last,
- OutputIterator result);
-T template<class BidirectionalIterator1, class BidirectionalIterator2>
- BidirectionalIterator2
- copy_backward(BidirectionalIterator1 first, BidirectionalIterator1 last,
- BidirectionalIterator2 result);
- // _lib.alg.swap_, swap:
-T template<class T> void swap(T& a, T& b);
-T template<class ForwardIterator1, class ForwardIterator2>
- ForwardIterator2 swap_ranges(ForwardIterator1 first1,
- ForwardIterator1 last1, ForwardIterator2 first2);
-T template<class ForwardIterator1, class ForwardIterator2>
- void iter_swap(ForwardIterator1 a, ForwardIterator2 b);
-T template<class InputIterator, class OutputIterator, class UnaryOperation>
- OutputIterator transform(InputIterator first, InputIterator last,
- OutputIterator result, UnaryOperation op);
-T template<class InputIterator1, class InputIterator2, class OutputIterator,
- class BinaryOperation>
- OutputIterator transform(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, OutputIterator result,
- BinaryOperation binary_op);
-
-T template<class ForwardIterator, class T>
- void replace(ForwardIterator first, ForwardIterator last,
- const T& old_value, const T& new_value);
-T template<class ForwardIterator, class Predicate, class T>
- void replace_if(ForwardIterator first, ForwardIterator last,
- Predicate pred, const T& new_value);
-T template<class InputIterator, class OutputIterator, class T>
- OutputIterator replace_copy(InputIterator first, InputIterator last,
- OutputIterator result,
- const T& old_value, const T& new_value);
-T template<class Iterator, class OutputIterator, class Predicate, class T>
- OutputIterator replace_copy_if(Iterator first, Iterator last,
- OutputIterator result,
- Predicate pred, const T& new_value);
-T template<class ForwardIterator, class T>
- void fill(ForwardIterator first, ForwardIterator last, const T& value);
-T template<class OutputIterator, class Size, class T>
- void fill_n(OutputIterator first, Size n, const T& value);
-T template<class ForwardIterator, class Generator>
- void generate(ForwardIterator first, ForwardIterator last, Generator gen);
-T template<class OutputIterator, class Size, class Generator>
- void generate_n(OutputIterator first, Size n, Generator gen);
-T template<class ForwardIterator, class T>
- ForwardIterator remove(ForwardIterator first, ForwardIterator last,
- const T& value);
-T template<class ForwardIterator, class Predicate>
- ForwardIterator remove_if(ForwardIterator first, ForwardIterator last,
- Predicate pred);
-T template<class InputIterator, class OutputIterator, class T>
- OutputIterator remove_copy(InputIterator first, InputIterator last,
- OutputIterator result, const T& value);
-T template<class InputIterator, class OutputIterator, class Predicate>
- OutputIterator remove_copy_if(InputIterator first, InputIterator last,
- OutputIterator result, Predicate pred);
-T template<class ForwardIterator>
- ForwardIterator unique(ForwardIterator first, ForwardIterator last);
-T template<class ForwardIterator, class BinaryPredicate>
- ForwardIterator unique(ForwardIterator first, ForwardIterator last,
- BinaryPredicate pred);
-T template<class InputIterator, class OutputIterator>
- OutputIterator unique_copy(InputIterator first, InputIterator last,
- OutputIterator result);
-T template<class InputIterator, class OutputIterator, class BinaryPredicate>
- OutputIterator unique_copy(InputIterator first, InputIterator last,
- OutputIterator result, BinaryPredicate pred);
-T template<class BidirectionalIterator>
- void reverse(BidirectionalIterator first, BidirectionalIterator last);
-T template<class BidirectionalIterator, class OutputIterator>
- OutputIterator reverse_copy(BidirectionalIterator first,
- BidirectionalIterator last,
- OutputIterator result);
-
-T template<class ForwardIterator>
- void rotate(ForwardIterator first, ForwardIterator middle,
- ForwardIterator last);
-T template<class ForwardIterator, class OutputIterator>
- OutputIterator rotate_copy(ForwardIterator first, ForwardIterator middle,
- ForwardIterator last, OutputIterator result);
-T template<class RandomAccessIterator>
- void random_shuffle(RandomAccessIterator first,
- RandomAccessIterator last);
-T template<class RandomAccessIterator, class RandomNumberGenerator>
- void random_shuffle(RandomAccessIterator first,
- RandomAccessIterator last,
- RandomNumberGenerator& rand);
- // _lib.alg.partitions_, partitions:
-T template<class BidirectionalIterator, class Predicate>
- BidirectionalIterator partition(BidirectionalIterator first,
- BidirectionalIterator last,
- Predicate pred);
-T template<class BidirectionalIterator, class Predicate>
- BidirectionalIterator stable_partition(BidirectionalIterator first,
- BidirectionalIterator last,
- Predicate pred);
- // _lib.alg.sorting_, sorting and related operations:
- // _lib.alg.sort_, sorting:
-T template<class RandomAccessIterator>
- void sort(RandomAccessIterator first, RandomAccessIterator last);
-T template<class RandomAccessIterator, class Compare>
- void sort(RandomAccessIterator first, RandomAccessIterator last,
- Compare comp);
-T template<class RandomAccessIterator>
- void stable_sort(RandomAccessIterator first, RandomAccessIterator last);
-T template<class RandomAccessIterator, class Compare>
- void stable_sort(RandomAccessIterator first, RandomAccessIterator last,
- Compare comp);
-T template<class RandomAccessIterator>
- void partial_sort(RandomAccessIterator first,
- RandomAccessIterator middle,
- RandomAccessIterator last);
-T template<class RandomAccessIterator, class Compare>
- void partial_sort(RandomAccessIterator first,
- RandomAccessIterator middle,
- RandomAccessIterator last, Compare comp);
-T template<class InputIterator, class RandomAccessIterator>
- RandomAccessIterator
- partial_sort_copy(InputIterator first, InputIterator last,
- RandomAccessIterator result_first,
- RandomAccessIterator result_last);
-T template<class InputIterator, class RandomAccessIterator, class Compare>
- RandomAccessIterator
- partial_sort_copy(InputIterator first, InputIterator last,
- RandomAccessIterator result_first,
- RandomAccessIterator result_last,
- Compare comp);
-
-T template<class RandomAccessIterator>
- void nth_element(RandomAccessIterator first, RandomAccessIterator nth,
- RandomAccessIterator last);
-T template<class RandomAccessIterator, class Compare>
- void nth_element(RandomAccessIterator first, RandomAccessIterator nth,
- RandomAccessIterator last, Compare comp);
- // _lib.alg.binary.search_, binary search:
-T template<class ForwardIterator, class T>
- ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last,
- const T& value);
-T template<class ForwardIterator, class T, class Compare>
- ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last,
- const T& value, Compare comp);
-T template<class ForwardIterator, class T>
- ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last,
- const T& value);
-T template<class ForwardIterator, class T, class Compare>
- ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last,
- const T& value, Compare comp);
-T template<class ForwardIterator, class T>
- pair<ForwardIterator, ForwardIterator>
- equal_range(ForwardIterator first, ForwardIterator last,
- const T& value);
-T template<class ForwardIterator, class T, class Compare>
- pair<ForwardIterator, ForwardIterator>
- equal_range(ForwardIterator first, ForwardIterator last,
- const T& value, Compare comp);
-T template<class ForwardIterator, class T>
- bool binary_search(ForwardIterator first, ForwardIterator last,
- const T& value);
-T template<class ForwardIterator, class T, class Compare>
- bool binary_search(ForwardIterator first, ForwardIterator last,
- const T& value, Compare comp);
- // _lib.alg.merge_, merge:
-T template<class InputIterator1, class InputIterator2, class OutputIterator>
- OutputIterator merge(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result);
-T template<class InputIterator1, class InputIterator2, class OutputIterator,
- class Compare>
- OutputIterator merge(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result, Compare comp);
-T template<class BidirectionalIterator>
- void inplace_merge(BidirectionalIterator first,
- BidirectionalIterator middle,
- BidirectionalIterator last);
-T template<class BidirectionalIterator, class Compare>
- void inplace_merge(BidirectionalIterator first,
- BidirectionalIterator middle,
- BidirectionalIterator last, Compare comp);
-
- // _lib.alg.set.operations_, set operations:
-T template<class InputIterator1, class InputIterator2>
- bool includes(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2);
-T template<class InputIterator1, class InputIterator2, class Compare>
- bool includes(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2, Compare comp);
-T template<class InputIterator1, class InputIterator2, class OutputIterator>
- OutputIterator set_union(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result);
-T template<class InputIterator1, class InputIterator2, class OutputIterator,
- class Compare>
- OutputIterator set_union(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result, Compare comp);
-T template<class InputIterator1, class InputIterator2, class OutputIterator>
- OutputIterator set_intersection
- (InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result);
-T template<class InputIterator1, class InputIterator2, class OutputIterator,
- class Compare>
- OutputIterator set_intersection
- (InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result, Compare comp);
-T template<class InputIterator1, class InputIterator2, class OutputIterator>
- OutputIterator set_difference
- (InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result);
-T template<class InputIterator1, class InputIterator2, class OutputIterator,
- class Compare>
- OutputIterator set_difference(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result, Compare comp);
-T template<class InputIterator1, class InputIterator2, class OutputIterator>
- OutputIterator
- set_symmetric_difference(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result);
-T template<class InputIterator1, class InputIterator2, class OutputIterator,
- class Compare>
- OutputIterator
- set_symmetric_difference(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- OutputIterator result, Compare comp);
- // _lib.alg.heap.operations_, heap operations:
-T template<class RandomAccessIterator>
- void push_heap(RandomAccessIterator first, RandomAccessIterator last);
-T template<class RandomAccessIterator, class Compare>
- void push_heap(RandomAccessIterator first, RandomAccessIterator last,
- Compare comp);
-
-T template<class RandomAccessIterator>
- void pop_heap(RandomAccessIterator first, RandomAccessIterator last);
-T template<class RandomAccessIterator, class Compare>
- void pop_heap(RandomAccessIterator first, RandomAccessIterator last,
- Compare comp);
-T template<class RandomAccessIterator>
- void make_heap(RandomAccessIterator first, RandomAccessIterator last);
-T template<class RandomAccessIterator, class Compare>
- void make_heap(RandomAccessIterator first, RandomAccessIterator last,
- Compare comp);
-T template<class RandomAccessIterator>
- void sort_heap(RandomAccessIterator first, RandomAccessIterator last);
-T template<class RandomAccessIterator, class Compare>
- void sort_heap(RandomAccessIterator first, RandomAccessIterator last,
- Compare comp);
- // _lib.alg.min.max_, minimum and maximum:
-T template<class T> const T& min(const T& a, const T& b);
-T template<class T, class Compare>
- const T& min(const T& a, const T& b, Compare comp);
-T template<class T> const T& max(const T& a, const T& b);
-T template<class T, class Compare>
- const T& max(const T& a, const T& b, Compare comp);
-T template<class ForwardIterator>
- ForwardIterator min_element(ForwardIterator first, ForwardIterator last);
-T template<class ForwardIterator, class Compare>
- ForwardIterator min_element(ForwardIterator first, ForwardIterator last,
- Compare comp);
-T template<class ForwardIterator>
- ForwardIterator max_element(ForwardIterator first, ForwardIterator last);
-T template<class ForwardIterator, class Compare>
- ForwardIterator max_element(ForwardIterator first, ForwardIterator last,
- Compare comp);
-T template<class InputIterator1, class InputIterator2>
- bool lexicographical_compare
- (InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2);
-T template<class InputIterator1, class InputIterator2, class Compare>
- bool lexicographical_compare
- (InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, InputIterator2 last2,
- Compare comp);
-
- // _lib.alg.permutation.generators_, permutations
-T template<class BidirectionalIterator>
- bool next_permutation(BidirectionalIterator first,
- BidirectionalIterator last);
-T template<class BidirectionalIterator, class Compare>
- bool next_permutation(BidirectionalIterator first,
- BidirectionalIterator last, Compare comp);
-T template<class BidirectionalIterator>
- bool prev_permutation(BidirectionalIterator first,
- BidirectionalIterator last);
-T template<class BidirectionalIterator, class Compare>
- bool prev_permutation(BidirectionalIterator first,
- BidirectionalIterator last, Compare comp);
-
-
- 25.4 C library algorithms [lib.alg.c.library]
-
- 1 Header <cstdlib> (partial, Table 2):
-
- Table 2--Header <cstdlib> synopsis
-
- Functions: bsearch qsort
-
-
-X extern "C" void *bsearch(const void *key, const void *base,
- size_t nmemb, size_t size,
- int (*compar)(const void *, const void *));
-X extern "C++" void *bsearch(const void *key, const void *base,
- size_t nmemb, size_t size,
- int (*compar)(const void *, const void *));
-
-X extern "C" void qsort(void* base, size_t nmemb, size_t size,
- int (*compar)(const void*, const void*));
-X extern "C++" void qsort(void* base, size_t nmemb, size_t size,
- int (*compar)(const void*, const void*));
-
-
-
- 26.2 Complex numbers [lib.complex.numbers]
-
-
- 26.2.1 Header <complex> synopsis [lib.complex.synopsis]
-
-T template<class T> class complex;
-T template<> class complex<float>;
-T template<> class complex<double>;
-T template<> class complex<long double>;
- // _lib.complex.ops_ operators:
-T template<class T>
- complex<T> operator+(const complex<T>&, const complex<T>&);
-T template<class T> complex<T> operator+(const complex<T>&, const T&);
-T template<class T> complex<T> operator+(const T&, const complex<T>&);
-T template<class T> complex<T> operator-
- (const complex<T>&, const complex<T>&);
-T template<class T> complex<T> operator-(const complex<T>&, const T&);
-T template<class T> complex<T> operator-(const T&, const complex<T>&);
-T template<class T> complex<T> operator*
- (const complex<T>&, const complex<T>&);
-T template<class T> complex<T> operator*(const complex<T>&, const T&);
-T template<class T> complex<T> operator*(const T&, const complex<T>&);
-T template<class T> complex<T> operator/
- (const complex<T>&, const complex<T>&);
-T template<class T> complex<T> operator/(const complex<T>&, const T&);
-T template<class T> complex<T> operator/(const T&, const complex<T>&);
-T template<class T> complex<T> operator+(const complex<T>&);
-T template<class T> complex<T> operator-(const complex<T>&);
-T template<class T> bool operator==
- (const complex<T>&, const complex<T>&);
-T template<class T> bool operator==(const complex<T>&, const T&);
-T template<class T> bool operator==(const T&, const complex<T>&);
-T template<class T> bool operator!=(const complex<T>&, const complex<T>&);
-T template<class T> bool operator!=(const complex<T>&, const T&);
-T template<class T> bool operator!=(const T&, const complex<T>&);
-T template<class T, class charT, class traits>
- basic_istream<charT, traits>&
- operator>>(basic_istream<charT, traits>&, complex<T>&);
-
-T template<class T, class charT, class traits>
- basic_ostream<charT, traits>&
- operator<<(basic_ostream<charT, traits>&, const complex<T>&);
- // _lib.complex.value.ops_ values:
-T template<class T> T real(const complex<T>&);
-T template<class T> T imag(const complex<T>&);
-
-T template<class T> T abs(const complex<T>&);
-T template<class T> T arg(const complex<T>&);
-T template<class T> T norm(const complex<T>&);
-T template<class T> complex<T> conj(const complex<T>&);
-T template<class T> complex<T> polar(const T&, const T&);
- // _lib.complex.transcendentals_ transcendentals:
-T template<class T> complex<T> cos (const complex<T>&);
-T template<class T> complex<T> cosh (const complex<T>&);
-T template<class T> complex<T> exp (const complex<T>&);
-T template<class T> complex<T> log (const complex<T>&);
-T template<class T> complex<T> log10(const complex<T>&);
-T template<class T> complex<T> pow(const complex<T>&, int);
-T template<class T> complex<T> pow(const complex<T>&, const T&);
-T template<class T> complex<T> pow(const complex<T>&, const complex<T>&);
-T template<class T> complex<T> pow(const T&, const complex<T>&);
-T template<class T> complex<T> sin (const complex<T>&);
-T template<class T> complex<T> sinh (const complex<T>&);
-T template<class T> complex<T> sqrt (const complex<T>&);
-T template<class T> complex<T> tan (const complex<T>&);
-T template<class T> complex<T> tanh (const complex<T>&);
- }
-
- 26.2.2 Template class complex [lib.complex]
-
- template<class T>
-T class complex {
- public:
-T typedef T value_type;
-
-T complex(const T& re = T(), const T& im = T());
-T complex(const complex&);
-T template<class X> complex(const complex<X>&);
-
-T T real() const;
-T T imag() const;
-
-T complex<T>& operator= (const T&);
-T complex<T>& operator+=(const T&);
-T complex<T>& operator-=(const T&);
-T complex<T>& operator*=(const T&);
-T complex<T>& operator/=(const T&);
-
-T complex& operator=(const complex&);
-T template<class X> complex<T>& operator= (const complex<X>&);
-T template<class X> complex<T>& operator+=(const complex<X>&);
-T template<class X> complex<T>& operator-=(const complex<X>&);
-T template<class X> complex<T>& operator*=(const complex<X>&);
-T template<class X> complex<T>& operator/=(const complex<X>&);
- };
-
-T template<class T> complex<T> operator+
- (const complex<T>&, const complex<T>&);
-T template<class T> complex<T> operator+(const complex<T>&, const T&);
-T template<class T> complex<T> operator+(const T&, const complex<T>&);
-
-T template<class T> complex<T> operator-
- (const complex<T>&, const complex<T>&);
-T template<class T> complex<T> operator-(const complex<T>&, const T&);
-T template<class T> complex<T> operator-(const T&, const complex<T>&);
-
-T template<class T> complex<T> operator*
- (const complex<T>&, const complex<T>&);
-T template<class T> complex<T> operator*(const complex<T>&, const T&);
-T template<class T> complex<T> operator*(const T&, const complex<T>&);
-
-T template<class T> complex<T> operator/
- (const complex<T>&, const complex<T>&);
-T template<class T> complex<T> operator/(const complex<T>&, const T&);
-T template<class T> complex<T> operator/(const T&, const complex<T>&);
-
-T template<class T> complex<T> operator+(const complex<T>&);
-T template<class T> complex<T> operator-(const complex<T>&);
-
-T template<class T> bool operator==(const complex<T>&, const complex<T>&);
-T template<class T> bool operator==(const complex<T>&, const T&);
-T template<class T> bool operator==(const T&, const complex<T>&);
-
-T template<class T> bool operator!=(const complex<T>&, const complex<T>&);
-T template<class T> bool operator!=(const complex<T>&, const T&);
-T template<class T> bool operator!=(const T&, const complex<T>&);
-
-T template<class T, class charT, class traits>
- basic_istream<charT, traits>&
- operator>>(basic_istream<charT, traits>&, complex<T>&);
-
-T template<class T, class charT, class traits>
- basic_ostream<charT, traits>&
- operator<<(basic_ostream<charT, traits>&, const complex<T>&);
-
-
- 26.2.3 complex specializations [lib.complex.special]
-
-T template<> class complex<float> {
- public:
-T typedef float value_type;
-
-T complex(float re = 0.0f, float im = 0.0f);
-T explicit complex(const complex<double>&);
-T explicit complex(const complex<long double>&);
-T float real() const;
-T float imag() const;
-
-T complex<float>& operator= (float);
-T complex<float>& operator+=(float);
-T complex<float>& operator-=(float);
-T complex<float>& operator*=(float);
-T complex<float>& operator/=(float);
-
-T complex<float>& operator=(const complex<float>&);
-T template<class X> complex<float>& operator= (const complex<X>&);
-T template<class X> complex<float>& operator+=(const complex<X>&);
-T template<class X> complex<float>& operator-=(const complex<X>&);
-T template<class X> complex<float>& operator*=(const complex<X>&);
-T template<class X> complex<float>& operator/=(const complex<X>&);
- };
-T template<> class complex<double> {
- public:
-T typedef double value_type;
-
-T complex(double re = 0.0, double im = 0.0);
-T complex(const complex<float>&);
-T explicit complex(const complex<long double>&);
-T double real() const;
-T double imag() const;
-
-T complex<double>& operator= (double);
-T complex<double>& operator+=(double);
-T complex<double>& operator-=(double);
-T complex<double>& operator*=(double);
-T complex<double>& operator/=(double);
-
-T complex<double>& operator=(const complex<double>&);
-T template<class X> complex<double>& operator= (const complex<X>&);
-T template<class X> complex<double>& operator+=(const complex<X>&);
-T template<class X> complex<double>& operator-=(const complex<X>&);
-T template<class X> complex<double>& operator*=(const complex<X>&);
-T template<class X> complex<double>& operator/=(const complex<X>&);
- };
-
-T template<> class complex<long double> {
- public:
-T typedef long double value_type;
-
-T complex(long double re = 0.0L, long double im = 0.0L);
-T complex(const complex<float>&);
-T complex(const complex<double>&);
-T long double real() const;
-T long double imag() const;
-
-T complex<long double>& operator=(const complex<long double>&);
-T complex<long double>& operator= (long double);
-T complex<long double>& operator+=(long double);
-T complex<long double>& operator-=(long double);
-T complex<long double>& operator*=(long double);
-T complex<long double>& operator/=(long double);
-
-T template<class X> complex<long double>& operator= (const complex<X>&);
-T template<class X> complex<long double>& operator+=(const complex<X>&);
-T template<class X> complex<long double>& operator-=(const complex<X>&);
-T template<class X> complex<long double>& operator*=(const complex<X>&);
-T template<class X> complex<long double>& operator/=(const complex<X>&);
- };
-
- 26.3 Numeric arrays [lib.numarray]
-
- 26.3.1 Header <valarray> synopsis [lib.valarray.synopsis]
-
-T template<class T> class valarray; // An array of type T
-T class slice;
-T template<class T> class slice_array;
-T class gslice;
-T template<class T> class gslice_array;
-T template<class T> class mask_array; // a masked array
-T template<class T> class indirect_array; // an indirected array
-
-T template<class T> valarray<T> operator*
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<T> operator* (const valarray<T>&, const T&);
-T template<class T> valarray<T> operator* (const T&, const valarray<T>&);
-T template<class T> valarray<T> operator/
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<T> operator/ (const valarray<T>&, const T&);
-T template<class T> valarray<T> operator/ (const T&, const valarray<T>&);
-T template<class T> valarray<T> operator%
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<T> operator% (const valarray<T>&, const T&);
-T template<class T> valarray<T> operator% (const T&, const valarray<T>&);
-T template<class T> valarray<T> operator+
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<T> operator+ (const valarray<T>&, const T&);
-T template<class T> valarray<T> operator+ (const T&, const valarray<T>&);
-T template<class T> valarray<T> operator-
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<T> operator- (const valarray<T>&, const T&);
-T template<class T> valarray<T> operator- (const T&, const valarray<T>&);
-T template<class T> valarray<T> operator^
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<T> operator^ (const valarray<T>&, const T&);
-T template<class T> valarray<T> operator^ (const T&, const valarray<T>&);
-T template<class T> valarray<T> operator&
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<T> operator& (const valarray<T>&, const T&);
-T template<class T> valarray<T> operator& (const T&, const valarray<T>&);
-T template<class T> valarray<T> operator|
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<T> operator| (const valarray<T>&, const T&);
-T template<class T> valarray<T> operator| (const T&, const valarray<T>&);
-T template<class T> valarray<T> operator<<
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<T> operator<<(const valarray<T>&, const T&);
-T template<class T> valarray<T> operator<<(const T&, const valarray<T>&);
-T template<class T> valarray<T> operator>>
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<T> operator>>(const valarray<T>&, const T&);
-T template<class T> valarray<T> operator>>(const T&, const valarray<T>&);
-T template<class T> valarray<bool> operator&&
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<bool> operator&&(const valarray<T>&, const T&);
-T template<class T> valarray<bool> operator&&(const T&, const valarray<T>&);
-T template<class T> valarray<bool> operator||
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<bool> operator||(const valarray<T>&, const T&);
-T template<class T> valarray<bool> operator||(const T&, const valarray<T>&);
-
-T template<class T>
- valarray<bool> operator==(const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<bool> operator==(const valarray<T>&, const T&);
-T template<class T> valarray<bool> operator==(const T&, const valarray<T>&);
-T template<class T>
- valarray<bool> operator!=(const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<bool> operator!=(const valarray<T>&, const T&);
-T template<class T> valarray<bool> operator!=(const T&, const valarray<T>&);
-T template<class T>
- valarray<bool> operator< (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<bool> operator< (const valarray<T>&, const T&);
-T template<class T> valarray<bool> operator< (const T&, const valarray<T>&);
-T template<class T>
- valarray<bool> operator> (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<bool> operator> (const valarray<T>&, const T&);
-T template<class T> valarray<bool> operator> (const T&, const valarray<T>&);
-T template<class T>
- valarray<bool> operator<=(const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<bool> operator<=(const valarray<T>&, const T&);
-T template<class T> valarray<bool> operator<=(const T&, const valarray<T>&);
-T template<class T>
- valarray<bool> operator>=(const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<bool> operator>=(const valarray<T>&, const T&);
-T template<class T> valarray<bool> operator>=(const T&, const valarray<T>&);
-T template<class T> valarray<T> abs (const valarray<T>&);
-T template<class T> valarray<T> acos (const valarray<T>&);
-T template<class T> valarray<T> asin (const valarray<T>&);
-T template<class T> valarray<T> atan (const valarray<T>&);
-T template<class T> valarray<T> atan2
- (const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<T> atan2(const valarray<T>&, const T&);
-T template<class T> valarray<T> atan2(const T&, const valarray<T>&);
-T template<class T> valarray<T> cos (const valarray<T>&);
-T template<class T> valarray<T> cosh (const valarray<T>&);
-T template<class T> valarray<T> exp (const valarray<T>&);
-T template<class T> valarray<T> log (const valarray<T>&);
-T template<class T> valarray<T> log10(const valarray<T>&);
-T template<class T> valarray<T> pow(const valarray<T>&, const valarray<T>&);
-T template<class T> valarray<T> pow(const valarray<T>&, const T&);
-T template<class T> valarray<T> pow(const T&, const valarray<T>&);
-T template<class T> valarray<T> sin (const valarray<T>&);
-T template<class T> valarray<T> sinh (const valarray<T>&);
-T template<class T> valarray<T> sqrt (const valarray<T>&);
-T template<class T> valarray<T> tan (const valarray<T>&);
-T template<class T> valarray<T> tanh (const valarray<T>&);
- }
-
-
- 26.3.2 Template class valarray [lib.template.valarray]
-
-T template<class T> class valarray {
- public:
-T typedef T value_type;
-
- // _lib.valarray.cons_ construct/destroy:
-T valarray();
-T explicit valarray(size_t);
-T valarray(const T&, size_t);
-T valarray(const T*, size_t);
-T valarray(const valarray&);
-T valarray(const slice_array<T>&);
-T valarray(const gslice_array<T>&);
-T valarray(const mask_array<T>&);
-T valarray(const indirect_array<T>&);
-T ~valarray();
-
- // _lib.valarray.assign_ assignment:
-T valarray<T>& operator=(const valarray<T>&);
-T valarray<T>& operator=(const T&);
-T valarray<T>& operator=(const slice_array<T>&);
-T valarray<T>& operator=(const gslice_array<T>&);
-T valarray<T>& operator=(const mask_array<T>&);
-T valarray<T>& operator=(const indirect_array<T>&);
- // _lib.valarray.access_ element access:
-T T operator[](size_t) const;
-T T& operator[](size_t);
- // _lib.valarray.sub_ subset operations:
-T valarray<T> operator[](slice) const;
-T slice_array<T> operator[](slice);
-T valarray<T> operator[](const gslice&) const;
-T gslice_array<T> operator[](const gslice&);
-T valarray<T> operator[](const valarray<bool>&) const;
-T mask_array<T> operator[](const valarray<bool>&);
-T valarray<T> operator[](const valarray<size_t>&) const;
-T indirect_array<T> operator[](const valarray<size_t>&);
- // _lib.valarray.unary_ unary operators:
-T valarray<T> operator+() const;
-T valarray<T> operator-() const;
-T valarray<T> operator~() const;
-T valarray<T> operator!() const;
- // _lib.valarray.cassign_ computed assignment:
-T valarray<T>& operator*= (const T&);
-T valarray<T>& operator/= (const T&);
-T valarray<T>& operator%= (const T&);
-T valarray<T>& operator+= (const T&);
-T valarray<T>& operator-= (const T&);
-T valarray<T>& operator^= (const T&);
-T valarray<T>& operator&= (const T&);
-T valarray<T>& operator|= (const T&);
-T valarray<T>& operator<<=(const T&);
-T valarray<T>& operator>>=(const T&);
-T valarray<T>& operator*= (const valarray<T>&);
-T valarray<T>& operator/= (const valarray<T>&);
-T valarray<T>& operator%= (const valarray<T>&);
-T valarray<T>& operator+= (const valarray<T>&);
-T valarray<T>& operator-= (const valarray<T>&);
-T valarray<T>& operator^= (const valarray<T>&);
-T valarray<T>& operator|= (const valarray<T>&);
-T valarray<T>& operator&= (const valarray<T>&);
-T valarray<T>& operator<<=(const valarray<T>&);
-T valarray<T>& operator>>=(const valarray<T>&);
- // _lib.valarray.members_ member functions:
-T size_t size() const;
-T T sum() const;
-T T min() const;
-T T max() const;
-
-T valarray<T> shift (int) const;
-T valarray<T> cshift(int) const;
-T valarray<T> apply(T func(T)) const;
-T valarray<T> apply(T func(const T&)) const;
-T void resize(size_t sz, T c = T());
- };
- }
-
-
-
- 26.3.4 Class slice [lib.class.slice]
-
-T class slice {
- public:
-T slice();
-T slice(size_t, size_t, size_t);
-
-T size_t start() const;
-T size_t size() const;
-T size_t stride() const;
- };
- }
-
-
-
- 26.3.5 Template class slice_array [lib.template.slice.array]
-
-T template <class T> class slice_array {
- public:
-T typedef T value_type;
-
-T void operator= (const valarray<T>&) const;
-T void operator*= (const valarray<T>&) const;
-T void operator/= (const valarray<T>&) const;
-T void operator%= (const valarray<T>&) const;
-T void operator+= (const valarray<T>&) const;
-T void operator-= (const valarray<T>&) const;
-T void operator^= (const valarray<T>&) const;
-T void operator&= (const valarray<T>&) const;
-T void operator|= (const valarray<T>&) const;
-T void operator<<=(const valarray<T>&) const;
-T void operator>>=(const valarray<T>&) const;
-T void operator=(const T&);
-T ~slice_array();
- private:
-T slice_array();
-T slice_array(const slice_array&);
-T slice_array& operator=(const slice_array&);
- };
- }
-
-
-
- 26.3.6 The gslice class [lib.class.gslice]
-
-T class gslice {
- public:
-T gslice();
-T gslice(size_t s, const valarray<size_t>& l, const valarray<size_t>& d);
-
-T size_t start() const;
-T valarray<size_t> size() const;
-T valarray<size_t> stride() const;
- };
-
-
- 26.3.7 Template class gslice_array [lib.template.gslice.array]
-
-T template <class T> class gslice_array {
- public:
-T typedef T value_type;
-
-T void operator= (const valarray<T>&) const;
-T void operator*= (const valarray<T>&) const;
-T void operator/= (const valarray<T>&) const;
-T void operator%= (const valarray<T>&) const;
-T void operator+= (const valarray<T>&) const;
-T void operator-= (const valarray<T>&) const;
-T void operator^= (const valarray<T>&) const;
-T void operator&= (const valarray<T>&) const;
-T void operator|= (const valarray<T>&) const;
-T void operator<<=(const valarray<T>&) const;
-T void operator>>=(const valarray<T>&) const;
-T void operator=(const T&);
-T ~gslice_array();
- private:
-T gslice_array();
-T gslice_array(const gslice_array&);
-T gslice_array& operator=(const gslice_array&);
- };
-
-
- 26.3.8 Template class mask_array [lib.template.mask.array]
-
-T template <class T> class mask_array {
- public:
-T typedef T value_type;
-
-T void operator= (const valarray<T>&) const;
-T void operator*= (const valarray<T>&) const;
-T void operator/= (const valarray<T>&) const;
-T void operator%= (const valarray<T>&) const;
-T void operator+= (const valarray<T>&) const;
-T void operator-= (const valarray<T>&) const;
-T void operator^= (const valarray<T>&) const;
-T void operator&= (const valarray<T>&) const;
-T void operator|= (const valarray<T>&) const;
-T void operator<<=(const valarray<T>&) const;
-T void operator>>=(const valarray<T>&) const;
-T void operator=(const T&);
-T ~mask_array();
- private:
-T mask_array();
-T mask_array(const mask_array&);
-T mask_array& operator=(const mask_array&);
- // remainder implementation defined
- };
-
-
- 26.3.9 Template class [lib.template.indirect.array]
- indirect_array
-
-T template <class T> class indirect_array {
- public:
-T typedef T value_type;
-
-T void operator= (const valarray<T>&) const;
-T void operator*= (const valarray<T>&) const;
-T void operator/= (const valarray<T>&) const;
-T void operator%= (const valarray<T>&) const;
-T void operator+= (const valarray<T>&) const;
-T void operator-= (const valarray<T>&) const;
-T void operator^= (const valarray<T>&) const;
-T void operator&= (const valarray<T>&) const;
-T void operator|= (const valarray<T>&) const;
-T void operator<<=(const valarray<T>&) const;
-T void operator>>=(const valarray<T>&) const;
-T void operator=(const T&);
-T ~indirect_array();
- private:
-T indirect_array();
-T indirect_array(const indirect_array&);
-T indirect_array& operator=(const indirect_array&);
- // remainder implementation defined
- };
-
- 26.4 Generalized numeric operations [lib.numeric.ops]
-
- Header <numeric> synopsis
-
-T template <class InputIterator, class T>
- T accumulate(InputIterator first, InputIterator last, T init);
-
-T template <class InputIterator, class T, class BinaryOperation>
- T accumulate(InputIterator first, InputIterator last, T init,
- BinaryOperation binary_op);
-
-T template <class InputIterator1, class InputIterator2, class T>
- T inner_product(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, T init);
-
-T template <class InputIterator1, class InputIterator2, class T,
- class BinaryOperation1, class BinaryOperation2>
- T inner_product(InputIterator1 first1, InputIterator1 last1,
- InputIterator2 first2, T init,
- BinaryOperation1 binary_op1,
- BinaryOperation2 binary_op2);
-
-T template <class InputIterator, class OutputIterator>
- OutputIterator partial_sum(InputIterator first,
- InputIterator last,
- OutputIterator result);
-
-T template <class InputIterator, class OutputIterator,
- class BinaryOperation>
- OutputIterator partial_sum(InputIterator first,
- InputIterator last,
- OutputIterator result,
- BinaryOperation binary_op);
-
-T template <class InputIterator, class OutputIterator>
- OutputIterator adjacent_difference(InputIterator first,
- InputIterator last,
- OutputIterator result);
-
-T template <class InputIterator, class OutputIterator,
- class BinaryOperation>
- OutputIterator adjacent_difference(InputIterator first,
- InputIterator last,
- OutputIterator result,
- BinaryOperation binary_op);
-
-
- 26.5 C Library [lib.c.math]
-
- Table 2--Header <cmath> synopsis
-X Macro: HUGE_VAL
- Functions:
-X acos cos fmod modf tan
-X asin cosh frexp pow tanh
-X atan exp ldexp sin
-X atan2 fabs log sinh
-X ceil floor log10 sqrt
-
- Table 3--Header <cstdlib> synopsis
-X Macros: RAND_MAX
-X Types: div_t ldiv_t
- Functions:
-X abs labs srand
-X div ldiv rand
-
-X long abs(long); // labs()
-X ldiv_t div(long, long); // ldiv()
-
-X float abs (float);
-X float acos (float);
-X float asin (float);
-X float atan (float);
-X float atan2(float, float);
-X float ceil (float);
-X float cos (float);
-X float cosh (float);
-X float exp (float);
-X float fabs (float);
-X float floor(float);
-X float fmod (float, float);
-X float frexp(float, int*);
-X float ldexp(float, int);
-X float log (float);
-X float log10(float);
-X float modf (float, float*);
-X float pow (float, float);
-X float pow (float, int);
-X float sin (float);
-X float sinh (float);
-X float sqrt (float);
-X float tan (float);
-X float tanh (float);
-
-X double abs(double); // fabs()
-X double pow(double, int);
-
-X long double abs (long double);
-X long double acos (long double);
-X long double asin (long double);
-X long double atan (long double);
-X long double atan2(long double, long double);
-X long double ceil (long double);
-X long double cos (long double);
-X long double cosh (long double);
-X long double exp (long double);
-X long double fabs (long double);
-X long double floor(long double);
-X long double fmod (long double, long double);
-X long double frexp(long double, int*);
-X long double ldexp(long double, int);
-X long double log (long double);
-X long double log10(long double);
-X long double modf (long double, long double*);
-X long double pow (long double, long double);
-X long double pow (long double, int);
-X long double sin (long double);
-X long double sinh (long double);
-X long double sqrt (long double);
-X long double tan (long double);
-X long double tanh (long double);
-
- Header <iosfwd> synopsis
-
-X template<class charT> class char_traits;
-X template<> class char_traits<char>;
-X template<> class char_traits<wchar_t>;
-X template<class T> class allocator;
-X template <class charT, class traits = char_traits<charT> >
- class basic_ios;
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_streambuf;
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_istream;
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_ostream;
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_iostream;
-
-X template <class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
- class basic_stringbuf;
-
-X template <class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
- class basic_istringstream;
-
-X template <class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
- class basic_ostringstream;
-
-X template <class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
- class basic_stringstream;
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_filebuf;
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_ifstream;
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_ofstream;
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_fstream;
-X template <class charT, class traits = char_traits<charT> >
- class istreambuf_iterator;
-
-X template <class charT, class traits = char_traits<charT> >
- class ostreambuf_iterator;
-X typedef basic_ios<char> ios;
-X typedef basic_ios<wchar_t> wios;
-X typedef basic_streambuf<char> streambuf;
-X typedef basic_istream<char> istream;
-X typedef basic_ostream<char> ostream;
-X typedef basic_iostream<char> iostream;
-X typedef basic_stringbuf<char> stringbuf;
-X typedef basic_istringstream<char> istringstream;
-X typedef basic_ostringstream<char> ostringstream;
-X typedef basic_stringstream<char> stringstream;
-X typedef basic_filebuf<char> filebuf;
-X typedef basic_ifstream<char> ifstream;
-X typedef basic_ofstream<char> ofstream;
-X typedef basic_fstream<char> fstream;
-X typedef basic_streambuf<wchar_t> wstreambuf;
-X typedef basic_istream<wchar_t> wistream;
-X typedef basic_ostream<wchar_t> wostream;
-X typedef basic_iostream<wchar_t> wiostream;
-X typedef basic_stringbuf<wchar_t> wstringbuf;
-X typedef basic_istringstream<wchar_t> wistringstream;
-X typedef basic_ostringstream<wchar_t> wostringstream;
-X typedef basic_stringstream<wchar_t> wstringstream;
-
-X typedef basic_filebuf<wchar_t> wfilebuf;
-X typedef basic_ifstream<wchar_t> wifstream;
-X typedef basic_ofstream<wchar_t> wofstream;
-X typedef basic_fstream<wchar_t> wfstream;
-X template <class state> class fpos;
-X typedef fpos<char_traits<char>::state_type> streampos;
-X typedef fpos<char_traits<wchar_t>::state_type> wstreampos;
-
- 27.3 Standard iostream objects [lib.iostream.objects]
-
- Header <iostream> synopsis
-
-T [must also include <istream> and <ostream>]
-T extern istream cin;
-T extern ostream cout;
-T extern ostream cerr;
-T extern ostream clog;
-
-T extern wistream wcin;
-T extern wostream wcout;
-T extern wostream wcerr;
-T extern wostream wclog;
-
- 27.4 Iostreams base classes [lib.iostreams.base]
-
- Header <ios> synopsis
-
- #include <iosfwd>
-
-T typedef OFF_T streamoff;
-T typedef SZ_T streamsize;
-T template <class stateT> class fpos;
-
- class ios_base;
- template <class charT, class traits = char_traits<charT> >
- class basic_ios;
- // _lib.std.ios.manip_, manipulators:
-T ios_base& boolalpha (ios_base& str);
-T ios_base& noboolalpha(ios_base& str);
-T ios_base& showbase (ios_base& str);
-T ios_base& noshowbase (ios_base& str);
-T ios_base& showpoint (ios_base& str);
-T ios_base& noshowpoint(ios_base& str);
-T ios_base& showpos (ios_base& str);
-T ios_base& noshowpos (ios_base& str);
-T ios_base& skipws (ios_base& str);
-T ios_base& noskipws (ios_base& str);
-T ios_base& nouppercase(ios_base& str);
-T ios_base& uppercase (ios_base& str);
-M ios_base& unitbuf (ios_base& str);
-M ios_base& nounitbuf (ios_base& str);
- // _lib.adjustfield.manip_ adjustfield:
-T ios_base& internal (ios_base& str);
-T ios_base& left (ios_base& str);
-T ios_base& right (ios_base& str);
- // _lib.basefield.manip_ basefield:
-T ios_base& dec (ios_base& str);
-T ios_base& hex (ios_base& str);
-T ios_base& oct (ios_base& str);
-
- // _lib.floatfield.manip_ floatfield:
-T ios_base& fixed (ios_base& str);
-T ios_base& scientific (ios_base& str);
-
-
- 27.4.2 Class ios_base [lib.ios.base]
-
-T class ios_base {
- public:
- class failure;
-T typedef T1 fmtflags;
-T static const fmtflags boolalpha;
-T static const fmtflags dec;
-T static const fmtflags fixed;
-T static const fmtflags hex;
-T static const fmtflags internal;
-T static const fmtflags left;
-T static const fmtflags oct;
-T static const fmtflags right;
-T static const fmtflags scientific;
-T static const fmtflags showbase;
-T static const fmtflags showpoint;
-T static const fmtflags showpos;
-T static const fmtflags skipws;
-X static const fmtflags unitbuf;
-T static const fmtflags uppercase;
-T static const fmtflags adjustfield;
-T static const fmtflags basefield;
-T static const fmtflags floatfield;
-
- typedef T2 iostate;
-T static const iostate badbit;
-T static const iostate eofbit;
-T static const iostate failbit;
-T static const iostate goodbit;
-T typedef T3 openmode;
-T static const openmode app;
-T static const openmode ate;
-T static const openmode binary;
-T static const openmode in;
-T static const openmode out;
-T static const openmode trunc;
-T typedef T4 seekdir;
-T static const seekdir beg;
-T static const seekdir cur;
-T static const seekdir end;
-T class Init;
- // _lib.fmtflags.state_ fmtflags state:
-T fmtflags flags() const;
-T fmtflags flags(fmtflags fmtfl);
-T fmtflags setf(fmtflags fmtfl);
-T fmtflags setf(fmtflags fmtfl, fmtflags mask);
-T void unsetf(fmtflags mask);
-T streamsize precision() const;
-T streamsize precision(streamsize prec);
-T streamsize width() const;
-T streamsize width(streamsize wide);
- // _lib.ios.base.locales_ locales:
-T locale imbue(const locale& loc);
-T locale getloc() const;
- // _lib.ios.base.storage_ storage:
-T static int xalloc();
-T long& iword(int index);
-T void*& pword(int index);
- // destructor
-T virtual ~ios_base();
- // _lib.ios.base.callback_ callbacks;
-T enum event { erase_event, imbue_event, copyfmt_event };
-T typedef void (*event_callback)(event, ios_base&, int index);
-T void register_callback(event_call_back fn, int index);
-T static bool sync_with_stdio(bool sync = true);
- protected:
-T ios_base();
- };
-
- 27.4.2.1.1 Class ios_base::failure [lib.ios::failure]
-
-T class ios_base::failure : public exception {
- public:
-T explicit failure(const string& msg);
-T virtual ~failure();
-T virtual const char* what() const throw();
- };
-
-
- 27.4.2.1.6 Class ios_base::Init [lib.ios::Init]
-
-T class ios_base::Init {
- public:
-T Init();
-T ~Init();
- };
-
-
- 27.4.3 Template class fpos [lib.fpos]
-
-X template <class stateT> class fpos {
- public:
- // _lib.fpos.members_ Members
-T stateT state() const;
-T void state(stateT);
- private;
-T stateT st; // exposition only
- };
-
-
- 27.4.5 Template class basic_ios [lib.ios]
-
- template <class charT, class traits = char_traits<charT> >
-X class basic_ios : public ios_base {
- public:
-
- // Types:
-T typedef charT char_type;
-T typedef typename traits::int_type int_type;
-T typedef typename traits::pos_type pos_type;
-T typedef typename traits::off_type off_type;
-T typedef traits traits_type;
-T operator void*() const
-T bool operator!() const
-T iostate rdstate() const;
-T void clear(iostate state = goodbit);
-T void setstate(iostate state);
-T bool good() const;
-T bool eof() const;
-T bool fail() const;
-T bool bad() const;
-T iostate exceptions() const;
-T void exceptions(iostate except);
- // _lib.basic.ios.cons_ Constructor/destructor:
-T explicit basic_ios(basic_streambuf<charT,traits>* sb);
-T virtual ~basic_ios();
- // _lib.basic.ios.members_ Members:
-T basic_ostream<charT,traits>* tie() const;
-T basic_ostream<charT,traits>* tie(basic_ostream<charT,traits>* tiestr);
-T basic_streambuf<charT,traits>* rdbuf() const;
-T basic_streambuf<charT,traits>* rdbuf(basic_streambuf<charT,traits>* sb);
-X basic_ios& copyfmt(const basic_ios& rhs);
-T char_type fill() const;
-T char_type fill(char_type ch);
- // _lib.ios.base.locales_ locales:
-T locale imbue(const locale& loc);
-X char narrow(char_type c, char dfault) const;
-X char_type widen(char c) const;
- protected:
- basic_ios();
-T void init(basic_streambuf<charT,traits>* sb);
- private:
-T basic_ios(const basic_ios& ); // not defined
-T basic_ios& operator=(const basic_ios&); // not defined
- };
-
-
- 27.5 Stream buffers [lib.stream.buffers]
-
- Header <streambuf> synopsis
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_streambuf;
-T typedef basic_streambuf<char> streambuf;
-T typedef basic_streambuf<wchar_t> wstreambuf;
-
- 27.5.2 Template class [lib.streambuf]
- basic_streambuf<charT,traits>
-
- template <class charT, class traits = char_traits<charT> >
-X class basic_streambuf {
- public:
-
- // Types:
-T typedef charT char_type;
-T typedef typename traits::int_type int_type;
-T typedef typename traits::pos_type pos_type;
-T typedef typename traits::off_type off_type;
-T typedef traits traits_type;
-T virtual ~basic_streambuf();
- // _lib.streambuf.locales_ locales:
-T locale pubimbue(const locale &loc);
-T locale getloc() const;
- // _lib.streambuf.buffer_ buffer and positioning:
-T basic_streambuf<char_type,traits>*
- pubsetbuf(char_type* s, streamsize n);
-T pos_type pubseekoff(off_type off, ios_base::seekdir way,
- ios_base::openmode which =
- ios_base::in | ios_base::out);
-T pos_type pubseekpos(pos_type sp,
- ios_base::openmode which =
- ios_base::in | ios_base::out);
-T int pubsync();
-
- // Get and put areas:
- // _lib.streambuf.pub.get_ Get area:
-T streamsize in_avail();
-T int_type snextc();
-T int_type sbumpc();
-T int_type sgetc();
-T streamsize sgetn(char_type* s, streamsize n);
- // _lib.streambuf.pub.pback_ Putback:
-X int_type sputbackc(char_type c);
-X int_type sungetc();
- // _lib.streambuf.pub.put_ Put area:
-T int_type sputc(char_type c);
-X streamsize sputn(const char_type* s, streamsize n);
- protected:
-T basic_streambuf();
- // _lib.streambuf.get.area_ Get area:
-T char_type* eback() const;
-T char_type* gptr() const;
-T char_type* egptr() const;
-T void gbump(int n);
-T void setg(char_type* gbeg, char_type* gnext, char_type* gend);
- // _lib.streambuf.put.area_ Put area:
-T char_type* pbase() const;
-T char_type* pptr() const;
-T char_type* epptr() const;
-T void pbump(int n);
-T void setp(char_type* pbeg, char_type* pend);
- // _lib.streambuf.virtuals_ virtual functions:
- // _lib.streambuf.virt.locales_ Locales:
-T virtual void imbue(const locale &loc);
- // _lib.streambuf.virt.buffer_ Buffer management and positioning:
-T virtual basic_streambuf<char_type,traits>*
- setbuf(char_type* s, streamsize n);
-T virtual pos_type seekoff(off_type off, ios_base::seekdir way,
- ios_base::openmode which = ios_base::in | ios_base::out);
-T virtual pos_type seekpos(pos_type sp,
- ios_base::openmode which = ios_base::in | ios_base::out);
-T virtual int sync();
- // _lib.streambuf.virt.get_ Get area:
-T virtual int showmanyc();
-T virtual streamsize xsgetn(char_type* s, streamsize n);
-T virtual int_type underflow();
-T virtual int_type uflow();
- // _lib.streambuf.virt.pback_ Putback:
-T virtual int_type pbackfail(int_type c = traits::eof());
- // _lib.streambuf.virt.put_ Put area:
-X virtual streamsize xsputn(const char_type* s, streamsize n);
-T virtual int_type overflow (int_type c = traits::eof());
- };
-
- 27.6 Formatting and manipulators [lib.iostream.format]
-
- Header <istream> synopsis
-
-T template <class charT, class traits = char_traits<charT> >
- class basic_istream;
-T typedef basic_istream<char> istream;
-T typedef basic_istream<wchar_t> wistream;
-
-T template <class charT, class traits = char_traits<charT> >
- class basic_iostream;
-T typedef basic_iostream<char> iostream;
-T typedef basic_iostream<wchar_t> wiostream;
-
-X template <class charT, class traits>
- basic_istream<charT,traits>& ws(basic_istream<charT,traits>& is);
-
- Header <ostream> synopsis
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_ostream;
-T typedef basic_ostream<char> ostream;
-T typedef basic_ostream<wchar_t> wostream;
-
-T template <class charT, class traits>
- basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
-T template <class charT, class traits>
- basic_ostream<charT,traits>& ends(basic_ostream<charT,traits>& os);
-T template <class charT, class traits>
- basic_ostream<charT,traits>& flush(basic_ostream<charT,traits>& os);
-
- Header <iomanip> synopsis
-
- // Types T1, T2, ... are unspecified implementation types
-T T1 resetiosflags(ios_base::fmtflags mask);
-T T2 setiosflags (ios_base::fmtflags mask);
-T T3 setbase(int base);
-T template<charT> T4 setfill(charT c);
-T T5 setprecision(int n);
-T T6 setw(int n);
-
-
- 27.6.1.1 Template class basic_istream [lib.istream]
-
- template <class charT, class traits = char_traits<charT> >
-T class basic_istream : virtual public basic_ios<charT,traits> {
- public:
- // Types (inherited from basic_ios (_lib.ios_)):
-T typedef charT char_type;
-T typedef typename traits::int_type int_type;
-T typedef typename traits::pos_type pos_type;
-T typedef typename traits::off_type off_type;
-T typedef traits traits_type;
- // _lib.istream.cons_ Constructor/destructor:
-T explicit basic_istream(basic_streambuf<charT,traits>* sb);
-T virtual ~basic_istream();
- // _lib.istream::sentry_ Prefix/suffix:
-T class sentry;
-
- // _lib.istream.formatted_ Formatted input:
-T basic_istream<charT,traits>& operator>>
- (basic_istream<charT,traits>& (*pf)(basic_istream<charT,traits>&))
-T basic_istream<charT,traits>& operator>>
- (basic_ios<charT,traits>& (*pf)(basic_ios<charT,traits>&))
-T basic_istream<charT,traits>& operator>>
- (ios_base& (*pf)(ios_base&))
-S basic_istream<charT,traits>& operator>>(bool& n);
-S basic_istream<charT,traits>& operator>>(short& n);
-S basic_istream<charT,traits>& operator>>(unsigned short& n);
-S basic_istream<charT,traits>& operator>>(int& n);
-S basic_istream<charT,traits>& operator>>(unsigned int& n);
-S basic_istream<charT,traits>& operator>>(long& n);
-S basic_istream<charT,traits>& operator>>(unsigned long& n);
-S basic_istream<charT,traits>& operator>>(float& f);
-S basic_istream<charT,traits>& operator>>(double& f);
-S basic_istream<charT,traits>& operator>>(long double& f);
-S basic_istream<charT,traits>& operator>>(void*& p);
-S basic_istream<charT,traits>& operator>>
- (basic_streambuf<char_type,traits>* sb);
- // _lib.istream.unformatted_ Unformatted input:
-T streamsize gcount() const;
-S int_type get();
-S basic_istream<charT,traits>& get(char_type& c);
-S basic_istream<charT,traits>& get(char_type* s, streamsize n);
-S basic_istream<charT,traits>& get(char_type* s, streamsize n,
- char_type delim);
-S basic_istream<charT,traits>& get(basic_streambuf<char_type,traits>& sb);
-S basic_istream<charT,traits>& get(basic_streambuf<char_type,traits>& sb,
- char_type delim);
-S basic_istream<charT,traits>& getline(char_type* s, streamsize n);
-S basic_istream<charT,traits>& getline(char_type* s, streamsize n,
- char_type delim);
-S basic_istream<charT,traits>& ignore
- (streamsize n = 1, int_type delim = traits::eof());
-S int_type peek();
-S basic_istream<charT,traits>& read (char_type* s, streamsize n);
-S streamsize readsome(char_type* s, streamsize n);
-S basic_istream<charT,traits>& putback(char_type c);
-S basic_istream<charT,traits>& unget();
-S int sync();
-
-S pos_type tellg();
-S basic_istream<charT,traits>& seekg(pos_type);
-S basic_istream<charT,traits>& seekg(off_type, ios_base::seekdir);
- };
-
- // _lib.istream::extractors_ character extraction templates:
-S template<class charT, class traits>
- basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&,
- charT&);
-S template<class traits>
- basic_istream<char,traits>& operator>>(basic_istream<char,traits>&,
- unsigned char&);
-S template<class traits>
- basic_istream<char,traits>& operator>>(basic_istream<char,traits>&,
- signed char&);
-
-S template<class charT, class traits>
- basic_istream<charT,traits>& operator>>(basic_istream<charT,traits>&,
- charT*);
-S template<class traits>
- basic_istream<char,traits>& operator>>(basic_istream<char,traits>&,
- unsigned char*);
-S template<class traits>
- basic_istream<char,traits>& operator>>(basic_istream<char,traits>&,
- signed char*);
-
- 27.6.1.1.2 Class basic_istream::sentry [lib.istream::sentry]
-
-
- template <class charT,class traits = char_traits<charT> >
-S class basic_istream<charT,traits>::sentry {
- typedef traits traits_type;
-S bool ok_; // exposition only
- public:
-S explicit sentry(basic_istream<charT,traits>& is, bool noskipws = false);
-S ~sentry();
-S operator bool() const { return ok_; }
- private:
-T sentry(const sentry&); // not defined
-T sentry& operator=(const sentry&); // not defined
- };
-
-
- 27.6.1.5 Template class basic_iostream [lib.iostreamclass]
-
- template <class charT, class traits = char_traits<charT> >
-T class basic_iostream :
- public basic_istream<charT,traits>,
- public basic_ostream<charT,traits> {
- public:
- // constructor/destructor
-T explicit basic_iostream(basic_streambuf<charT,traits>* sb);
-T virtual ~basic_iostream();
- };
-
-
- 27.6.2.1 Template class basic_ostream [lib.ostream]
-
- template <class charT, class traits = char_traits<charT> >
-X class basic_ostream : virtual public basic_ios<charT,traits> {
- public:
- // Types (inherited from basic_ios (_lib.ios_)):
-T typedef charT char_type;
-T typedef typename traits::int_type int_type;
-T typedef typename traits::pos_type pos_type;
-T typedef typename traits::off_type off_type;
-T typedef traits traits_type;
- // _lib.ostream.cons_ Constructor/destructor:
-T explicit basic_ostream(basic_streambuf<char_type,traits>* sb);
-T virtual ~basic_ostream();
- // _lib.ostream::sentry_ Prefix/suffix:
-T class sentry;
- // _lib.ostream.formatted_ Formatted output:
-T basic_ostream<charT,traits>& operator<<
- (basic_ostream<charT,traits>& (*pf)(basic_ostream<charT,traits>&));
-T basic_ostream<charT,traits>& operator<<
- (basic_ios<charT,traits>& (*pf)(basic_ios<charT,traits>&));
-T basic_ostream<charT,traits>& operator<<
- (ios_base& (*pf)(ios_base&));
-T basic_ostream<charT,traits>& operator<<(bool n);
-T basic_ostream<charT,traits>& operator<<(short n);
-T basic_ostream<charT,traits>& operator<<(unsigned short n);
-T basic_ostream<charT,traits>& operator<<(int n);
-T basic_ostream<charT,traits>& operator<<(unsigned int n);
-T basic_ostream<charT,traits>& operator<<(long n);
-T basic_ostream<charT,traits>& operator<<(unsigned long n);
-S basic_ostream<charT,traits>& operator<<(float f);
-S basic_ostream<charT,traits>& operator<<(double f);
-S basic_ostream<charT,traits>& operator<<(long double f);
-T basic_ostream<charT,traits>& operator<<(const void* p);
-X basic_ostream<charT,traits>& operator<<
- (basic_streambuf<char_type,traits>* sb);
- // _lib.ostream.unformatted_ Unformatted output:
-T basic_ostream<charT,traits>& put(char_type c);
-T basic_ostream<charT,traits>& write(const char_type* s, streamsize n);
-X basic_ostream<charT,traits>& flush();
-
- // _lib.ostream.seeks_ seeks:
-S pos_type tellp();
-S basic_ostream<charT,traits>& seekp(pos_type);
-S basic_ostream<charT,traits>& seekp(off_type, ios_base::seekdir);
- };
- // _lib.ostream.inserters.character_ character inserters
-X template<class charT, class traits>
- basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&,
- charT);
-X template<class charT, class traits>
- basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&,
- char);
- // specialization
-X template<class traits>
- basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&,
- char);
- // signed and unsigned
-X template<class traits>
- basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&,
- signed char);
-X template<class traits>
- basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&,
- unsigned char)
-X template<class charT, class traits>
- basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&,
- const charT*);
-X template<class charT, class traits>
- basic_ostream<charT,traits>& operator<<(basic_ostream<charT,traits>&,
- const char*);
- // partial specializationss
-X template<class traits>
- basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&,
- const char*);
- // signed and unsigned
-X template<class traits>
- basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&,
- const signed char*);
-X template<class traits>
- basic_ostream<char,traits>& operator<<(basic_ostream<char,traits>&,
- const unsigned char*);
-
-
- 27.6.2.3 Class basic_ostream::sentry [lib.ostream::sentry]
-
- template <class charT,class traits = char_traits<charT> >
-X class basic_ostream<charT,traits>::sentry {
- bool ok_; // exposition only
- public:
-X explicit sentry(basic_ostream<charT,traits>& os);
-X ~sentry();
-X operator bool() const { return ok_; }
- private
-X sentry(const sentry&); // not defined
-X sentry& operator=(const sentry&); // not defined
- };
-
- 27.7 String-based streams [lib.string.streams]
-
- Header <sstream> synopsis
-
-X template <class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
- class basic_stringbuf;
-
-T typedef basic_stringbuf<char> stringbuf;
-T typedef basic_stringbuf<wchar_t> wstringbuf;
-
- template <class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
-X class basic_istringstream;
-
-T typedef basic_istringstream<char> istringstream;
-T typedef basic_istringstream<wchar_t> wistringstream;
-
- template <class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
-X class basic_ostringstream;
-T typedef basic_ostringstream<char> ostringstream;
-T typedef basic_ostringstream<wchar_t> wostringstream;
-
- template <class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
-X class basic_stringstream;
-T typedef basic_stringstream<char> stringstream;
-T typedef basic_stringstream<wchar_t> wstringstream;
-
- 27.7.1 Template class basic_stringbuf [lib.stringbuf]
-
- template <class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
-X class basic_stringbuf : public basic_streambuf<charT,traits> {
- public:
-T typedef charT char_type;
-T typedef typename traits::int_type int_type;
-T typedef typename traits::pos_type pos_type;
-T typedef typename traits::off_type off_type;
-T typedef traits traits_type;
- // _lib.stringbuf.cons_ Constructors:
-S explicit basic_stringbuf(ios_base::openmode which
- = ios_base::in | ios_base::out);
-S explicit basic_stringbuf
- (const basic_string<charT,traits,Allocator>& str,
- ios_base::openmode which = ios_base::in | ios_base::out);
- // _lib.stringbuf.members_ Get and set:
-S basic_string<charT,traits,Allocator> str() const;
-S void str(const basic_string<charT,traits,Allocator>& s);
-
- protected:
- // _lib.stringbuf.virtuals_ Overridden virtual functions:
-S virtual int_type underflow();
-S virtual int_type pbackfail(int_type c = traits::eof());
-S virtual int_type overflow (int_type c = traits::eof());
-S virtual basic_streambuf<charT,traits>* setbuf(charT*, streamsize);
-
-S virtual pos_type seekoff(off_type off, ios_base::seekdir way,
- ios_base::openmode which
- = ios_base::in | ios_base::out);
-S virtual pos_type seekpos(pos_type sp,
- ios_base::openmode which
- = ios_base::in | ios_base::out);
- };
-
-
- 27.7.2 Template class basic_istringstream [lib.istringstream]
-
- template <class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
-X class basic_istringstream : public basic_istream<charT,traits> {
- public:
-T typedef charT char_type;
-T typedef typename traits::int_type int_type;
-T typedef typename traits::pos_type pos_type;
-T typedef typename traits::off_type off_type;
-T typedef traits traits_type;
- // _lib.istringstream.cons_ Constructors:
-S explicit basic_istringstream(ios_base::openmode which = ios_base::in);
-S explicit basic_istringstream(
- const basic_string<charT,traits,Allocator>& str,
- ios_base::openmode which = ios_base::in);
-
- // _lib.istringstream.members_ Members:
-S basic_stringbuf<charT,traits,Allocator>* rdbuf() const;
-S basic_string<charT,traits,Allocator> str() const;
-S void str(const basic_string<charT,traits,Allocator>& s);
- private:
- // basic_stringbuf<charT,traits,Allocator> sb; exposition only
- };
-
- 27.7.3 Class basic_ostringstream [lib.ostringstream]
-
- template <class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
-X class basic_ostringstream : public basic_ostream<charT,traits> {
- public:
-
- // Types:
-T typedef charT char_type;
-T typedef typename traits::int_type int_type;
-T typedef typename traits::pos_type pos_type;
-T typedef typename traits::off_type off_type;
- // _lib.ostringstream.cons_ Constructors/destructor:
-S explicit basic_ostringstream(ios_base::openmode which = ios_base::out);
-S explicit basic_ostringstream(
- const basic_string<charT,traits,Allocator>& str,
- ios_base::openmode which = ios_base::out);
- // _lib.ostringstream.members_ Members:
-S basic_stringbuf<charT,traits,Allocator>* rdbuf() const;
-S basic_string<charT,traits,Allocator> str() const;
-S void str(const basic_string<charT,traits,Allocator>& s);
- };
-
-
- 27.7.4 Template class basic_stringstream [lib.stringstream]
-
- template <class charT, class traits = char_traits<charT>,
- class Allocator = allocator<charT> >
-X class basic_stringstream
- : public basic_iostream<charT,traits> {
- public:
- // Types
-T typedef charT char_type;
-T typedef typename traits::int_type int_type;
-T typedef typename traits::pos_type pos_type;
-T typedef typename traits::off_type off_type;
- // constructors/destructors
-S explicit basic_stringstream(
- ios_base::openmode which = ios_base::out|ios_base::in);
-S explicit basic_stringstream(
- const basic_string<charT,traits,Allocator>& str,
- ios_base::openmode which = ios_base::out|ios_base::in);
- // Members:
-S basic_stringbuf<charT,traits,Allocator>* rdbuf() const;
-S basic_string<charT,traits,Allocator> str() const;
-S void str(const basic_string<charT,traits,Allocator>& str);
- };
-
-
-
- 27.8.1 File streams [lib.fstreams]
-
-
- Header <fstream> synopsis
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_filebuf;
-T typedef basic_filebuf<char> filebuf;
-T typedef basic_filebuf<wchar_t> wfilebuf;
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_ifstream;
-T typedef basic_ifstream<char> ifstream;
-T typedef basic_ifstream<wchar_t> wifstream;
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_ofstream;
-T typedef basic_ofstream<char> ofstream;
-T typedef basic_ofstream<wchar_t> wofstream;
-
-X template <class charT, class traits = char_traits<charT> >
- class basic_fstream;
-T typedef basic_fstream<char> fstream;
-T typedef basic_fstream<wchar_t> wfstream;
-
- 27.8.1.1 Template class basic_filebuf [lib.filebuf]
-
- template <class charT, class traits = char_traits<charT> >
-X class basic_filebuf : public basic_streambuf<charT,traits> {
- public:
-T typedef charT char_type;
-T typedef typename traits::int_type int_type;
-T typedef typename traits::pos_type pos_type;
-T typedef typename traits::off_type off_type;
-T typedef traits traits_type;
- // _lib.filebuf.cons_ Constructors/destructor:
-X basic_filebuf();
-X virtual ~basic_filebuf();
- // _lib.filebuf.members_ Members:
-T bool is_open() const;
-X basic_filebuf<charT,traits>* open
- (const char* s, ios_base::openmode mode);
-X basic_filebuf<charT,traits>* close();
- protected:
- // _lib.filebuf.virtuals_ Overridden virtual functions:
-X virtual streamsize showmanyc();
-X virtual int_type underflow();
-X virtual int_type uflow();
-X virtual int_type pbackfail(int_type c = traits::eof());
-X virtual int_type overflow (int_type c = traits::eof());
-S virtual basic_streambuf<charT,traits>*
- setbuf(char_type* s, streamsize n);
-S virtual pos_type seekoff(off_type off, ios_base::seekdir way,
- ios_base::openmode which
- = ios_base::in | ios_base::out);
-S virtual pos_type seekpos(pos_type sp, ios_base::openmode which
- = ios_base::in | ios_base::out);
-S virtual int sync();
-S virtual void imbue(const locale& loc);
- };
-
-
-
- 27.8.1.5 Template class basic_ifstream [lib.ifstream]
-
- template <class charT, class traits = char_traits<charT> >
-X class basic_ifstream : public basic_istream<charT,traits> {
- public:
-T typedef charT char_type;
-T typedef typename traits::int_type int_type;
-T typedef typename traits::pos_type pos_type;
-T typedef typename traits::off_type off_type;
-T typedef traits traits_type;
- // _lib.ifstream.cons_ Constructors:
-S basic_ifstream();
-S explicit basic_ifstream(const char* s,
- ios_base::openmode mode = ios_base::in);
- // _lib.ifstream.members_ Members:
-S basic_filebuf<charT,traits>* rdbuf() const;
-S bool is_open();
-S void open(const char* s, ios_base::openmode mode = ios_base::in);
-S void close();
- };
-
-
- 27.8.1.8 Template class basic_ofstream [lib.ofstream]
-
- template <class charT, class traits = char_traits<charT> >
-X class basic_ofstream : public basic_ostream<charT,traits> {
- public:
-T typedef charT char_type;
-T typedef typename traits::int_type int_type;
-T typedef typename traits::pos_type pos_type;
-T typedef typename traits::off_type off_type;
-T typedef traits traits_type;
- // _lib.ofstream.cons_ Constructors:
-X basic_ofstream();
-X explicit basic_ofstream(const char* s,
- ios_base::openmode mode
- = ios_base::out);
- // _lib.ofstream.members_ Members:
-X basic_filebuf<charT,traits>* rdbuf() const;
-T bool is_open();
-X void open(const char* s, ios_base::openmode mode = ios_base::out);
-X void close();
- };
-
-
- 27.8.1.11 Template class basic_fstream [lib.fstream]
-
- template <class charT, class traits=char_traits<charT> >
-X class basic_fstream
- : public basic_iostream<charT,traits> {
- public:
-T typedef charT char_type;
-T typedef typename traits::int_type int_type;
-T typedef typename traits::pos_type pos_type;
-T typedef typename traits::off_type off_type;
-T typedef traits traits_type;
- // constructors/destructor
-S basic_fstream();
-S explicit basic_fstream(
- const char* s,
- ios_base::openmode mode = ios_base::in|ios_base::out);
-
- // Members:
-S basic_filebuf<charT,traits>* rdbuf() const;
-S bool is_open();
-S void open(
- const char* s,
- ios_base::openmode mode = ios_base::in|ios_base::out);
-S void close();
- };
-
-
-
- 27.8.2 C Library files [lib.c.files]
-
-
- Table 13--Header <cstdio> synopsis
- Macros:
-X BUFSIZ L_tmpnam SEEK_SET TMP_MAX
-X EOF NULL <cstdio> stderr _IOFBF
-X FILENAME_MAX SEEK_CUR stdin _IOLBF
-X FOPEN_MAX SEEK_END stdout _IONBF
-
-X Types: FILE fpos_t size_t <cstdio>
- Functions:
-X clearerr fgets fscanf gets rewind
-X fclose fopen fseek perror scanf tmpnam
-X feof fprintf fsetpos printf setbuf ungetc
-X ferror fputc ftell putc setvbuf vprintf
-X fflush fputs fwrite puts sprintf vfprintf
-X fgetc fread getc remove sscanf vsprintf
-X fgetpos freopen getchar putchar rename tmpfile
-
-
-
-
- 1.5 Standard C library headers [depr.c.headers]
-
-X <assert.h> <iso646.h> <setjmp.h> <stdio.h> <wchar.h>
- <ctype.h> <limits.h> <signal.h> <stdlib.h> <wctype.h>
- <errno.h> <locale.h> <stdarg.h> <string.h>
- <float.h> <math.h> <stddef.h> <time.h>
-
- 1.6 Old iostreams members [depr.ios.members]
-
- [Note: these should be #ifdef'd to permit diagnostics if used.]
- namespace std {
- class ios_base {
- public:
-T typedef T1 io_state;
-T typedef T2 open_mode;
-T typedef T3 seek_dir;
-T typedef OFF_T streamoff;
-T typedef OFF_T streampos;
- // remainder unchanged
- };
- }
-
- [Note: these should be #ifdef'd to permit diagnostics if used.]
- namespace std {
- template<class charT, class traits = char_traits<charT> >
- class basic_streambuf {
- public:
-T void stossc();
- // remainder unchanged
- };
- }
-
- 8 An implementation may provide the following member functions that
- overload signatures specified in clause _lib.iostreams_:
-
- [Note: the following overloads should be #ifdef'd to permit
- diagnostics to be emitted, by default, if used.]
-
- template<class charT, class Traits> class basic_ios {
- public:
-M void clear(io_state state);
-M void setstate(io_state state);
- // remainder unchanged
- };
- class ios_base {
- public:
-M void exceptions(io_state);
- // remainder unchanged
- };
- template<class charT, class traits = char_traits<charT> >
- class basic_streambuf {
- public:
-M pos_type pubseekoff(off_type off, ios_base::seek_dir way,
- ios_base::open_mode which = ios_base::in | ios_base::out);
-M pos_type pubseekpos(pos_type sp,
- ios_base::open_mode which = ios_base::in | ios_base::out);
- // remainder unchanged
- };
- template <class charT, class traits = char_traits<charT> >
- class basic_filebuf : public basic_streambuf<charT,traits> {
- public:
-M basic_filebuf<charT,traits>* open
- (const char* s, ios_base::open_mode mode);
- // remainder unchanged
- };
- template <class charT, class traits = char_traits<charT> >
- class basic_ifstream : public basic_istream<charT,traits> {
- public:
-M void open(const char* s, ios_base::open_mode mode = in);
- // remainder unchanged
- };
- template <class charT, class traits = char_traits<charT> >
- class basic_ofstream : public basic_ostream<charT,traits> {
- public:
-M void open(const char* s, ios_base::open_mode mode = out | trunc);
- // remainder unchanged
- };
- }
-
-
-
- 1.7.1 Class strstreambuf [depr.strstreambuf]
-
- [Note: It should be possible to adopt these components with only
- minor changes from the 2.8 version of the library.]
-
-M class strstreambuf : public basic_streambuf<char> {
- public:
-M explicit strstreambuf(streamsize alsize_arg = 0);
-M strstreambuf(void* (*palloc_arg)(size_t), void (*pfree_arg)(void*));
-M strstreambuf(char* gnext_arg, streamsize n, char* pbeg_arg = 0);
-M strstreambuf(const char* gnext_arg, streamsize n);
-M strstreambuf(signed char* gnext_arg, streamsize n,
- signed char* pbeg_arg = 0);
-M strstreambuf(const signed char* gnext_arg, streamsize n);
-M strstreambuf(unsigned char* gnext_arg, streamsize n,
- unsigned char* pbeg_arg = 0);
-M strstreambuf(const unsigned char* gnext_arg, streamsize n);
-M virtual ~strstreambuf();
-M void freeze(bool freezefl = true);
-M char* str();
-M int pcount();
- protected:
-M virtual int_type overflow (int_type c = EOF);
-M virtual int_type pbackfail(int_type c = EOF);
-M virtual int_type underflow();
-M virtual pos_type seekoff(off_type off, ios_base::seekdir way,
- ios_base::openmode which
- = ios_base::in | ios_base::out);
-M virtual pos_type seekpos(pos_type sp, ios_base::openmode which
- = ios_base::in | ios_base::out);
-M virtual streambuf<char>* setbuf(char* s, streamsize n);
- }
-
- 1.7.4 Class strstream [depr.strstream]
-
-M class strstream
- : public basic_iostream<char> {
- public:
- // Types
-M typedef char char_type;
-M typedef typename char_traits<char>::int_type int_type
-M typedef typename char_traits<char>::pos_type pos_type;
-M typedef typename char_traits<char>::off_type off_type;
- // consturctors/destructor
-M strstream();
-M strstream(char* s, int n,
- ios_base::openmode mode = ios_base::in|ios_base::out);
-M virtual ~strstream();
- // Members:
-M strstreambuf* rdbuf() const;
-M void freeze(bool freezefl = true);
-M int pcount() const;
-M char* str();
- };
-
diff --git a/libstdc++-v3/docs/html/17_intro/COPYING b/libstdc++-v3/docs/html/17_intro/COPYING
deleted file mode 100644
index 623b6258a13..00000000000
--- a/libstdc++-v3/docs/html/17_intro/COPYING
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/libstdc++-v3/docs/html/17_intro/COPYING.DOC b/libstdc++-v3/docs/html/17_intro/COPYING.DOC
deleted file mode 100644
index 1a864561bd4..00000000000
--- a/libstdc++-v3/docs/html/17_intro/COPYING.DOC
+++ /dev/null
@@ -1,355 +0,0 @@
- GNU Free Documentation License
- Version 1.1, March 2000
-
- Copyright (C) 2000 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-0. PREAMBLE
-
-The purpose of this License is to make a manual, textbook, or other
-written document "free" in the sense of freedom: to assure everyone
-the effective freedom to copy and redistribute it, with or without
-modifying it, either commercially or noncommercially. Secondarily,
-this License preserves for the author and publisher a way to get
-credit for their work, while not being considered responsible for
-modifications made by others.
-
-This License is a kind of "copyleft", which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
-We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
-
-1. APPLICABILITY AND DEFINITIONS
-
-This License applies to any manual or other work that contains a
-notice placed by the copyright holder saying it can be distributed
-under the terms of this License. The "Document", below, refers to any
-such manual or work. Any member of the public is a licensee, and is
-addressed as "you".
-
-A "Modified Version" of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
-A "Secondary Section" is a named appendix or a front-matter section of
-the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall subject
-(or to related matters) and contains nothing that could fall directly
-within that overall subject. (For example, if the Document is in part a
-textbook of mathematics, a Secondary Section may not explain any
-mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
-The "Invariant Sections" are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License.
-
-The "Cover Texts" are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License.
-
-A "Transparent" copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, whose contents can be viewed and edited directly and
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup has been designed to thwart or discourage
-subsequent modification by readers is not Transparent. A copy that is
-not "Transparent" is called "Opaque".
-
-Examples of suitable formats for Transparent copies include plain
-ASCII without markup, Texinfo input format, LaTeX input format, SGML
-or XML using a publicly available DTD, and standard-conforming simple
-HTML designed for human modification. Opaque formats include
-PostScript, PDF, proprietary formats that can be read and edited only
-by proprietary word processors, SGML or XML for which the DTD and/or
-processing tools are not generally available, and the
-machine-generated HTML produced by some word processors for output
-purposes only.
-
-The "Title Page" means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, "Title Page" means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
-
-2. VERBATIM COPYING
-
-You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
-You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
-
-3. COPYING IN QUANTITY
-
-If you publish printed copies of the Document numbering more than 100,
-and the Document's license notice requires Cover Texts, you must enclose
-the copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
-If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
-If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a publicly-accessible computer-network location containing a complete
-Transparent copy of the Document, free of added material, which the
-general network-using public has access to download anonymously at no
-charge using public-standard network protocols. If you use the latter
-option, you must take reasonably prudent steps, when you begin
-distribution of Opaque copies in quantity, to ensure that this
-Transparent copy will remain thus accessible at the stated location
-until at least one year after the last time you distribute an Opaque
-copy (directly or through your agents or retailers) of that edition to
-the public.
-
-It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
-
-4. MODIFICATIONS
-
-You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
-A. Use in the Title Page (and on the covers, if any) a title distinct
- from that of the Document, and from those of previous versions
- (which should, if there were any, be listed in the History section
- of the Document). You may use the same title as a previous version
- if the original publisher of that version gives permission.
-B. List on the Title Page, as authors, one or more persons or entities
- responsible for authorship of the modifications in the Modified
- Version, together with at least five of the principal authors of the
- Document (all of its principal authors, if it has less than five).
-C. State on the Title page the name of the publisher of the
- Modified Version, as the publisher.
-D. Preserve all the copyright notices of the Document.
-E. Add an appropriate copyright notice for your modifications
- adjacent to the other copyright notices.
-F. Include, immediately after the copyright notices, a license notice
- giving the public permission to use the Modified Version under the
- terms of this License, in the form shown in the Addendum below.
-G. Preserve in that license notice the full lists of Invariant Sections
- and required Cover Texts given in the Document's license notice.
-H. Include an unaltered copy of this License.
-I. Preserve the section entitled "History", and its title, and add to
- it an item stating at least the title, year, new authors, and
- publisher of the Modified Version as given on the Title Page. If
- there is no section entitled "History" in the Document, create one
- stating the title, year, authors, and publisher of the Document as
- given on its Title Page, then add an item describing the Modified
- Version as stated in the previous sentence.
-J. Preserve the network location, if any, given in the Document for
- public access to a Transparent copy of the Document, and likewise
- the network locations given in the Document for previous versions
- it was based on. These may be placed in the "History" section.
- You may omit a network location for a work that was published at
- least four years before the Document itself, or if the original
- publisher of the version it refers to gives permission.
-K. In any section entitled "Acknowledgements" or "Dedications",
- preserve the section's title, and preserve in the section all the
- substance and tone of each of the contributor acknowledgements
- and/or dedications given therein.
-L. Preserve all the Invariant Sections of the Document,
- unaltered in their text and in their titles. Section numbers
- or the equivalent are not considered part of the section titles.
-M. Delete any section entitled "Endorsements". Such a section
- may not be included in the Modified Version.
-N. Do not retitle any existing section as "Endorsements"
- or to conflict in title with any Invariant Section.
-
-If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
-You may add a section entitled "Endorsements", provided it contains
-nothing but endorsements of your Modified Version by various
-parties--for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
-You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
-The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
-
-5. COMBINING DOCUMENTS
-
-You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice.
-
-The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
-In the combination, you must combine any sections entitled "History"
-in the various original documents, forming one section entitled
-"History"; likewise combine any sections entitled "Acknowledgements",
-and any sections entitled "Dedications". You must delete all sections
-entitled "Endorsements."
-
-
-6. COLLECTIONS OF DOCUMENTS
-
-You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
-You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
-
-7. AGGREGATION WITH INDEPENDENT WORKS
-
-A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, does not as a whole count as a Modified Version
-of the Document, provided no compilation copyright is claimed for the
-compilation. Such a compilation is called an "aggregate", and this
-License does not apply to the other self-contained works thus compiled
-with the Document, on account of their being thus compiled, if they
-are not themselves derivative works of the Document.
-
-If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one quarter
-of the entire aggregate, the Document's Cover Texts may be placed on
-covers that surround only the Document within the aggregate.
-Otherwise they must appear on covers around the whole aggregate.
-
-
-8. TRANSLATION
-
-Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License provided that you also include the
-original English version of this License. In case of a disagreement
-between the translation and the original English version of this
-License, the original English version will prevail.
-
-
-9. TERMINATION
-
-You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License. Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License. However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-
-10. FUTURE REVISIONS OF THIS LICENSE
-
-The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns. See
-http://www.gnu.org/copyleft/.
-
-Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License "or any later version" applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
-
-
-ADDENDUM: How to use this License for your documents
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
- Copyright (c) YEAR YOUR NAME.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.1
- or any later version published by the Free Software Foundation;
- with the Invariant Sections being LIST THEIR TITLES, with the
- Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
- A copy of the license is included in the section entitled "GNU
- Free Documentation License".
-
-If you have no Invariant Sections, write "with no Invariant Sections"
-instead of saying which ones are invariant. If you have no
-Front-Cover Texts, write "no Front-Cover Texts" instead of
-"Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
-
-If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
diff --git a/libstdc++-v3/docs/html/17_intro/DESIGN b/libstdc++-v3/docs/html/17_intro/DESIGN
deleted file mode 100644
index 5af3d9aed3b..00000000000
--- a/libstdc++-v3/docs/html/17_intro/DESIGN
+++ /dev/null
@@ -1,859 +0,0 @@
-
-Standard C++ Library Design Document
-------------------------------------
-
-This is an overview of libstdc++-v3, with particular attention
-to projects to be done and how they fit into the whole.
-
-The Library
------------
-
-This paper is covers two major areas:
-
- - Features and policies not mentioned in the standard that
- the quality of the library implementation depends on, including
- extensions and "implementation-defined" features;
-
- - Plans for required but unimplemented library features and
- optimizations to them.
-
-Overhead
---------
-
-The standard defines a large library, much larger than the standard
-C library. A naive implementation would suffer substantial overhead
-in compile time, executable size, and speed, rendering it unusable
-in many (particularly embedded) applications. The alternative demands
-care in construction, and some compiler support, but there is no
-need for library subsets.
-
-What are the sources of this overhead? There are four main causes:
-
- - The library is specified almost entirely as templates, which
- with current compilers must be included in-line, resulting in
- very slow builds as tens or hundreds of thousands of lines
- of function definitions are read for each user source file.
- Indeed, the entire SGI STL, as well as the dos Reis valarray,
- are provided purely as header files, largely for simplicity in
- porting. Iostream/locale is (or will be) as large again.
-
- - The library is very flexible, specifying a multitude of hooks
- where users can insert their own code in place of defaults.
- When these hooks are not used, any time and code expended to
- support that flexibility is wasted.
-
- - Templates are often described as causing to "code bloat". In
- practice, this refers (when it refers to anything real) to several
- independent processes. First, when a class template is manually
- instantiated in its entirely, current compilers place the definitions
- for all members in a single object file, so that a program linking
- to one member gets definitions of all. Second, template functions
- which do not actually depend on the template argument are, under
- current compilers, generated anew for each instantiation, rather
- than being shared with other instantiations. Third, some of the
- flexibility mentioned above comes from virtual functions (both in
- regular classes and template classes) which current linkers add
- to the executable file even when they manifestly cannot be called.
-
- - The library is specified to use a language feature, exceptions,
- which in the current gcc compiler ABI imposes a run time and
- code space cost to handle the possibility of exceptions even when
- they are not used. Under the new ABI (accessed with -fnew-abi),
- there is a space overhead and a small reduction in code efficiency
- resulting from lost optimization opportunities associated with
- non-local branches associated with exceptions.
-
-What can be done to eliminate this overhead? A variety of coding
-techniques, and compiler, linker and library improvements and
-extensions may be used, as covered below. Most are not difficult,
-and some are already implemented in varying degrees.
-
-Overhead: Compilation Time
---------------------------
-
-Providing "ready-instantiated" template code in object code archives
-allows us to avoid generating and optimizing template instantiations
-in each compilation unit which uses them. However, the number of such
-instantiations that are useful to provide is limited, and anyway this
-is not enough, by itself, to minimize compilation time. In particular,
-it does not reduce time spent parsing conforming headers.
-
-Quicker header parsing will depend on library extensions and compiler
-improvements. One approach is some variation on the techniques
-previously marketed as "pre-compiled headers", now standardized as
-support for the "export" keyword. "Exported" template definitions
-can be placed (once) in a "repository" -- really just a library, but
-of template definitions rather than object code -- to be drawn upon
-at link time when an instantiation is needed, rather than placed in
-header files to be parsed along with every compilation unit.
-
-Until "export" is implemented we can put some of the lengthy template
-definitions in #if guards or alternative headers so that users can skip
-over the the full definitions when they need only the ready-instantiated
-specializations.
-
-To be precise, this means that certain headers which define
-templates which users normally use only for certain arguments
-can be instrumented to avoid exposing the template definitions
-to the compiler unless a macro is defined. For example, in
-<string>, we might have:
-
- template <class _CharT, ... > class basic_string {
- ... // member declarations
- };
- ... // operator declarations
-
- #ifdef _STRICT_ISO_
- # if _G_NO_TEMPLATE_EXPORT
- # include <bits/std_locale.h> // headers needed by definitions
- # ...
- # include <bits/string.tcc> // member and global template definitions.
- # endif
- #endif
-
-Users who compile without specifying a strict-ISO-conforming flag
-would not see many of the template definitions they now see, and rely
-instead on ready-instantiated specializations in the library. This
-technique would be useful for the following substantial components:
-string, locale/iostreams, valarray. It would *not* be useful or
-usable with the following: containers, algorithms, iterators,
-allocator. Since these constitute a large (though decreasing)
-fraction of the library, the benefit the technique offers is
-limited.
-
-The language specifies the semantics of the "export" keyword, but
-the gcc compiler does not yet support it. When it does, problems
-with large template inclusions can largely disappear, given some
-minor library reorganization, along with the need for the apparatus
-described above.
-
-Overhead: Flexibility Cost
---------------------------
-
-The library offers many places where users can specify operations
-to be performed by the library in place of defaults. Sometimes
-this seems to require that the library use a more-roundabout, and
-possibly slower, way to accomplish the default requirements than
-would be used otherwise.
-
-The primary protection against this overhead is thorough compiler
-optimization, to crush out layers of inline function interfaces.
-Kuck & Associates has demonstrated the practicality of this kind
-of optimization.
-
-The second line of defense against this overhead is explicit
-specialization. By defining helper function templates, and writing
-specialized code for the default case, overhead can be eliminated
-for that case without sacrificing flexibility. This takes full
-advantage of any ability of the optimizer to crush out degenerate
-code.
-
-The library specifies many virtual functions which current linkers
-load even when they cannot be called. Some minor improvements to the
-compiler and to ld would eliminate any such overhead by simply
-omitting virtual functions that the complete program does not call.
-A prototype of this work has already been done. For targets where
-GNU ld is not used, a "pre-linker" could do the same job.
-
-The main areas in the standard interface where user flexibility
-can result in overhead are:
-
- - Allocators: Containers are specified to use user-definable
- allocator types and objects, making tuning for the container
- characteristics tricky.
-
- - Locales: the standard specifies locale objects used to implement
- iostream operations, involving many virtual functions which use
- streambuf iterators.
-
- - Algorithms and containers: these may be instantiated on any type,
- frequently duplicating code for identical operations.
-
- - Iostreams and strings: users are permitted to use these on their
- own types, and specify the operations the stream must use on these
- types.
-
-Note that these sources of overhead are _avoidable_. The techniques
-to avoid them are covered below.
-
-Code Bloat
-----------
-
-In the SGI STL, and in some other headers, many of the templates
-are defined "inline" -- either explicitly or by their placement
-in class definitions -- which should not be inline. This is a
-source of code bloat. Matt had remarked that he was relying on
-the compiler to recognize what was too big to benefit from inlining,
-and generate it out-of-line automatically. However, this also can
-result in code bloat except where the linker can eliminate the extra
-copies.
-
-Fixing these cases will require an audit of all inline functions
-defined in the library to determine which merit inlining, and moving
-the rest out of line. This is an issue mainly in chapters 23, 25, and
-27. Of course it can be done incrementally, and we should generally
-accept patches that move large functions out of line and into ".tcc"
-files, which can later be pulled into a repository. Compiler/linker
-improvements to recognize very large inline functions and move them
-out-of-line, but shared among compilation units, could make this
-work unnecessary.
-
-Pre-instantiating template specializations currently produces large
-amounts of dead code which bloats statically linked programs. The
-current state of the static library, libstdc++.a, is intolerable on
-this account, and will fuel further confused speculation about a need
-for a library "subset". A compiler improvement that treats each
-instantiated function as a separate object file, for linking purposes,
-would be one solution to this problem. An alternative would be to
-split up the manual instantiation files into dozens upon dozens of
-little files, each compiled separately, but an abortive attempt at
-this was done for <string> and, though it is far from complete, it
-is already a nuisance. A better interim solution (just until we have
-"export") is badly needed.
-
-When building a shared library, the current compiler/linker cannot
-automatically generate the instantiatiations needed. This creates a
-miserable situation; it means any time something is changed in the
-library, before a shared library can be built someone must manually
-copy the declarations of all templates that are needed by other parts
-of the library to an "instantiation" file, and add it to the build
-system to be compiled and linked to the library. This process is
-readily automated, and should be automated as soon as possible.
-Users building their own shared libraries experience identical
-frustrations.
-
-Sharing common aspects of template definitions among instantiations
-can radically reduce code bloat. The compiler could help a great
-deal here by recognizing when a function depends on nothing about
-a template parameter, or only on its size, and giving the resulting
-function a link-name "equate" that allows it to be shared with other
-instantiations. Implementation code could take advantage of the
-capability by factoring out code that does not depend on the template
-argument into separate functions to be merged by the compiler.
-
-Until such a compiler optimization is implemented, much can be done
-manually (if tediously) in this direction. One such optimization is
-to derive class templates from non-template classes, and move as much
-implementation as possible into the base class. Another is to partial-
-specialize certain common instantiations, such as vector<T*>, to share
-code for instantiations on all types T. While these techniques work,
-they are far from the complete solution that a compiler improvement
-would afford.
-
-Overhead: Expensive Language Features
--------------------------------------
-
-The main "expensive" language feature used in the standard library
-is exception support, which requires compiling in cleanup code with
-static table data to locate it, and linking in library code to use
-the table. For small embedded programs the amount of such library
-code and table data is assumed by some to be excessive. Under the
-"new" ABI this perception is generally exaggerated, although in some
-cases it may actually be excessive.
-
-To implement a library which does not use exceptions directly is
-not difficult given minor compiler support (to "turn off" exceptions
-and ignore exception constructs), and results in no great library
-maintenance difficulties. To be precise, given "-fno-exceptions",
-the compiler should treat "try" blocks as ordinary blocks, and
-"catch" blocks as dead code to ignore or eliminate. Compiler
-support is not strictly necessary, except in the case of "function
-try blocks"; otherwise the following macros almost suffice:
-
- #define throw(X)
- #define try if (true)
- #define catch(X) else if (false)
-
-However, there may be a need to use function try blocks in the
-library implementation, and use of macros in this way can make
-correct diagnostics impossible. Furthermore, use of this scheme
-would require the library to call a function to re-throw exceptions
-from a try block. Implementing the above semantics in the compiler
-is preferable.
-
-Given the support above (however implemented) it only remains to
-replace code that "throws" with a call to a well-documented "handler"
-function in a separate compilation unit which may be replaced by
-the user. The main source of exceptions that would be difficult
-for users to avoid is memory allocation failures, but users can
-define their own memory allocation primitives that never throw.
-Otherwise, the complete list of such handlers, and which library
-functions may call them, would be needed for users to be able to
-implement the necessary substitutes. (Fortunately, they have the
-source code.)
-
-Opportunities
--------------
-
-The template capabilities of C++ offer enormous opportunities for
-optimizing common library operations, well beyond what would be
-considered "eliminating overhead". In particular, many operations
-done in Glibc with macros that depend on proprietary language
-extensions can be implemented in pristine Standard C++. For example,
-the chapter 25 algorithms, and even C library functions such as strchr,
-can be specialized for the case of static arrays of known (small) size.
-
-Detailed optimization opportunities are identified below where
-the component where they would appear is discussed. Of course new
-opportunities will be identified during implementation.
-
-Unimplemented Required Library Features
----------------------------------------
-
-The standard specifies hundreds of components, grouped broadly by
-chapter. These are listed in excruciating detail in the CHECKLIST
-file.
-
- 17 general
- 18 support
- 19 diagnostics
- 20 utilities
- 21 string
- 22 locale
- 23 containers
- 24 iterators
- 25 algorithms
- 26 numerics
- 27 iostreams
- Annex D backward compatibility
-
-Anyone participating in implementation of the library should obtain
-a copy of the standard, ISO 14882. People in the U.S. can obtain an
-electronic copy for US$18 from ANSI's web site. Those from other
-countries should visit http://www.iso.ch/ to find out the location
-of their country's representation in ISO, in order to know who can
-sell them a copy.
-
-The emphasis in the following sections is on unimplemented features
-and optimization opportunities.
-
-Chapter 17 General
--------------------
-
-Chapter 17 concerns overall library requirements.
-
-The standard doesn't mention threads. A multi-thread (MT) extension
-primarily affects operators new and delete (18), allocator (20),
-string (21), locale (22), and iostreams (27). The common underlying
-support needed for this is discussed under chapter 20.
-
-The standard requirements on names from the C headers create a
-lot of work, mostly done. Names in the C headers must be visible
-in the std:: and sometimes the global namespace; the names in the
-two scopes must refer to the same object. More stringent is that
-Koenig lookup implies that any types specified as defined in std::
-really are defined in std::. Names optionally implemented as
-macros in C cannot be macros in C++. (An overview may be read at
-<http://www.cantrip.org/cheaders.html>). The scripts "inclosure"
-and "mkcshadow", and the directories shadow/ and cshadow/, are the
-beginning of an effort to conform in this area.
-
-A correct conforming definition of C header names based on underlying
-C library headers, and practical linking of conforming namespaced
-customer code with third-party C libraries depends ultimately on
-an ABI change, allowing namespaced C type names to be mangled into
-type names as if they were global, somewhat as C function names in a
-namespace, or C++ global variable names, are left unmangled. Perhaps
-another "extern" mode, such as 'extern "C-global"' would be an
-appropriate place for such type definitions. Such a type would
-affect mangling as follows:
-
- namespace A {
- struct X {};
- extern "C-global" { // or maybe just 'extern "C"'
- struct Y {};
- };
- }
- void f(A::X*); // mangles to f__FPQ21A1X
- void f(A::Y*); // mangles to f__FP1Y
-
-(It may be that this is really the appropriate semantics for regular
-'extern "C"', and 'extern "C-global"', as an extension, would not be
-necessary.) This would allow functions declared in non-standard C headers
-(and thus fixable by neither us nor users) to link properly with functions
-declared using C types defined in properly-namespaced headers. The
-problem this solves is that C headers (which C++ programmers do persist
-in using) frequently forward-declare C struct tags without including
-the header where the type is defined, as in
-
- struct tm;
- void munge(tm*);
-
-Without some compiler accommodation, munge cannot be called by correct
-C++ code using a pointer to a correctly-scoped tm* value.
-
-The current C headers use the preprocessor extension "#include_next",
-which the compiler complains about when run "-pedantic".
-(Incidentally, it appears that "-fpedantic" is currently ignored,
-probably a bug.) The solution in the C compiler is to use
-"-isystem" rather than "-I", but unfortunately in g++ this seems
-also to wrap the whole header in an 'extern "C"' block, so it's
-unusable for C++ headers. The correct solution appears to be to
-allow the various special include-directory options, if not given
-an argument, to affect subsequent include-directory options additively,
-so that if one said
-
- -pedantic -iprefix $(prefix) \
- -idirafter -ino-pedantic -ino-extern-c -iwithprefix -I g++-v3 \
- -iwithprefix -I g++-v3/ext
-
-the compiler would search $(prefix)/g++-v3 and not report
-pedantic warnings for files found there, but treat files in
-$(prefix)/g++-v3/ext pedantically. (The undocumented semantics
-of "-isystem" in g++ stink. Can they be rescinded? If not it
-must be replaced with something more rationally behaved.)
-
-All the C headers need the treatment above; in the standard these
-headers are mentioned in various chapters. Below, I have only
-mentioned those that present interesting implementation issues.
-
-The components identified as "mostly complete", below, have not been
-audited for conformance. In many cases where the library passes
-conformance tests we have non-conforming extensions that must be
-wrapped in #if guards for "pedantic" use, and in some cases renamed
-in a conforming way for continued use in the implementation regardless
-of conformance flags.
-
-The STL portion of the library still depends on a header
-stl/bits/stl_config.h full of #ifdef clauses. This apparatus
-should be replaced with autoconf/automake machinery.
-
-The SGI STL defines a type_traits<> template, specialized for
-many types in their code including the built-in numeric and
-pointer types and some library types, to direct optimizations of
-standard functions. The SGI compiler has been extended to generate
-specializations of this template automatically for user types,
-so that use of STL templates on user types can take advantage of
-these optimizations. Specializations for other, non-STL, types
-would make more optimizations possible, but extending the gcc
-compiler in the same way would be much better. Probably the next
-round of standardization will ratify this, but probably with
-changes, so it probably should be renamed to place it in the
-implementation namespace.
-
-The SGI STL also defines a large number of extensions visible in
-standard headers. (Other extensions that appear in separate headers
-have been sequestered in subdirectories ext/ and backward/.) All
-these extensions should be moved to other headers where possible,
-and in any case wrapped in a namespace (not std!), and (where kept
-in a standard header) girded about with macro guards. Some cannot be
-moved out of standard headers because they are used to implement
-standard features. The canonical method for accommodating these
-is to use a protected name, aliased in macro guards to a user-space
-name. Unfortunately C++ offers no satisfactory template typedef
-mechanism, so very ad-hoc and unsatisfactory aliasing must be used
-instead.
-
-Implementation of a template typedef mechanism should have the highest
-priority among possible extensions, on the same level as implementation
-of the template "export" feature.
-
-Chapter 18 Language support
-----------------------------
-
-Headers: <limits> <new> <typeinfo> <exception>
-C headers: <cstddef> <climits> <cfloat> <cstdarg> <csetjmp>
- <ctime> <csignal> <cstdlib> (also 21, 25, 26)
-
-This defines the built-in exceptions, rtti, numeric_limits<>,
-operator new and delete. Much of this is provided by the
-compiler in its static runtime library.
-
-Work to do includes defining numeric_limits<> specializations in
-separate files for all target architectures. Values for integer types
-except for bool and wchar_t are readily obtained from the C header
-<limits.h>, but values for the remaining numeric types (bool, wchar_t,
-float, double, long double) must be entered manually. This is
-largely dog work except for those members whose values are not
-easily deduced from available documentation. Also, this involves
-some work in target configuration to identify the correct choice of
-file to build against and to install.
-
-The definitions of the various operators new and delete must be
-made thread-safe, which depends on a portable exclusion mechanism,
-discussed under chapter 20. Of course there is always plenty of
-room for improvements to the speed of operators new and delete.
-
-<cstdarg>, in Glibc, defines some macros that gcc does not allow to
-be wrapped into an inline function. Probably this header will demand
-attention whenever a new target is chosen. The functions atexit(),
-exit(), and abort() in cstdlib have different semantics in C++, so
-must be re-implemented for C++.
-
-Chapter 19 Diagnostics
------------------------
-
-Headers: <stdexcept>
-C headers: <cassert> <cerrno>
-
-This defines the standard exception objects, which are "mostly complete".
-Cygnus has a version, and now SGI provides a slightly different one.
-It makes little difference which we use.
-
-The C global name "errno", which C allows to be a variable or a macro,
-is required in C++ to be a macro. For MT it must typically result in
-a function call.
-
-Chapter 20 Utilities
----------------------
-Headers: <utility> <functional> <memory>
-C header: <ctime> (also in 18)
-
-SGI STL provides "mostly complete" versions of all the components
-defined in this chapter. However, the auto_ptr<> implementation
-is known to be wrong. Furthermore, the standard definition of it
-is known to be unimplementable as written. A minor change to the
-standard would fix it, and auto_ptr<> should be adjusted to match.
-
-Multi-threading affects the allocator implementation, and there must
-be configuration/installation choices for different users' MT
-requirements. Anyway, users will want to tune allocator options
-to support different target conditions, MT or no.
-
-The primitives used for MT implementation should be exposed, as an
-extension, for users' own work. We need cross-CPU "mutex" support,
-multi-processor shared-memory atomic integer operations, and single-
-processor uninterruptible integer operations, and all three configurable
-to be stubbed out for non-MT use, or to use an appropriately-loaded
-dynamic library for the actual runtime environment, or statically
-compiled in for cases where the target architecture is known.
-
-Chapter 21 String
-------------------
-Headers: <string>
-C headers: <cctype> <cwctype> <cstring> <cwchar> (also in 27)
- <cstdlib> (also in 18, 25, 26)
-
-We have "mostly-complete" char_traits<> implementations. Many of the
-char_traits<char> operations might be optimized further using existing
-proprietary language extensions.
-
-We have a "mostly-complete" basic_string<> implementation. The work
-to manually instantiate char and wchar_t specializations in object
-files to improve link-time behavior is extremely unsatisfactory,
-literally tripling library-build time with no commensurate improvement
-in static program link sizes. It must be redone. (Similar work is
-needed for some components in chapters 22 and 27.)
-
-Other work needed for strings is MT-safety, as discussed under the
-chapter 20 heading.
-
-The standard C type mbstate_t from <cwchar> and used in char_traits<>
-must be different in C++ than in C, because in C++ the default constructor
-value mbstate_t() must be the "base" or "ground" sequence state.
-(According to the likely resolution of a recently raised Core issue,
-this may become unnecessary. However, there are other reasons to
-use a state type not as limited as whatever the C library provides.)
-If we might want to provide conversions from (e.g.) internally-
-represented EUC-wide to externally-represented Unicode, or vice-
-versa, the mbstate_t we choose will need to be more accommodating
-than what might be provided by an underlying C library.
-
-There remain some basic_string template-member functions which do
-not overload properly with their non-template brethren. The infamous
-hack akin to what was done in vector<> is needed, to conform to
-23.1.1 para 10. The CHECKLIST items for basic_string marked 'X',
-or incomplete, are so marked for this reason.
-
-Replacing the string iterators, which currently are simple character
-pointers, with class objects would greatly increase the safety of the
-client interface, and also permit a "debug" mode in which range,
-ownership, and validity are rigorously checked. The current use of
-raw pointers as string iterators is evil. vector<> iterators need the
-same treatment. Note that the current implementation freely mixes
-pointers and iterators, and that must be fixed before safer iterators
-can be introduced.
-
-Some of the functions in <cstring> are different from the C version.
-generally overloaded on const and non-const argument pointers. For
-example, in <cstring> strchr is overloaded. The functions isupper
-etc. in <cctype> typically implemented as macros in C are functions
-in C++, because they are overloaded with others of the same name
-defined in <locale>.
-
-Many of the functions required in <cwctype> and <cwchar> cannot be
-implemented using underlying C facilities on intended targets because
-such facilities only partly exist.
-
-Chapter 22 Locale
-------------------
-Headers: <locale>
-C headers: <clocale>
-
-We have a "mostly complete" class locale, with the exception of
-code for constructing, and handling the names of, named locales.
-The ways that locales are named (particularly when categories
-(e.g. LC_TIME, LC_COLLATE) are different) varies among all target
-environments. This code must be written in various versions and
-chosen by configuration parameters.
-
-Members of many of the facets defined in <locale> are stubs. Generally,
-there are two sets of facets: the base class facets (which are supposed
-to implement the "C" locale) and the "byname" facets, which are supposed
-to read files to determine their behavior. The base ctype<>, collate<>,
-and numpunct<> facets are "mostly complete", except that the table of
-bitmask values used for "is" operations, and corresponding mask values,
-are still defined in libio and just included/linked. (We will need to
-implement these tables independently, soon, but should take advantage
-of libio where possible.) The num_put<>::put members for integer types
-are "mostly complete".
-
-A complete list of what has and has not been implemented may be
-found in CHECKLIST. However, note that the current definition of
-codecvt<wchar_t,char,mbstate_t> is wrong. It should simply write
-out the raw bytes representing the wide characters, rather than
-trying to convert each to a corresponding single "char" value.
-
-Some of the facets are more important than others. Specifically,
-the members of ctype<>, numpunct<>, num_put<>, and num_get<> facets
-are used by other library facilities defined in <string>, <istream>,
-and <ostream>, and the codecvt<> facet is used by basic_filebuf<>
-in <fstream>, so a conforming iostream implementation depends on
-these.
-
-The "long long" type eventually must be supported, but code mentioning
-it should be wrapped in #if guards to allow pedantic-mode compiling.
-
-Performance of num_put<> and num_get<> depend critically on
-caching computed values in ios_base objects, and on extensions
-to the interface with streambufs.
-
-Specifically: retrieving a copy of the locale object, extracting
-the needed facets, and gathering data from them, for each call to
-(e.g.) operator<< would be prohibitively slow. To cache format
-data for use by num_put<> and num_get<> we have a _Format_cache<>
-object stored in the ios_base::pword() array. This is constructed
-and initialized lazily, and is organized purely for utility. It
-is discarded when a new locale with different facets is imbued.
-
-Using only the public interfaces of the iterator arguments to the
-facet functions would limit performance by forbidding "vector-style"
-character operations. The streambuf iterator optimizations are
-described under chapter 24, but facets can also bypass the streambuf
-iterators via explicit specializations and operate directly on the
-streambufs, and use extended interfaces to get direct access to the
-streambuf internal buffer arrays. These extensions are mentioned
-under chapter 27. These optimizations are particularly important
-for input parsing.
-
-Unused virtual members of locale facets can be omitted, as mentioned
-above, by a smart linker.
-
-Chapter 23 Containers
-----------------------
-Headers: <deque> <list> <queue> <stack> <vector> <map> <set> <bitset>
-
-All the components in chapter 23 are implemented in the SGI STL.
-They are "mostly complete"; they include a large number of
-nonconforming extensions which must be wrapped. Some of these
-are used internally and must be renamed or duplicated.
-
-The SGI components are optimized for large-memory environments. For
-embedded targets, different criteria might be more appropriate. Users
-will want to be able to tune this behavior. We should provide
-ways for users to compile the library with different memory usage
-characteristics.
-
-A lot more work is needed on factoring out common code from different
-specializations to reduce code size here and in chapter 25. The
-easiest fix for this would be a compiler/ABI improvement that allows
-the compiler to recognize when a specialization depends only on the
-size (or other gross quality) of a template argument, and allow the
-linker to share the code with similar specializations. In its
-absence, many of the algorithms and containers can be partial-
-specialized, at least for the case of pointers, but this only solves
-a small part of the problem. Use of a type_traits-style template
-allows a few more optimization opportunities, more if the compiler
-can generate the specializations automatically.
-
-As an optimization, containers can specialize on the default allocator
-and bypass it, or take advantage of details of its implementation
-after it has been improved upon.
-
-Replacing the vector iterators, which currently are simple element
-pointers, with class objects would greatly increase the safety of the
-client interface, and also permit a "debug" mode in which range,
-ownership, and validity are rigorously checked. The current use of
-pointers for iterators is evil.
-
-As mentioned for chapter 24, the deque iterator is a good example of
-an opportunity to implement a "staged" iterator that would benefit
-from specializations of some algorithms.
-
-Chapter 24 Iterators
----------------------
-Headers: <iterator>
-
-Standard iterators are "mostly complete", with the exception of
-the stream iterators, which are not yet templatized on the
-stream type. Also, the base class template iterator<> appears
-to be wrong, so everything derived from it must also be wrong,
-currently.
-
-The streambuf iterators (currently located in stl/bits/std_iterator.h,
-but should be under bits/) can be rewritten to take advantage of
-friendship with the streambuf implementation.
-
-Matt Austern has identified opportunities where certain iterator
-types, particularly including streambuf iterators and deque
-iterators, have a "two-stage" quality, such that an intermediate
-limit can be checked much more quickly than the true limit on
-range operations. If identified with a member of iterator_traits,
-algorithms may be specialized for this case. Of course the
-iterators that have this quality can be identified by specializing
-a traits class.
-
-Many of the algorithms must be specialized for the streambuf
-iterators, to take advantage of block-mode operations, in order
-to allow iostream/locale operations' performance not to suffer.
-It may be that they could be treated as staged iterators and
-take advantage of those optimizations.
-
-Chapter 25 Algorithms
-----------------------
-Headers: <algorithm>
-C headers: <cstdlib> (also in 18, 21, 26))
-
-The algorithms are "mostly complete". As mentioned above, they
-are optimized for speed at the expense of code and data size.
-
-Specializations of many of the algorithms for non-STL types would
-give performance improvements, but we must use great care not to
-interfere with fragile template overloading semantics for the
-standard interfaces. Conventionally the standard function template
-interface is an inline which delegates to a non-standard function
-which is then overloaded (this is already done in many places in
-the library). Particularly appealing opportunities for the sake of
-iostream performance are for copy and find applied to streambuf
-iterators or (as noted elsewhere) for staged iterators, of which
-the streambuf iterators are a good example.
-
-The bsearch and qsort functions cannot be overloaded properly as
-required by the standard because gcc does not yet allow overloading
-on the extern-"C"-ness of a function pointer.
-
-Chapter 26 Numerics
---------------------
-Headers: <complex> <valarray> <numeric>
-C headers: <cmath>, <cstdlib> (also 18, 21, 25)
-
-Numeric components: Gabriel dos Reis's valarray, Drepper's complex,
-and the few algorithms from the STL are "mostly done". Of course
-optimization opportunities abound for the numerically literate. It
-is not clear whether the valarray implementation really conforms
-fully, in the assumptions it makes about aliasing (and lack thereof)
-in its arguments.
-
-The C div() and ldiv() functions are interesting, because they are the
-only case where a C library function returns a class object by value.
-Since the C++ type div_t must be different from the underlying C type
-(which is in the wrong namespace) the underlying functions div() and
-ldiv() cannot be re-used efficiently. Fortunately they are trivial to
-re-implement.
-
-Chapter 27 Iostreams
----------------------
-Headers: <iosfwd> <streambuf> <ios> <ostream> <istream> <iostream>
- <iomanip> <sstream> <fstream>
-C headers: <cstdio> <cwchar> (also in 21)
-
-Iostream is currently in a very incomplete state. <iosfwd>, <iomanip>,
-ios_base, and basic_ios<> are "mostly complete". basic_streambuf<> and
-basic_ostream<> are well along, but basic_istream<> has had little work
-done. The standard stream objects, <sstream> and <fstream> have been
-started; basic_filebuf<> "write" functions have been implemented just
-enough to do "hello, world".
-
-Most of the istream and ostream operators << and >> (with the exception
-of the op<<(integer) ones) have not been changed to use locale primitives,
-sentry objects, or char_traits members.
-
-All these templates should be manually instantiated for char and
-wchar_t in a way that links only used members into user programs.
-
-Streambuf is fertile ground for optimization extensions. An extended
-interface giving iterator access to its internal buffer would be very
-useful for other library components.
-
-Iostream operations (primarily operators << and >>) can take advantage
-of the case where user code has not specified a locale, and bypass locale
-operations entirely. The current implementation of op<</num_put<>::put,
-for the integer types, demonstrates how they can cache encoding details
-from the locale on each operation. There is lots more room for
-optimization in this area.
-
-The definition of the relationship between the standard streams
-cout et al. and stdout et al. requires something like a "stdiobuf".
-The SGI solution of using double-indirection to actually use a
-stdio FILE object for buffering is unsatisfactory, because it
-interferes with peephole loop optimizations.
-
-The <sstream> header work has begun. stringbuf can benefit from
-friendship with basic_string<> and basic_string<>::_Rep to use
-those objects directly as buffers, and avoid allocating and making
-copies.
-
-The basic_filebuf<> template is a complex beast. It is specified to
-use the locale facet codecvt<> to translate characters between native
-files and the locale character encoding. In general this involves
-two buffers, one of "char" representing the file and another of
-"char_type", for the stream, with codecvt<> translating. The process
-is complicated by the variable-length nature of the translation, and
-the need to seek to corresponding places in the two representations.
-For the case of basic_filebuf<char>, when no translation is needed,
-a single buffer suffices. A specialized filebuf can be used to reduce
-code space overhead when no locale has been imbued. Matt Austern's
-work at SGI will be useful, perhaps directly as a source of code, or
-at least as an example to draw on.
-
-Filebuf, almost uniquely (cf. operator new), depends heavily on
-underlying environmental facilities. In current releases iostream
-depends fairly heavily on libio constant definitions, but it should
-be made independent. It also depends on operating system primitives
-for file operations. There is immense room for optimizations using
-(e.g.) mmap for reading. The shadow/ directory wraps, besides the
-standard C headers, the libio.h and unistd.h headers, for use mainly
-by filebuf. These wrappings have not been completed, though there
-is scaffolding in place.
-
-The encapulation of certain C header <cstdio> names presents an
-interesting problem. It is possible to define an inline std::fprintf()
-implemented in terms of the 'extern "C"' vfprintf(), but there is no
-standard vfscanf() to use to implement std::fscanf(). It appears that
-vfscanf but be re-implemented in C++ for targets where no vfscanf
-extension has been defined. This is interesting in that it seems
-to be the only significant case in the C library where this kind of
-rewriting is necessary. (Of course Glibc provides the vfscanf()
-extension.) (The functions related to exit() must be rewritten
-for other reasons.)
-
-
-Annex D
--------
-Headers: <strstream>
-
-Annex D defines many non-library features, and many minor
-modifications to various headers, and a complete header.
-It is "mostly done", except that the libstdc++-2 <strstream>
-header has not been adopted into the library, or checked to
-verify that it matches the draft in those details that were
-clarified by the committee. Certainly it must at least be
-moved into the std namespace.
-
-We still need to wrap all the deprecated features in #if guards
-so that pedantic compile modes can detect their use.
-
-Nonstandard Extensions
-----------------------
-Headers: <iostream.h> <strstream.h> <hash> <rbtree>
- <pthread_alloc> <stdiobuf> (etc.)
-
-User code has come to depend on a variety of nonstandard components
-that we must not omit. Much of this code can be adopted from
-libstdc++-v2 or from the SGI STL. This particularly includes
-<iostream.h>, <strstream.h>, and various SGI extensions such
-as <hash_map.h>. Many of these are already placed in the
-subdirectories ext/ and backward/. (Note that it is better to
-include them via "<backward/hash_map.h>" or "<ext/hash_map>" than
-to search the subdirectory itself via a "-I" directive.
-
diff --git a/libstdc++-v3/docs/html/17_intro/HEADER_POLICY b/libstdc++-v3/docs/html/17_intro/HEADER_POLICY
deleted file mode 100644
index c6fa6d38b54..00000000000
--- a/libstdc++-v3/docs/html/17_intro/HEADER_POLICY
+++ /dev/null
@@ -1,164 +0,0 @@
-
-Header Policy
--------------
-
-The C++ Standard specifies many mutual dependencies among the
-headers it defines. It offers no advice on how to arrange headers
-to avoid problems. The worst such problem is circular references.
-Most simply this is "A includes B, B includes A":
-
- // file <A> // file <B>
- #ifndef A #ifndef B
- #define A 1 #define B 1
- #include <B> #include <A>
- typedef int A_type; typedef int B_type;
- extern B_type g(A_type); extern A_type f(B_type);
- #endif /* A */ #endif /* B */
-
- // file C.cc
- #include <A>
-
-The typical effect of such an "include loop" may be seen by tracing
-the preprocessor activity:
-
- C // file C.cc
- C #include <A>
- A // file <A>
- A #ifndef A
- A #define A 1
- A #include <B>
- B // file <B>
- B #ifndef B
- B #define B 1
- B #include <A>
- A // file <A>
- A #ifndef A <-- oops, cpp symbol A defined already
- A ... <-- skip <A> contents
- A #endif
- B typedef int B_type;
- B extern A_type f(B_type); <-- error, A_type not defined yet.
- B #endif /* B */
- A typedef int A_type;
- A extern B_type g(A_type);
- A #endif /* A */
-
-The main symptom of #include loops is that definitions from file <A>
-are not available after the #include <A> for certain include orders.
-The number of standard headers makes testing all permutations of
-include order impractical, so a policy is needed to prevent chaos.
-In any case, for some standard headers (as for the above) no ordering
-can eliminate the loop.
-
-Other factors influence the policy. Typical implementations of
-Make (unfortunately including GNU make) have bugs relating to file
-names with no suffix, that lead to such problems as failure to track
-dependencies on such files and an inclination to _delete_ them.
-Therefore, headers used in building the library are always of the
-form <bits/yyy.h> generally, or specifically <bits/std_xxx.h> for
-an equivalent to the standard header <xxx>.
-
-Standard headers <xxx> are all placed under directory std/, and
-are ignored except during installation. These headers simply
-#include the corresponding header <bits/std_xxx.h>.
-
-Standard substitute headers <bits/std_xxx.h> that have any complexity
-may sub-include other headers. When they sub-include non-standard
-headers, they first include all the headers required for that
-non-standard header.
-
-Mutual dependencies are handled by splitting up the declarations
-intended for standard headers among two or more files, and then
-interleaving them as needed. For example, we replace <A> and <B>
-above, as follows:
-
- // file <bits/std_A.h>
- #ifndef _CPP_A
- #define _CPP_A
- # include <bits/A_types.h>
- # include <bits/B_types.h>
- # include <bits/A_funs.h>
- #endif
-
- // file <bits/std_B.h>
- #ifndef _CPP_B
- #define _CPP_B
- # include <bits/A_types.h>
- # include <bits/B_types.h>
- # include <bits/B_funs.h>
- #endif
-
- // file <bits/A_types.h>
- #ifndef _CPP_BITS_A_TYPES_H
- #define _CPP_BITS_A_TYPES_H
- typedef int A_type;
- #endif
-
- // file <bits/B_types.h>
- #ifndef _CPP_BITS_B_TYPES_H
- #define _CPP_BITS_B_TYPES_H
- typedef int B_type;
- #endif
-
- // file <bits/A_funs.h>
- #ifndef _CPP_BITS_A_FUNS_H
- #define _CPP_BITS_A_FUNS_H
- extern B_type g(A_type);
- #endif
-
- // file <bits/B_funs.h>
- #ifndef _CPP_BITS_B_FUNS_H
- #define _CPP_BITS_B_FUNS_H
- extern A_type f(B_type);
- #endif
-
-Of course we have the standard headers under their mandated names:
-
- // file <std/A>
- #ifndef _CPP_A
- #define _CPP_A
- # include <bits/std_A.h>
- #endif
-
- // file <std/B>
- #ifndef _CPP_B
- #define _CPP_B
- # include <bits/std_B.h>
- #endif
-
-Notice that the include guards are named uniformly except that
-the guard for standard header <bits/std_A.h> is just _CPP_A,
-identically as the header <A> in std/.
-
-At installation the files std/* can be replaced by symbolic links,
-or simply copied into place as is. The result is:
-
- include/
- include/A -> bits/std_A.h
- include/B -> bits/std_A.h
- include/bits/
- include/bits/std_A.h
- include/bits/std_B.h
- include/bits/A_types.h
- include/bits/B_types.h
- include/bits/A_funs.h
- include/bits/B_funs.h
-
-
-Of course splitting up standard headers this way creates
-complexity, so it is not done routinely, but only in response
-to discovered needs.
-
-Another reason to split up headers is for support of separate
-compilation of templates. This interacts with the foregoing
-because template definitions typically have many more dependencies
-on other headers than do pure declarations. Non-inline template
-definitions are placed in a separate ".tcc" file that is included
-by the standard header, and any other standard header that
-requires definitions from it for its implementation.
-
-The key to preventing chaos, given the above structure, is:
-
- Only standard headers <bits/std_xxxx.h> should sub-include
- other headers.
-
-
diff --git a/libstdc++-v3/docs/html/17_intro/PROBLEMS b/libstdc++-v3/docs/html/17_intro/PROBLEMS
deleted file mode 100644
index 52223911295..00000000000
--- a/libstdc++-v3/docs/html/17_intro/PROBLEMS
+++ /dev/null
@@ -1,8 +0,0 @@
-Irix 6.2:
-- math.h: defines extern long double hypotl( long double ); i.e., only
- one argument. They've fixed this in 6.3.
-
-DES OSF 3.2 & 4.0:
-- libm define sincos, sincosf, and sincosl but there are no prototypes and
- especially the return type is nowhere defined. The functions are
- documented in the man pages, though.
diff --git a/libstdc++-v3/docs/html/17_intro/RELEASE-NOTES b/libstdc++-v3/docs/html/17_intro/RELEASE-NOTES
deleted file mode 100644
index 79920407c21..00000000000
--- a/libstdc++-v3/docs/html/17_intro/RELEASE-NOTES
+++ /dev/null
@@ -1,83 +0,0 @@
-2002-05-02
-
-Release Notes
--------------
-The Standard C++ Library, or libstdc++-v3, is an ongoing project
-to fully implement the ISO 14882 Standard C++ library as described in
-chapters 17 through 27 and annex D.
-
-This is the fifteenth snapshot of the libstdc++ rewrite. It still
-has some incomplet and incorrekt parts, but it's a lot less incomplete
-and incorrect than some of the earlier snapshots, and quite usable.
-
-The Standard C++ Library, follows an open development model,
-attempting to be fully buzzword, bazaar, and GNU compliant. Full
-details on participating, including contributor guidelines, mailing
-list subscription, mailing list archives, up-to-date documentation,
-and various and sundry other details can be found at the following
-URL:
-
- http://gcc.gnu.org/libstdc++/
-
-
-New:
----
-- more doxygen documentation
-- more named locale fixups
-- stdio_filebuf that takes fd, FILE
-- io performance tuning
-- allocation tuning, valgrind fixups
-- __cxa_demangle now supported
-
-
-Bugs fixed:
------------
-6533, 6513, 6501, 6511, 5820, 6414, 4150, 6360, 4164, 1072, 6124,
-5180, 3457, 3139, 5268, 3983, 5542, 3129, 5207, 3719, 5734
-+ others.
-
-
-What doesn't:
--------------
-- see BUGS.
-
-
-Build and Install
------------------
-Up to date build and install directions can be found at:
-http://gcc.gnu.org/libstdc++/install.html
-
-
-Contact:
---------
-Places have changed from previous snapshots. The web page, which has
-information about joining the mailing list and searching its archives,
-CVS access, and contribution information is now at:
-
- http://gcc.gnu.org/libstdc++/
-
-Please note that the mailing list has moved, and is now hosted on
-gcc.gnu.org. (The web site above has the most up-to-date info.)
-
-Obtain the library snapshot via ftp (including these release notes) from
-
- ftp://gcc.gnu.org/pub/libstdc++/
-
-The library is maintained by Benjamin Kosnik, Gabriel
-Dos Reis, Phil Edwards, Ulrich Drepper, Loren James Rittle,
-and Paolo Carlini.
-
-
-Development tools:
-------------------
-
-You will need a current version of gcc to compile this snapshot of
-libstdc++. The use of the latest stable gcc-3.0.x release (3.0.4), CVS
-gcc, or gcc-3_1-branch is strongly recommended, which may also
-introduce additional dependencies for up-to-date binutils. In
-particular, current binutils (2.12) is recommended so that symbol
-versioning for the library is on by default. In addition, you may need
-up-to-date tools for modifying Makefiles and regenerating configure
-scripts: automake (version 1.4), autoconf (version 2.13 and higher),
-and libtool.
-
diff --git a/libstdc++-v3/docs/html/17_intro/TODO b/libstdc++-v3/docs/html/17_intro/TODO
deleted file mode 100644
index a0a257c4876..00000000000
--- a/libstdc++-v3/docs/html/17_intro/TODO
+++ /dev/null
@@ -1,164 +0,0 @@
-std::allocator
-
- - persistent allocator
-
- - shared memory allocator (use or link to boost::shmem::allocator)
-
-std::string
-
- - document __gnu_cxx::__versa_string, add new policies
- (Policy-based design incorporating COW
- vs. deep copy issues, MT scalability
- See Andrei Alexandrescu, June 2001, C/C++ Users Journal
- "Generic<Programming>: A Policy-Based basic_string Implementation"
- http://www.cuj.com/documents/s=7994/cujcexp1906alexandr/)
-
- - operator!= and utility/rel_ops operators need to be made safe with
- string and vector iterator classes. basic_string::reverse_iterator may
- be implemented incorrectly, or need things like
- operator==(__normal_iterator, const char*&), and swap(vector)
-
- - 'do the right thing' ctor fixing needs to be done for string. This
- is still subject to some debate on the library issues list, so I
- suggest punting till the dust clears.
-
- - fix template members of basic_string<> to overload iterators and
- non-iterators properly. (This is the infamous hack as in vector<> etc
- 23.1.1 para 10.)
-
-std::locale
-
- - implement __convert_to_v and __convert_from_v without "C" library
- functions and and LANG environment variable dependencies.
-
- - use localedata to implement generic named (non-MT-safe) locales?
- Figure out a way to use ICU data, like libjava? Re-package and use
- the glibc localedata, even if we aren't on linux? Need a generic
- locale model that does something besides the "C" locale.
-
- - make locale::classic() separate from named locale code. This will
- improve the static linkage situation, but will require new
- initialization code. In particular, we need lazy-initialization of
- locale::classic(), and maybe the has_facet/use_facet functions for all
- the required facets. The end goal is a self-contained
- locale_init.cc, or one with transitive closure without the locale
- instantiations (locale-inst.cc) or the named locale bits
- (localename.cc).
-
- - Jerry(?)/Paolo(?) work on __float_to_char.
-
- - minimize ctype convertion in data facets, see numpunct/num_put/num_get
-
-std::basic_filebuf, 27_io
-
- - wfilebuf, get variable-encoding working and tested, including
- positioning and seeking. (I think this may be done now)
-
- - wfilebuf testsuite (getting there...)
-
- - look ahead for unbuffered io, so know when multiple putc's can be
- coalesced.
-
- - unlocked __basic_file + new mutext class
-
- - optimized the sentries for istream/ostream
-
- - v2 vs. v3 speed
-
- - add optimization hooks (esp. whitespace eating) to streambuf
- - add _M_begin() and _M_end() to streambuf
- - add algorithm specializations for [io]streambuf_iterator (copy find etc.)
-
-testsuite
-
- - valgrind hooks into make check so can tell memory leakage
- Some commentary on the valgrind users list
-
- - add hooks for qmtest, pychart, other for visual diffs
-
- - automatic testing of interactive tests
-
- - diffing generated output files
-
- - provide testsuites for numerics.
-
- - make check-abi needs to have full symbol checking. Scope the LSB
- testsuite, see what's going on with the typeinfo etc. bits.
-
- - try to do a better job of ABI testing, with instantiations of all
- standard-specified types checked, not just exported symbols.
-
-g++/binutils
-
- - compression for wide versions of basic types, not just narrow
-
-threads
-
- - create MT abstraction layer for atomicity to pthreads.
-
- - solution for threads + C++.
-
-other/random
-
-- relocations, work on getting these down
-
-- issues with __builtin_memcpy and std::copy from Jerry Quinn
- http://gcc.gnu.org/ml/libstdc++/2003-02/msg00056.html
- http://gcc.gnu.org/ml/libstdc++/2003-02/msg00302.html
- http://gcc.gnu.org/ml/gcc/2003-10/msg01305.html
-
-- fix dependency tracking for includes (.h, .tcc) during build process.
-
-- coordinate with "C" library people the "C" compatibility headers.
-
-- Think about naming all member data and member functions consistently
- as per
- funtions: _M_verb_adverb
- data: _M_noun_adjective
-
-- A C++STYLE guide that deals with nested namespaces, and that
-everybody can live with.
-
-- exception specifications need to be reviewed for all parts of the
-library support and utility areas, particularly <new>. Part of this is
-a standards issue, where the 27_io standard is really in an odd
-spot. Do the work to make this consistent.
-
-- C-related issues WRT to io and filepos, mbstate_t. Seeking in wide
-streams. May need to define operators for mbstate_t so that
-'mbstate_t& == mbstate_t' is something that can be done.
-
-- scoping/linking issues WRT to C structs need to be worked out. See
-Nathan's commentary on cantrip, http://www.cantrip.org/cheaders.html
-
-- auto_ptr: seems to be some disagreement on what is
-standards-conformant behavior, specially on conversion operators.
-
-- list::assignment operator needs const_cast
-
-- a cleaner division between pointers-to-value_type and true iterators
-needs to be drawn throughout the entire STL implementation.
-
-- priority_queue conversions may be non-conformant
-
-- Protect valarray::result_type (not Standard) and make it work with
- the various helper classes.
-
-- Make sure `valarray<bool> & == _Expr<_BinClos<logical_or,_ValArray,_ValArray,double,double>,bool>'
- is defined
-
-- All of the Library working group closed issues need to be
-addressed. Some of them proposed resolutions are already in the v-3
-sources, with macro-guards. Also, same with the TR.
-
-- need to think about doing a .texi or DocBook manual, instead of all
-these HTML pages. In addition, it would be nice to have a full manual,
-instead of a lot of ad-hoc pages. Weaknesses include numerics, locale,
-and io.
-
-- add FAQ entries -- improve the install instructions
-
-- add HOWTO entries
-
-- do more doxygen manpages
-
diff --git a/libstdc++-v3/docs/html/17_intro/concept_check.diff b/libstdc++-v3/docs/html/17_intro/concept_check.diff
deleted file mode 100644
index afb17f5efd6..00000000000
--- a/libstdc++-v3/docs/html/17_intro/concept_check.diff
+++ /dev/null
@@ -1,382 +0,0 @@
-
-Changes made while bringing boost/concept_check.hpp to v3's concept_check.h:
-
-1) File format changed from DOS to Unix.
-2) Boost config.hpp and other workaround files dropped (unneeded in g++ v3).
-3) Conditionally-compiled code depending on those "breakage" macros was
- removed, or not, depending on the macro, so that the macros themselves
- are gone. Since the same code would always be compiled, let's make it
- easier on the reader and a few milliseconds faster for cpplib.
-4) Tests for NDEBUG were removed; if NDEBUG is defined, none of the checking
- code will even be included.
-5) BOOST_CLASS_REQUIRES* changed to accept a namespace parameter.
-6) SameTypeConcept added (simple wrapper around existing code).
-7) An unused variable in OutputIteratorConcept was removed.
-
-At checkin, this was the exact diff, modulo the end-of-line character changes:
-
-
---- concept_check.hpp.orig Sun Apr 1 08:59:46 2001
-+++ boost_concept_check.h Mon Apr 2 18:56:41 2001
-@@ -5,20 +5,15 @@
- // "as is" without express or implied warranty, and with no claim as
- // to its suitability for any purpose.
- //
-+
-+// GCC Note: based on version 1.12.0 of the Boost library.
- #ifndef BOOST_CONCEPT_CHECKS_HPP
- #define BOOST_CONCEPT_CHECKS_HPP
-
--#include <boost/config.hpp>
--#include <boost/iterator.hpp>
--#include <boost/iterator.hpp>
--#include <utility>
--#include <boost/pending/limits.hpp>
--
--#if (__GNUC__) || defined(__KCC) || defined(__ghs) || defined(__MWERKS__)
--#define BOOST_FPTR &
--#else
--#define BOOST_FPTR
--#endif
-+#pragma GCC system_header
-+#include <bits/stl_iterator_base_types.h> // for traits and tags
-+#include <utility> // for pair<>
-+
-
- namespace boost {
-
-@@ -27,80 +22,64 @@
- template <class Concept>
- void function_requires()
- {
--#if !defined(NDEBUG)
-- void (Concept::*x)() = BOOST_FPTR Concept::constraints;
-+ void (Concept::*x)() = &Concept::constraints;
- ignore_unused_variable_warning(x);
--#endif
- }
-
--// The BOOST_CLASS_REQUIRES macros use function pointers as
--// template parameters, which VC++ does not support.
--
--#if defined(BOOST_NO_FUNCTION_PTR_TEMPLATE_PARAMETERS)
--
--#define BOOST_CLASS_REQUIRES(type_var, concept)
--#define BOOST_CLASS_REQUIRES2(type_var1, type_var2, concept)
--#define BOOST_CLASS_REQUIRES3(type_var1, type_var2, type_var3, concept)
--#define BOOST_CLASS_REQUIRES4(type_var1, type_var2, type_var3, type_var4, concept)
-
--#else
--
--#define BOOST_CLASS_REQUIRES(type_var, concept) \
-- typedef void (concept <type_var>::* func##type_var##concept)(); \
-+#define BOOST_CLASS_REQUIRES(type_var, ns, concept) \
-+ typedef void (ns::concept <type_var>::* func##type_var##concept)(); \
- template <func##type_var##concept _Tp1> \
- struct concept_checking_##type_var##concept { }; \
- typedef concept_checking_##type_var##concept< \
-- BOOST_FPTR concept <type_var>::constraints> \
-+ &ns::concept <type_var>::constraints> \
- concept_checking_typedef_##type_var##concept
-
--#define BOOST_CLASS_REQUIRES2(type_var1, type_var2, concept) \
-- typedef void (concept <type_var1,type_var2>::* func##type_var1##type_var2##concept)(); \
-+#define BOOST_CLASS_REQUIRES2(type_var1, type_var2, ns, concept) \
-+ typedef void (ns::concept <type_var1,type_var2>::* func##type_var1##type_var2##concept)(); \
- template <func##type_var1##type_var2##concept _Tp1> \
- struct concept_checking_##type_var1##type_var2##concept { }; \
- typedef concept_checking_##type_var1##type_var2##concept< \
-- BOOST_FPTR concept <type_var1,type_var2>::constraints> \
-+ &ns::concept <type_var1,type_var2>::constraints> \
- concept_checking_typedef_##type_var1##type_var2##concept
-
--#define BOOST_CLASS_REQUIRES3(type_var1, type_var2, type_var3, concept) \
-- typedef void (concept <type_var1,type_var2,type_var3>::* func##type_var1##type_var2##type_var3##concept)(); \
-+#define BOOST_CLASS_REQUIRES3(type_var1, type_var2, type_var3, ns, concept) \
-+ typedef void (ns::concept <type_var1,type_var2,type_var3>::* func##type_var1##type_var2##type_var3##concept)(); \
- template <func##type_var1##type_var2##type_var3##concept _Tp1> \
- struct concept_checking_##type_var1##type_var2##type_var3##concept { }; \
- typedef concept_checking_##type_var1##type_var2##type_var3##concept< \
-- BOOST_FPTR concept <type_var1,type_var2,type_var3>::constraints> \
-+ &ns::concept <type_var1,type_var2,type_var3>::constraints> \
- concept_checking_typedef_##type_var1##type_var2##type_var3##concept
-
--#define BOOST_CLASS_REQUIRES4(type_var1, type_var2, type_var3, type_var4, concept) \
-- typedef void (concept <type_var1,type_var2,type_var3,type_var4>::* func##type_var1##type_var2##type_var3##type_var4##concept)(); \
-+#define BOOST_CLASS_REQUIRES4(type_var1, type_var2, type_var3, type_var4, ns, concept) \
-+ typedef void (ns::concept <type_var1,type_var2,type_var3,type_var4>::* func##type_var1##type_var2##type_var3##type_var4##concept)(); \
- template <func##type_var1##type_var2##type_var3##type_var4##concept _Tp1> \
- struct concept_checking_##type_var1##type_var2##type_var3##type_var4##concept { }; \
- typedef concept_checking_##type_var1##type_var2##type_var3##type_var4##concept< \
-- BOOST_FPTR concept <type_var1,type_var2,type_var3,type_var4>::constraints> \
-+ &ns::concept <type_var1,type_var2,type_var3,type_var4>::constraints> \
- concept_checking_typedef_##type_var1##type_var2##type_var3##type_var4##concept
-
-
--#endif
--
--#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- template <class T, class U>
- struct require_same { };
-
- template <class T>
- struct require_same<T,T> { typedef T type; };
--#else
--// This version does not perform checking, but will not do any harm.
--template <class T, class U>
--struct require_same { typedef T type; };
--#endif
-+
-+ template <class T, class U>
-+ struct SameTypeConcept
-+ {
-+ void constraints() {
-+ typedef typename require_same<T, U>::type req;
-+ }
-+ };
-
- template <class T>
- struct IntegerConcept {
- void constraints() {
--#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- errortype_must_be_an_integer_type();
--#endif
- }
- };
--#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- template <> struct IntegerConcept<short> { void constraints() {} };
- template <> struct IntegerConcept<unsigned short> { void constraints() {} };
- template <> struct IntegerConcept<int> { void constraints() {} };
-@@ -108,32 +87,24 @@
- template <> struct IntegerConcept<long> { void constraints() {} };
- template <> struct IntegerConcept<unsigned long> { void constraints() {} };
- // etc.
--#endif
-
- template <class T>
- struct SignedIntegerConcept {
- void constraints() {
--#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- errortype_must_be_a_signed_integer_type();
--#endif
- }
- };
--#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- template <> struct SignedIntegerConcept<short> { void constraints() {} };
- template <> struct SignedIntegerConcept<int> { void constraints() {} };
- template <> struct SignedIntegerConcept<long> { void constraints() {} };
- // etc.
--#endif
-
- template <class T>
- struct UnsignedIntegerConcept {
- void constraints() {
--#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- errortype_must_be_an_unsigned_integer_type();
--#endif
- }
- };
--#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- template <> struct UnsignedIntegerConcept<unsigned short>
- { void constraints() {} };
- template <> struct UnsignedIntegerConcept<unsigned int>
-@@ -141,7 +112,6 @@
- template <> struct UnsignedIntegerConcept<unsigned long>
- { void constraints() {} };
- // etc.
--#endif
-
- //===========================================================================
- // Basic Concepts
-@@ -159,15 +129,11 @@
- struct AssignableConcept
- {
- void constraints() {
--#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
- a = a; // require assignment operator
--#endif
- const_constraints(a);
- }
- void const_constraints(const TT& b) {
--#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
- a = b; // const required for argument to assignment
--#endif
- }
- TT a;
- };
-@@ -196,17 +162,13 @@
- {
- void constraints() {
- TT b(a);
--#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
- a = a; // require assignment operator
--#endif
- const_constraints(a);
- ignore_unused_variable_warning(b);
- }
- void const_constraints(const TT& b) {
- TT c(b);
--#if !defined(_ITERATOR_) // back_insert_iterator broken for VC++ STL
- a = b; // const required for argument to assignment
--#endif
- ignore_unused_variable_warning(c);
- }
- TT a;
-@@ -304,6 +266,9 @@
- BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(-, SubtractOpConcept);
- BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT(%, ModOpConcept);
-
-+#undef BOOST_DEFINE_BINARY_PREDICATE_OP_CONSTRAINT
-+#undef BOOST_DEFINE_BINARY_OPERATOR_CONSTRAINT
-+
- //===========================================================================
- // Function Object Concepts
-
-@@ -318,7 +283,6 @@
- };
-
-
--#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- template <class Func>
- struct GeneratorConcept<Func,void>
- {
-@@ -327,7 +291,6 @@
- }
- Func f;
- };
--#endif
-
- template <class Func, class Return, class Arg>
- struct UnaryFunctionConcept
-@@ -340,7 +303,6 @@
- Return r;
- };
-
--#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- template <class Func, class Arg>
- struct UnaryFunctionConcept<Func, void, Arg> {
- void constraints() {
-@@ -348,7 +310,6 @@
- }
- Func f;
- };
--#endif
-
- template <class Func, class Return, class First, class Second>
- struct BinaryFunctionConcept
-@@ -362,7 +323,6 @@
- Return r;
- };
-
--#if !defined BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- template <class Func, class First, class Second>
- struct BinaryFunctionConcept<Func, void, First, Second>
- {
-@@ -373,7 +333,6 @@
- First first;
- Second second;
- };
--#endif
-
- template <class Func, class Arg>
- struct UnaryPredicateConcept
-@@ -422,9 +381,7 @@
- function_requires< AssignableConcept<TT> >();
- function_requires< DefaultConstructibleConcept<TT> >();
- function_requires< EqualityComparableConcept<TT> >();
--#ifndef BOOST_NO_STD_ITERATOR_TRAITS
- typedef typename std::iterator_traits<TT>::value_type V;
--#endif
- (void)*i; // require dereference operator
- }
- TT i;
-@@ -446,7 +403,6 @@
- void constraints() {
- function_requires< TrivialIteratorConcept<TT> >();
- // require iterator_traits typedef's
--#ifndef BOOST_NO_STD_ITERATOR_TRAITS
- typedef typename std::iterator_traits<TT>::difference_type D;
- function_requires< SignedIntegerConcept<D> >();
- typedef typename std::iterator_traits<TT>::reference R;
-@@ -455,7 +411,6 @@
- function_requires< ConvertibleConcept<
- typename std::iterator_traits<TT>::iterator_category,
- std::input_iterator_tag> >();
--#endif
- ++i; // require preincrement operator
- i++; // require postincrement operator
- }
-@@ -471,7 +426,7 @@
- i++; // require postincrement operator
- *i++ = t; // require postincrement and assignment
- }
-- TT i, j;
-+ TT i;
- ValueT t;
- };
-
-@@ -480,14 +435,12 @@
- {
- void constraints() {
- function_requires< InputIteratorConcept<TT> >();
--#ifndef BOOST_NO_STD_ITERATOR_TRAITS
- function_requires< ConvertibleConcept<
- typename std::iterator_traits<TT>::iterator_category,
- std::forward_iterator_tag> >();
- typedef typename std::iterator_traits<TT>::reference reference;
- reference r = *i;
- ignore_unused_variable_warning(r);
--#endif
- }
- TT i;
- };
-@@ -507,11 +460,9 @@
- {
- void constraints() {
- function_requires< ForwardIteratorConcept<TT> >();
--#ifndef BOOST_NO_STD_ITERATOR_TRAITS
- function_requires< ConvertibleConcept<
- typename std::iterator_traits<TT>::iterator_category,
- std::bidirectional_iterator_tag> >();
--#endif
- --i; // require predecrement operator
- i--; // require postdecrement operator
- }
-@@ -536,12 +487,10 @@
- void constraints() {
- function_requires< BidirectionalIteratorConcept<TT> >();
- function_requires< ComparableConcept<TT> >();
--#ifndef BOOST_NO_STD_ITERATOR_TRAITS
- function_requires< ConvertibleConcept<
- typename std::iterator_traits<TT>::iterator_category,
- std::random_access_iterator_tag> >();
- typedef typename std::iterator_traits<TT>::reference R;
--#endif
-
- i += n; // require assignment addition operator
- i = i + n; i = n + i; // require addition with difference type
-@@ -552,11 +501,7 @@
- }
- TT a, b;
- TT i, j;
--#ifndef BOOST_NO_STD_ITERATOR_TRAITS
- typename std::iterator_traits<TT>::difference_type n;
--#else
-- std::ptrdiff_t n;
--#endif
- };
-
- template <class TT>
-@@ -568,11 +513,7 @@
- i[n] = *i; // require element access and assignment
- }
- TT i;
--#ifndef BOOST_NO_STD_ITERATOR_TRAITS
- typename std::iterator_traits<TT>::difference_type n;
--#else
-- std::ptrdiff_t n;
--#endif
- };
-
- //===========================================================================
-
diff --git a/libstdc++-v3/docs/html/17_intro/confdeps.dot b/libstdc++-v3/docs/html/17_intro/confdeps.dot
deleted file mode 100644
index a62d28ce9dd..00000000000
--- a/libstdc++-v3/docs/html/17_intro/confdeps.dot
+++ /dev/null
@@ -1,14 +0,0 @@
-# Blatantly ripped out of the graphviz examples and modified. -pme
-digraph v3conf {
- size="6,6";
- node [color=lightblue2, style=filled];
- "aclocal.m4" -> "acinclude.m4";
- "configure" -> "aclocal.m4";
- "configure" -> "configure.ac";
- "configure" -> "crossconfig.m4";
- "configure" -> "linkage.m4";
- "[*/]Makefile.in" -> "Makefile.am";
- "[*/]Makefile.in" -> "configure.ac";
- "config.h.in" -> "acconfig.h";
- "config.h.in" -> "configure.ac";
-}
diff --git a/libstdc++-v3/docs/html/17_intro/confdeps.png b/libstdc++-v3/docs/html/17_intro/confdeps.png
deleted file mode 100644
index 5075aa869b1..00000000000
--- a/libstdc++-v3/docs/html/17_intro/confdeps.png
+++ /dev/null
Binary files differ
diff --git a/libstdc++-v3/docs/html/17_intro/configury.html b/libstdc++-v3/docs/html/17_intro/configury.html
deleted file mode 100644
index 4b676f0405e..00000000000
--- a/libstdc++-v3/docs/html/17_intro/configury.html
+++ /dev/null
@@ -1,289 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
- <meta name="DESCRIPTION" content="configury for libstdc++" />
- <meta name="GENERATOR" content="vi and eight fingers" />
- <title>libstdc++-v3 configury</title>
-<link rel="StyleSheet" href="../lib3styles.css" type='text/css' />
-<link rel="Start" href="../documentation.html" type="text/html"
- title="GNU C++ Standard Library" />
-</head>
-<body>
-
-<h1><code>&gt; open configury door</code></h1>
-<h1><code>&gt; look</code></h1>
-
-<p class="larger"><code>You are in a maze of twisty passages, all
-different.</code></p>
-<p class="larger"><code>It is dark. You are likely to be eaten by a
-Canadian cross build.</code></p>
-
-
-<hr />
-<h2>Notes on libstdc++-v3 configury</h2>
-<blockquote>
-No problem is insoluble in all conceivable circumstances.<br />
--- The Cosmic AC,
-<a href="http://mit.edu/tylerc/www/twt/LQ1.htm">The
-Last Question</a>, by Isaac Asimov
-</blockquote>
-<ul>
- <li><a href="#deps">what comes from where</a></li>
- <li><a href="#breakout">storing information in non-AC files, like
- configure.host</a></li>
- <li><a href="#general">general config notes</a></li>
- <li><a href="#aclayout">acinclude.m4 layout</a></li>
- <li><a href="#enable"><code>--enable</code> howto</a></li>
-</ul>
-
-<hr />
-<h3><a name="deps">what comes from where</a></h3>
-<p class="centered"><img src="confdeps.png"
- alt="Dependency graph in PNG graphics format. (Get a better browser!)" /></p>
-
-<p>Regenerate using a command sequence like
- <code>"aclocal-1.7 &amp;&amp; autoconf-2.59 &amp;&amp; autoheader-2.59
- &amp;&amp; automake-1.7"</code> as needed. And/or configure with
- --enable-maintainer-mode. The version numbers will vary depending on
- <a href="http://gcc.gnu.org/install/prerequisites.html">the current
- requirements</a> and your vendor's choice of installation names.
-</p>
-
-
-<hr />
-<h3><a name="breakout">storing information in non-AC files, like
- configure.host</a></h3>
-<p>Until that glorious day when we can use AC_TRY_LINK with a cross-compiler,
- we have to hardcode the results of what the tests would have shown if
- they could be run. So we have an inflexible mess like crossconfig.m4.
-</p>
-
-<p>Wouldn't it be nice if we could store that information in files like
- configure.host, which can be modified without needing to regenerate
- anything, and can even be tweaked without really knowing how the configury
- all works? Perhaps break the pieces of crossconfig.m4 out and place them in
- their appropriate config/{cpu,os} directory.
-</p>
-
-<p>Alas, writing macros like "<code>AC_DEFINE(HAVE_A_NICE_DAY)</code>" can
- only be done inside files which are passed through autoconf. Files which
- are pure shell script can be source'd at configure time. Files which
- contain autoconf macros must be processed with autoconf. We could still
- try breaking the pieces out into "config/*/cross.m4" bits, for instance,
- but then we would need arguments to aclocal/autoconf to properly find
- them all when generating configure. I would discourage that.
-</p>
-
-
-<hr />
-<h3><a name="general">general config notes</a></h3>
-<p>Lots of stuff got thrown out because the new autotools kindly generate
- the same (or better) shell code for us.
-</p>
-
-<p>Most comments should use {octothorpes, shibboleths, hash marks, pound
- signs, whatevers} rather than "dnl". Nearly all comments in configure.ac
- should. Comments inside macros written in ancilliary .m4 files should.
- About the only comments which should <em>not</em> use #, but use dnl
- instead, are comments <em>outside</em> our own macros in the ancilliary
- files. The difference is that # comments show up in <code>configure</code>
- (which is most helpful for debugging), while dnl'd lines just vanish.
- Since the macros in ancilliary files generate code which appears in odd
- places, their "outside" comments tend to not be useful while reading
- <code>configure</code>.
-</p>
-
-<p>Do not use any <code>$target*</code> variables, such as
- <code>$target_alias</code>. The single exception is in configure.ac,
- for automake+dejagnu's sake.
-</p>
-
-<p>
-</p>
-
-<hr />
-<h3><a name="aclayout">acinclude.m4 layout</a></h3>
-<p>The nice thing about acinclude.m4/aclocal.m4 is that macros aren't actually
- performed/called/expanded/whatever here, just loaded. So we can arrange
- the contents however we like. As of this writing, acinclude.m4 is arranged
- as follows:
-</p>
-<pre>
- GLIBCXX_CHECK_HOST
- GLIBCXX_TOPREL_CONFIGURE
- GLIBCXX_CONFIGURE
-</pre>
-<p>All the major variable "discovery" is done here. CXX, multilibs, etc.
-</p>
-<pre>
- fragments included from elsewhere
-</pre>
-<p>Right now, "fragments" == "the math/linkage bits".
-</p>
-<pre>
- GLIBCXX_CHECK_COMPILER_FEATURES
- GLIBCXX_CHECK_LINKER_FEATURES
- GLIBCXX_CHECK_WCHAR_T_SUPPORT
-</pre>
-<p>Next come extra compiler/linker feature tests. Wide character support
- was placed here because I couldn't think of another place for it. It will
- probably get broken apart like the math tests, because we're still disabling
- wchars on systems which could actually support them.
-</p>
-<pre>
- GLIBCXX_CHECK_SETRLIMIT_ancilliary
- GLIBCXX_CHECK_SETRLIMIT
- GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
- GLIBCXX_CHECK_POLL
- GLIBCXX_CHECK_WRITEV
-
- GLIBCXX_CONFIGURE_TESTSUITE
-</pre>
-<p>Feature tests which only get used in one place. Here, things used only in
- the testsuite, plus a couple bits used in the guts of I/O.
-</p>
-<pre>
- GLIBCXX_EXPORT_INCLUDES
- GLIBCXX_EXPORT_FLAGS
- GLIBCXX_EXPORT_INSTALL_INFO
-</pre>
-<p>Installation variables, multilibs, working with the rest of the compiler.
- Many of the critical variables used in the makefiles are set here.
-</p>
-<pre>
- GLIBGCC_ENABLE
- GLIBCXX_ENABLE_C99
- GLIBCXX_ENABLE_CHEADERS
- GLIBCXX_ENABLE_CLOCALE
- GLIBCXX_ENABLE_CONCEPT_CHECKS
- GLIBCXX_ENABLE_CSTDIO
- GLIBCXX_ENABLE_CXX_FLAGS
- GLIBCXX_ENABLE_C_MBCHAR
- GLIBCXX_ENABLE_DEBUG
- GLIBCXX_ENABLE_DEBUG_FLAGS
- GLIBCXX_ENABLE_LONG_LONG
- GLIBCXX_ENABLE_PCH
- GLIBCXX_ENABLE_SJLJ_EXCEPTIONS
- GLIBCXX_ENABLE_SYMVERS
- GLIBCXX_ENABLE_THREADS
-</pre>
-<p>All the features which can be controlled with enable/disable configure
- options. Note how they're alphabetized now? Keep them like that. :-)
-</p>
-<pre>
- AC_LC_MESSAGES
- libtool bits
-</pre>
-<p>Things which we don't seem to use directly, but just has to be present
- otherwise stuff magically goes wonky.
-</p>
-
-
-<hr />
-<h3><a name="enable"><code>--enable</code> howto</a></h3>
-<p>All the GLIBCXX_ENABLE_FOO macros use a common helper, GLIBCXX_ENABLE.
- (You don't have to use it, but it's easy.) The helper does two things
- for us:
-</p>
-
-<ol>
- <li>Builds the call to the AC_ARG_ENABLE macro, with --help text properly
- quoted and aligned. (Death to changequote!)</li>
- <li>Checks the result against a list of allowed possibilities, and signals
- a fatal error if there's no match. This means that the rest of the
- GLIBCXX_ENABLE_FOO macro doesn't need to test for strange arguments,
- nor do we need to protect against empty/whitespace strings with the
- <code>"x$foo" = "xbar"</code> idiom.</li>
-</ol>
-
-<p>Doing these things correctly takes some extra autoconf/autom4te code,
- which made our macros nearly illegible. So all the ugliness is factored
- out into this one helper macro.
-</p>
-
-<p>Many of the macros take an argument, passed from when they are expanded
- in configure.ac. The argument controls the default value of the
- enable/disable switch. Previously, the arguments themselves had defaults.
- Now they don't, because that's extra complexity with zero gain for us.
-</p>
-
-<p>There are three "overloaded signatures". When reading the descriptions
- below, keep in mind that the brackets are autoconf's quotation characters,
- and that they will be stripped. Examples of just about everything occur
- in acinclude.m4, if you want to look.
-</p>
-
-<pre>
- GLIBCXX_ENABLE (FEATURE, DEFAULT, HELP-ARG, HELP-STRING)
- GLIBCXX_ENABLE (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, permit a|b|c)
- GLIBCXX_ENABLE (FEATURE, DEFAULT, HELP-ARG, HELP-STRING, SHELL-CODE-HANDLER)
-</pre>
-
-<ul>
- <li><p>FEATURE is the string that follows --enable. The results of the test
- (such as it is) will be in the variable $enable_FEATURE, where FEATURE
- has been squashed. Example: <code>[extra-foo]</code>, controlled by the
- --enable-extra-foo option and stored in $enable_extra_foo.</p></li>
- <li><p>DEFAULT is the value to store in $enable_FEATURE if the user does not
- pass --enable/--disable. It should be one of the permitted values
- passed later. Examples: <code>[yes]</code>, or <code>[bar]</code>, or
- <code>[$1]</code> (which passes the argument given to the
- GLIBCXX_ENABLE_FOO macro as the default).</p>
- <p>For cases where we need to probe for particular models
- of things, it is useful to have an undocumented "auto" value here (see
- GLIBCXX_ENABLE_CLOCALE for an example).</p></li>
- <li><p>HELP-ARG is any text to append to the option string itself in the
- --help output. Examples: <code>[]</code> (i.e., an empty string,
- which appends nothing),
- <code>[=BAR]</code>, which produces
- <code>--enable-extra-foo=BAR</code>, and
- <code>[@&lt;:@=BAR@:&gt;@]</code>, which produces
- <code>--enable-extra-foo[=BAR]</code>. See the difference? See what
- it implies to the user?</p>
- <p>If you're wondering what that line noise in the last example was,
- that's how you embed autoconf special characters in output text.
- They're called
-<a
-href="http://www.gnu.org/software/autoconf/manual/autoconf-2.57/html_node/autoconf_95.html#SEC95"><em>quadrigraphs</em></a>
- and you should use them whenever necessary.</p></li>
- <li><p>HELP-STRING is what you think it is. Do not include the "default"
- text like we used to do; it will be done for you by GLIBCXX_ENABLE.
- By convention, these are not full English sentences.
- Example: [turn on extra foo]</p></li>
-</ul>
-
-<p>With no other arguments, only the standard autoconf patterns are
- allowed: "<code>--{enable,disable}-foo[={yes,no}]</code>" The
- $enable_FEATURE variable is guaranteed to equal either "yes" or "no"
- after the macro. If the user tries to pass something else, an
- explanatory error message will be given, and configure will halt.
-</p>
-
-<p>The second signature takes a fifth argument,
- "<code>[permit <em>a</em>|<em>b</em>|<em>c</em>|<em>...</em>]</code>"
- This allows <em>a</em> or <em>b</em> or ... after the equals sign in the
- option, and $enable_FEATURE is guaranteed to equal one of them after the
- macro. Note that if you want to allow plain --enable/--disable with no
- "=whatever", you must include "yes" and "no" in the list of permitted
- values. Also note that whatever you passed as DEFAULT must be in the list.
- If the user tries to pass something not on the list, a semi-explanatory
- error message will be given, and configure will halt.
- Example: <code>[permit generic|gnu|ieee_1003.1-2001|yes|no|auto]</code>
-</p>
-
-<p>The third signature takes a fifth argument. It is arbitrary shell code
- to execute if the user actually passes the enable/disable option. (If
- the user does not, the default is used. Duh.) No argument checking at
- all is done in this signature. See GLIBCXX_ENABLE_CXX_FLAGS for an
- example of handling, and an error message.
-</p>
-
-<hr />
-</body>
-</html>
diff --git a/libstdc++-v3/docs/html/17_intro/contribute.html b/libstdc++-v3/docs/html/17_intro/contribute.html
deleted file mode 100644
index 0013d604925..00000000000
--- a/libstdc++-v3/docs/html/17_intro/contribute.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title>How to contribute</title>
-<link rel="StyleSheet" href="../lib3styles.css" type="text/css" />
-<link rel="Start" href="../documentation.html" type="text/html"
- title="GNU C++ Standard Library" />
-<link rel="Help" href="../faq/index.html" type="text/html" title="F.A.Q." />
-</head>
-<!--990301 slightly modified version of the GCC contribute.html file-->
-<!-- #include virtual="/include/header-subpages.html"-->
-<body>
-<h2>How to contribute</h2>
-<p> The Standard C++ Library v3, follows an open development
-model. Active contributors are assigned maintainer-ship
-responsibility, and given write access to the CVS repository. First
-time contributors should follow this procedure:
-</p>
-
-<hr />
-<h4>ONE : read the documentation</h4>
-
-<ul>
- <li> Get and read the relevant sections of the C++ language
-specification. Copies of the full ISO 14882 standard are available on
-line via the ISO mirror site for committee members. Non-members, or
-those who have not paid for the privilege of sitting on the committee
-and sustained their two meeting commitment for voting rights, may get
-a copy of the standard from their respective national standards
-organization. In the USA, this national standards organization is ANSI
-and their web-site is right
-
- <a href="http://www.ansi.org">here.</a>
-(And if you've already registered with them, clicking this link will take you to directly to the place where you can
-<a href="http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%3A2003">buy the standard on-line.)</a>
-</li>
-
-<li> The library working group bugs, and known defects, can be obtained here:
- <a href="http://www.open-std.org/jtc1/sc22/wg21/">http://www.open-std.org/jtc1/sc22/wg21 </a>
-</li>
-
-<li> The newsgroup dedicated to standardization issues is comp.std.c++: this FAQ for this group is quite useful and can be found <a href="http://www.jamesd.demon.co.uk/csc/faq.html"> here </a>.
-</li>
-
- <li> Peruse the <a href="http://www.gnu.org/prep/standards_toc.html">GNU Coding Standards</a>, and chuckle when you hit the part about "Using Languages Other Than C."
-</li>
-
- <li> Be familiar with the extensions that preceded these general GNU rules. These style issues for libstdc++ can be found in the file C++STYLE, located in the root level of the distribution, or <a href="C++STYLE"> here. </a>
-</li>
-
- <li> And last but certainly not least, read the library-specific information found <a href="../documentation.html"> here.</a>
-</li>
-
-</ul>
-
-
-
-<hr />
-<h4>TWO : copyright assignment</h4>
-<p>
-Small changes can be accepted without a copyright assignment form on
-file. New code and additions to the library need completed copyright
-assignment form on file at the FSF. Note: your employer may be required
-to fill out appropriate disclaimer forms as well.
-</p>
-
-<p> Historically, the libstdc++ assignment form added the following question:
-</p>
-
-<code>[Which Belgian comic book character is better, Tintin or
-Asterix, and why?]</code>
-
-<p>
-While not strictly necessary, humoring the maintainers and answering
-this question would be appreciated.
-</p>
-
-<p>
-For more information about getting a copyright assignment, please see
-<a href=http://www.gnu.org/prep/maintain_4.html#SEC4=> Legal Issues</a>
-</p>
-
-<p>
-Please contact <a href="mailto:bkoz+assign@redhat.com">Benjamin
-Kosnik</a> if you are confused about the assignment or have general
-licensing questions. When requesting an assignment form from <a
-HREF="mailto:assign@gnu.org">assign@gnu.org</a>, please cc
-the above libstdc++ maintainer so that progress can be monitored.
-</p>
-
-
-<hr />
-<h4>THREE : submitting patches</h4>
-
-<p>
-Every patch must have several pieces of information before it can be
-properly evaluated. Ideally (and to ensure the fastest possible
-response from the maintainers) it would have all of these pieces:
-</p>
-
-<ul>
-
- <li> A description of the bug and how your patch fixes this bug. For
- new features a description of the feature and your implementation. </li>
-
- <li> A ChangeLog entry as plain text; see the various ChangeLog files
- for format and content. If using you are using emacs as your editor,
- simply position the insertion point at the beginning of your change
- and hit CX-4a to bring up the appropriate ChangeLog
- entry. See--magic! Similar functionality also exists for vi. </li>
-
- <li> A testsuite submission or sample program that will easily and
- simply show the existing error or test new functionality. </li>
-
- <li> The patch itself. If you are accessing the CVS repository at
- Cygnus, use "cvs update; cvs diff -c3p NEW"; else, use "diff -c3p OLD
- NEW" ... If your version of diff does not support these options, then
- get the latest version of GNU diff. </li>
-
- <li> When you have all these pieces, bundle them up in a mail message
-and send it to libstdc++@gcc.gnu.org. All patches and related
-discussion should be sent to the libstdc++ mailing list. </li>
-
-</ul>
-
-</body>
-</html>
-
diff --git a/libstdc++-v3/docs/html/17_intro/headers_cc.txt b/libstdc++-v3/docs/html/17_intro/headers_cc.txt
deleted file mode 100644
index a0d926d71c5..00000000000
--- a/libstdc++-v3/docs/html/17_intro/headers_cc.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-// 1999-05-12 bkoz
-
-// Copyright (C) 1999 Free Software Foundation, Inc.
-//
-// This file is part of the GNU ISO C++ Library. This library is free
-// software; you can redistribute it and/or modify it under the
-// terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option)
-// any later version.
-
-// This library is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-
-// You should have received a copy of the GNU General Public License along
-// with this library; see the file COPYING. If not, write to the Free
-// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-// USA.
-
-// 17.4.1.2 Headers
-
-
-// "C++" headers
-#include <algorithm>
-#include <bitset>
-#include <complex>
-#include <deque>
-#include <exception>
-#include <fstream>
-#include <functional>
-#include <iomanip>
-#include <ios>
-#include <iosfwd>
-#include <iostream>
-#include <istream>
-#include <iterator>
-#include <limits>
-#include <list>
-#include <locale>
-#include <map>
-#include <memory>
-#include <new>
-#include <numeric>
-#include <ostream>
-#include <queue>
-#include <set>
-#include <sstream>
-#include <stack>
-#include <stdexcept>
-#include <streambuf>
-#include <string>
-#include <typeinfo>
-#include <utility>
-#include <valarray>
-#include <vector>
-
-// "C" headers
-#include <cassert>
-#include <cctype>
-#include <cerrno>
-#include <cfloat>
-#include <ciso646>
-#include <climits>
-#include <clocale>
-#include <cmath>
-#include <csetjmp>
-#include <csignal>
-#include <cstdarg>
-#include <cstddef>
-#include <cstdio>
-#include <cstdlib>
-#include <cstring>
-#include <ctime>
-
-// "C" headers that might not work if wchar_t support is disabled.
-#include <bits/c++config.h>
-#if _GLIBCXX_USE_WCHAR_T
- #include <cwchar>
- #include <cwctype>
-#endif
-
-int main() { return 0; }
diff --git a/libstdc++-v3/docs/html/17_intro/howto.html b/libstdc++-v3/docs/html/17_intro/howto.html
deleted file mode 100644
index 631e58fe0b9..00000000000
--- a/libstdc++-v3/docs/html/17_intro/howto.html
+++ /dev/null
@@ -1,385 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
- <meta name="KEYWORDS" content="HOWTO, libstdc++, gcc, g++, libg++, STL" />
- <meta name="DESCRIPTION" content="HOWTO for libstdc++ chapter 17." />
- <meta name="GENERATOR" content="vi and eight fingers" />
- <title>libstdc++-v3 HOWTO: Chapter 17: Library Introduction</title>
-<link rel="StyleSheet" href="../lib3styles.css" type="text/css" />
-<link rel="Start" href="../documentation.html" type="text/html"
- title="GNU C++ Standard Library" />
-<link rel="Next" href="../18_support/howto.html" type="text/html"
- title="Library Support" />
-<link rel="Copyright" href="license.html" type="text/html" />
-<link rel="Help" href="../faq/index.html" type="text/html" title="F.A.Q." />
-</head>
-<body>
-
-<h1 class="centered"><a name="top">Chapter 17: Library Introduction</a></h1>
-
-<p>Chapter 17 is actually a list of definitions and descriptions used
- in the following chapters of the Standard when describing the actual
- library. Here, we use &quot;Introduction&quot; as an introduction
- to the <em>GNU implementation of</em> the ISO Standard C++ Library.
-</p>
-
-
-<!-- ####################################################### -->
-<hr />
-<h1>Contents</h1>
-<ul>
- <li><a href="#2">The Standard C++ header files</a></li>
- <li><a href="#3">The Standard C++ library and multithreading</a></li>
- <li><a href="#4"><code>&lt;foo&gt;</code> vs <code>&lt;foo.h&gt;</code></a></li>
- <li><a href="porting-howto.html">Porting HOWTO</a></li>
- <li><a href="#5">Behavior specific to libstdc++-v3</a></li>
- <li><a href="#6">Preprocessor macros controlling the library</a></li>
-</ul>
-
-<hr />
-
-<!-- ####################################################### -->
-
-<h2><a name="2">The Standard C++ header files</a></h2>
- <p>The Standard C++ Library specifies 50 header files that must be
- available to all hosted implementations. Actually, the word
- &quot;files&quot; is a misnomer, since the contents of the headers
- don't necessarily have to be in any kind of external file. The
- only rule is that when you <code>#include</code> a certain header, the
- contents of that header, as defined by the Standard, become
- available to you, no matter how.
- </p>
- <p>The names of the headers can be easily seen in
- <a href="headers_cc.txt"><code>testsuite/17_intro/headers.cc</code></a>,
- which is a small testbed we use to make certain that the headers
- all compile and run.
- </p>
-
-<hr />
-<h2><a name="3">The Standard C++ library and multithreading</a></h2>
- <p>This section discusses issues surrounding the proper compilation
- of multithreaded applications which use the Standard C++
- library. This information is GCC-specific since the C++
- standard does not address matters of multithreaded applications.
- Unless explicitly prefaced, all information in this section is
- current as of the GCC 3.0 release and all later point releases.
- </p>
- <p>Earlier GCC releases had a somewhat different approach to
- threading configuration and proper compilation. Before GCC 3.0,
- configuration of the threading model was dictated by compiler
- command-line options and macros (both of which were somewhat
- thread-implementation and port-specific). There were no
- guarantees related to being able to link code compiled with one
- set of options and macro setting with another set. For GCC 3.0,
- configuration of the threading model used with libraries and
- user-code is performed when GCC is configured and built using
- the --enable-threads and --disable-threads options. The ABI is
- stable for symbol name-mangling and limited functional
- compatibility exists between code compiled under different
- threading models.
- </p>
- <p>All normal disclaimers aside, multithreaded C++ application are
- only supported when libstdc++ and all user code was built with
- compilers which report (via <code> gcc/g++ -v </code>) the same thread
- model and that model is not <em>single</em>. As long as your
- final application is actually single-threaded, then it should be
- safe to mix user code built with a thread model of
- <em>single</em> with a libstdc++ and other C++ libraries built
- with another thread model useful on the platform. Other mixes
- may or may not work but are not considered supported. (Thus, if
- you distribute a shared C++ library in binary form only, it may
- be best to compile it with a GCC configured with
- --enable-threads for maximal interchangeability and usefulness
- with a user population that may have built GCC with either
- --enable-threads or --disable-threads.)
- </p>
- <p>When you link a multithreaded application, you will probably
- need to add a library or flag to g++. This is a very
- non-standardized area of GCC across ports. Some ports support a
- special flag (the spelling isn't even standardized yet) to add
- all required macros to a compilation (if any such flags are
- required then you must provide the flag for all compilations not
- just linking) and link-library additions and/or replacements at
- link time. The documentation is weak. Here is a quick summary
- to display how ad hoc this is: On Solaris, both -pthreads and
- -threads (with subtly different meanings) are honored. On OSF,
- -pthread and -threads (with subtly different meanings) are
- honored. On Linux/i386, -pthread is honored. On FreeBSD,
- -pthread is honored. Some other ports use other switches.
- AFAIK, none of this is properly documented anywhere other than
- in ``gcc -dumpspecs'' (look at lib and cpp entries).
- </p>
- <p>See <a href="../faq/index.html#3">FAQ</a> (general overview), <a
- href="../23_containers/howto.html#3">23</a> (containers), and <a
- href="../27_io/howto.html#9">27</a> (I/O) for more information.
- </p>
- <p>The libstdc++-v3 library (unlike libstdc++-v2, all of it, not
- just the STL) has been designed so that multithreaded
- applications using it may be written. The first problem is
- finding a <em>fast</em> method of implementation portable to all
- platforms. Due to historical reasons, some of the library is
- written against per-CPU-architecture spinlocks and other parts
- against the gthr.h abstraction layer which is provided by gcc.
- A minor problem that pops up every so often is different
- interpretations of what &quot;thread-safe&quot; means for a
- library (not a general program). We currently use the <a
- href="http://www.sgi.com/tech/stl/thread_safety.html">same
- definition that SGI</a> uses for their STL subset. However, the
- exception for read-only containers only applies to the STL
- components.
- </p>
- <p>Here is a small link farm to threads (no pun) in the mail archives
- that discuss the threading problem. Each link is to the first
- relevant message in the thread; from there you can use
- &quot;Thread Next&quot; to move down the thread. This farm is in
- latest-to-oldest order.
- </p>
- <ul>
- <li>Our threading expert Loren gives a breakdown of
- <a href="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html">the
- six situations involving threads</a> for the 3.0 release series.</li>
- <li><a href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html">
- This message</a> inspired a recent updating of issues with threading
- and the SGI STL library. It also contains some example
- POSIX-multithreaded STL code.</li>
- </ul>
- <p> (A large selection of links to older messages has been removed; many
- of the messages from 1999 were lost in a disk crash, and the few
- people with access to the backup tapes have been too swamped with work
- to restore them. Many of the points have been superseded anyhow.)
- </p>
- <p>This section will be updated as new and interesting issues come
- to light.
- </p>
- <p>Return <a href="#top">to top of page</a> or
- <a href="../faq/index.html">to the FAQ</a>.
- </p>
-
-<hr />
-<h2><a name="4"><code>&lt;foo&gt;</code> vs <code>&lt;foo.h&gt;</code></a></h2>
- <p>The new-style headers are fully supported in libstdc++-v3. The compiler
- itself fully supports namespaces, including <code>std::</code>.
- </p>
- <p>For those of you new to ISO C++98, no, that isn't a typo, the headers
- really have new names. Marshall Cline's C++ FAQ Lite has a good
- explanation in
-<a href="http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.4">item [27.4]</a>.
- </p>
- <p>Return <a href="#top">to top of page</a> or
- <a href="../faq/index.html">to the FAQ</a>.
- </p>
-
-<hr />
-<h2><a name="5">Behavior specific to libstdc++-v3</a></h2>
- <p>The ISO standard defines the following phrase:
- </p>
- <blockquote><dl>
- <dt><code>[1.3.5] implementation-defined behavior</code></dt>
- <dd>behavior, for a well-formed program construct and correct data, that
- depends on the implementation <strong>and that each implementation
- shall document</strong>.
- </dd>
- </dl></blockquote>
- <p>We do so here, for the C++ library only. Behavior of the compiler,
- linker, runtime loader, and other elements of &quot;the
- implementation&quot; are documented elsewhere. Everything listed in
- Annex B, Implementation Qualities, are also part of the compiler, not
- the library.
- </p>
- <p>For each entry, we give the section number of the standard, when
- applicable. This list is probably incomplet and inkorrekt.
- </p>
- <p><strong>[1.9]/11 #3</strong> If <code>isatty(3)</code> is true, then
- interactive stream support is implied.
- </p>
- <p><strong>[17.4.4.5]</strong> Non-reentrant functions are probably best
- discussed in the various sections on multithreading (see above).
- </p>
- <!-- [17.4.4.8]/3 says any function that doesn't have an exception-spec
- can throw whatever we want; see also its footnote. Let's list those
- in the sections where the function itself occurs.
- -->
- <p><strong>[18.1]/4</strong> The type of <code>NULL</code> is described
- <a href="../18_support/howto.html#1">here</a>.
- </p>
- <p><strong>[18.3]/8</strong> Even though it's listed in the library
- sections, libstdc++-v3 has zero control over what the cleanup code hands
- back to the runtime loader. Talk to the compiler people. :-)
- </p>
- <p><strong>[18.4.2.1]/5</strong> (bad_alloc),<br />
- <strong>[18.5.2]/5</strong> (bad_cast),<br />
- <strong>[18.5.3]/5</strong> (bad_typeid),<br />
- <strong>[18.6.1]/8</strong> (exception),<br />
- <strong>[18.6.2.1]/5</strong> (bad_exception): The <code>what()</code>
- member function of class <code>std::exception</code>, and these other
- classes publicly derived from it, simply returns the name of the
- class. But they are the <em>mangled</em> names; you will need to call
- <code>c++filt</code> and pass the names as command-line parameters to
- demangle them, or call a
- <a href="../18_support/howto.html#5">runtime demangler function</a>.
- (The classes in <code>&lt;stdexcept&gt;</code> have constructors which
- require an argument to use later for <code>what()</code> calls, so the
- problem of <code>what()</code>'s value does not arise in most
- user-defined exceptions.)
- </p>
- <p><strong>[18.5.1]/7</strong> The return value of
- <code>std::type_info::name()</code> is the mangled type name (see the
- previous entry for more).
- </p>
- <p><strong>[20.1.5]/5</strong> <em>&quot;Implementors are encouraged to
- supply libraries that can accept allocators that encapsulate more
- general memory models and that support non-equal instances. In such
- implementations, any requirements imposed on allocators by containers
- beyond those requirements that appear in Table 32, and the semantics
- of containers and algorithms when allocator instances compare
- non-equal, are implementation-defined.&quot;</em> As yet we don't
- have any allocators which compare non-equal, so we can't describe how
- they behave.
- </p>
- <p><strong>[21.1.3.1]/3,4</strong>,<br />
- <strong>[21.1.3.2]/2</strong>,<br />
- <strong>[23.*]'s foo::iterator</strong>,<br />
- <strong>[27.*]'s foo::*_type</strong>,<br />
- <strong>others...</strong>
- Nope, these types are called implementation-defined because you
- shouldn't be taking advantage of their underlying types. Listing them
- here would defeat the purpose. :-)
- </p>
- <p><strong>[21.1.3.1]/5</strong> I don't really know about the mbstate_t
- stuff... see the <a href="../22_locale/howto.html">chapter 22 notes</a>
- for what does exist.
- </p>
- <p><strong>[22.*]</strong> Anything and everything we have on locale
- implementation will be described
- <a href="../22_locale/howto.html">over here</a>.
- </p>
- <p><strong>[26.2.8]/9</strong> I have no idea what
- <code>complex&lt;T&gt;</code>'s pow(0,0) returns.
- </p>
- <p><strong>[27.4.2.4]/2</strong> Calling
- <code>std::ios_base::sync_with_stdio</code> after I/O has already been
- performed on the standard stream objects will
- flush the buffers, and <!-- this line might go away -->
- destroy and recreate the underlying buffer instances. Whether or not
- the previously-written I/O is destroyed in this process depends mostly
- on the --enable-libio choice: for stdio, if the written data is
- already in the stdio buffer, the data may be completely safe!
- </p>
- <p><strong>[27.6.1.1.2]</strong>,<br />
- <strong>[27.6.2.3]</strong> The I/O sentry ctor and dtor can perform
- additional work than the minimum required. We are not currently taking
- advantage of this yet.
- </p>
- <p><strong>[27.7.1.3]/16</strong>,<br />
- <strong>[27.8.1.4]/10</strong>
- The effects of <code>pubsetbuf/setbuf</code> are described
- <a href="../27_io/howto.html#2">in this chapter</a>.
- </p>
- <p><strong>[27.8.1.4]/16</strong> Calling <code>fstream::sync</code> when
- a get area exists will... whatever <code>fflush()</code> does, I think.
- </p>
- <p>Return <a href="#top">to top of page</a> or
- <a href="../faq/index.html">to the FAQ</a>.
- </p>
-
-<hr />
-<h2><a name="6">Preprocessor macros controlling the library</a></h2>
- <p>Some of the semantics of the libstdc++-v3 implementation are
- controlled by preprocessor macros, both during build/installation and
- during compilation of user code. Many of these choices are made when
- the library is built and installed (actually, during
- <a href="../configopts.html">the configuration step</a>, with the
- various --enable/--disable choices being translated to #define/#undef).
- </p>
- <p>All library macros begin with <code>_GLIBCPP_</code> in earlier
- versions, and <code>_GLIBCXX_</code> in later versions. The fact that
- these symbols start with a leading underscore should give you a clue
- that (by default) they aren't meant to be changed by the user. :-)
- </p>
- <p>These macros are all gathered in the file <code>c++config.h</code>,
- which is generated during installation. <strong>You must assume that
- these macros cannot be redefined by your own code</strong>, unless we
- document otherwise here. Some of the choices control code which has
- already been compiled (i.e., libstdc++.a/.so). If you explicitly
- #define or #undef these macros, the <em>headers</em> may see different
- code paths, but the <em>libraries</em> which you link against will not.
- If you want to experiment with different values, you must change the
- config headers before building/installing the library.
- </p>
- <p>Below are macros which, for 3.1 and later, you may change yourself,
- in your own code with #define/#undef or with -D/-U compiler flags.
- The default state of the symbol is listed. &quot;Configurable&quot;
- (or &quot;Not configurable&quot;) means that the symbol is initially
- chosen (or not) based on --enable/--disable options at configure time.
- For 3.1 through 3.3, the prefixes are <code>_GLIBCPP_</code>.
- </p>
- <dl>
- <dt><code>_GLIBCXX_DEPRECATED</code></dt>
- <dd>Undefined by default. Not configurable. Turning this on enables
- older ARM-style iostreams code, and other anachronisms. This may be
- useful in updating old C++ programs which no longer meet the
- requirements of the language.
- </dd>
- <!--
- Can this actually be turned off and still produce a working lib? Must
- check. -pme
- No, it can't. Hmmm. -pme
- <dt><code>_GLIBCPP_RESOLVE_LIB_DEFECTS</code></dt>
- <dd>Defined by default. Not configurable. The library follows
- corrections and updates from the ISO committee, see
- <a href="../faq/index.html#5_2">here</a> and
- <a href="../ext/howto.html#5">here</a> for more on this feature.
- If you have code which depends on the first version of the standard,
- you might try undefining this macro.
- </dd>
- -->
- <dt><code>_GLIBCXX_CONCEPT_CHECKS</code></dt>
- <dd>Undefined by default. Configurable. When defined, performs
- compile-time checking on certain template instantiations to detect
- violations of the requirements of the standard. This is described
- in more detail <a href="../19_diagnostics/howto.html#3">here</a>.
- </dd>
- <dt><code>_GLIBCXX_DEBUG</code></dt>
- <dd>Undefined by default. Configurable. When defined, compiles
- user code using the <a href="../debug.html#safe">libstdc++ debug
- mode</a>.
- </dd>
- <dt><code>_GLIBCXX_DEBUG_PEDANTIC</code></dt>
- <dd>Undefined by default. Configurable. When defined while
- compiling with the <a href="../debug.html#safe">libstdc++ debug
- mode</a>, makes the debug mode extremely picky by making the use
- of libstdc++ extensions and libstdc++-specific behavior into
- errors.
- </dd>
- <!--
- <dt><code></code></dt>
- <dd>
- </dd>
- -->
- </dl>
- <p>Return <a href="#top">to top of page</a> or
- <a href="../faq/index.html">to the FAQ</a>.
- </p>
-
-
-
-<!-- ####################################################### -->
-
-<hr />
-<p class="fineprint"><em>
-See <a href="license.html">license.html</a> for copying conditions.
-Comments and suggestions are welcome, and may be sent to
-<a href="mailto:libstdc++@gcc.gnu.org">the libstdc++ mailing list</a>.
-</em></p>
-
-
-</body>
-</html>
-
-
diff --git a/libstdc++-v3/docs/html/17_intro/license.html b/libstdc++-v3/docs/html/17_intro/license.html
deleted file mode 100644
index 8dc0ebd711c..00000000000
--- a/libstdc++-v3/docs/html/17_intro/license.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
- <meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
- <meta name="KEYWORDS" content="libstdc++, license, licence" />
- <meta name="DESCRIPTION" content="Copying restrictions for libstdc++." />
- <meta name="GENERATOR" content="vi and eight fingers" />
- <title>libstdc++ copying</title>
-<link rel="StyleSheet" href="../lib3styles.css" type="text/css" />
-<link rel="Start" rev="Copyright" href="../documentation.html" type="text/html"
- title="GNU C++ Standard Library" />
-</head>
-<body>
-
-<h1 class="centered"><a name="top">Licenses for the Library</a></h1>
-
-<p>There are two licenses affecting GNU libstdc++: one for the code, and
- one for the documentation. Here we will describe both of them, and try
- to answer some of the widespread questions. If you have more questions,
- ask the FSF or the
- <a href="http://gcc.gnu.org/lists.html">gcc mailing list</a>; the person
- writing this page is a programmer, not a lawyer.
-</p>
-
-<hr />
-
-<h2>The Code: Runtime GPL</h2>
-
-<p>The source code of libstdc++ is distributed under version 2 of the
- <a href="COPYING">GNU General Public License</a>, with the so-called
- &quot;runtime exception,&quot; as follows (or see any header or
- implementation file):
-</p>
-<pre>
- As a special exception, you may use this file as part of a free software
- library without restriction. Specifically, if other files instantiate
- templates or use macros or inline functions from this file, or you compile
- this file and link it with other files to produce an executable, this
- file does not by itself cause the resulting executable to be covered by
- the GNU General Public License. This exception does not however
- invalidate any other reasons why the executable file might be covered by
- the GNU General Public License.
-</pre>
-
-<p>Hopefully that text is self-explanatory. If it isn't, you need to speak
- to your lawyer, or the Free Software Foundation.
-</p>
-
-<!-- Most of the Q&A's are based on, paraphrased from, and outright stolen
- from this thread:
- http://gcc.gnu.org/ml/libstdc++/2000-q2/subjects.html#00050
--->
-<p><strong>Q: So any program which uses libstdc++ falls under the GPL?</strong>
- <br />A: <strong>No.</strong> The special exception permits use of the
- library in proprietary applications.
-</p>
-
-<p><strong>Q: How is that different from the GNU {Lesser,Library}
- GPL?</strong>
- <!-- Quoting Jason Merrill from the thread above: -->
- <br />A: The LGPL requires that users be able to replace the LGPL code with a
- modified version; this is trivial if the library in question is a C
- shared library. But there's no way to make that work with C++, where
- much of the library consists of inline functions and templates, which
- are expanded inside the code that uses the library. So to allow people
- to replace the library code, someone using the library would have to
- distribute their own source, rendering the LGPL equivalent to the GPL.
-</p>
-
-<p><strong>Q: I see. So, what restrictions <em>are</em> there on
- programs that use the library?</strong>
- <br />A: None. We encourage such programs to be released as open source,
- but we won't punish you or sue you if you choose otherwise.
-</p>
-
-<hr />
-
-<h2>The Docs: GPL, FDL</h2>
-
-<p>The documentation shipped with the library and made available over the
- web, excluding the pages generated from source comments, are copyrighted
- by the Free Software Foundation, and placed under
- the <a href="COPYING.DOC">GNU Free Documentation License version 1.1</a>.
- There are no Front-Cover Texts, no Back-Cover Texts, and
- <!-- as far as I know -->
- no Invariant Sections.
-</p>
-
-<p> For documentation generated by doxygen or other automated tools
-via processing source code comments and markup, the original source
-code license applies to the generated files. Thus, the doxygen
-documents are licensed GPL.
-</p>
-
-<p>If you plan on making copies of the documentation, please let us know.
- We can probably offer suggestions.
-</p>
-
-
-<!-- ####################################################### -->
-
-<hr />
-<p class="fineprint"><em>
-Comments and suggestions about this page are welcome, and may be sent to
-<a href="mailto:libstdc++@gcc.gnu.org">the libstdc++ mailing list</a>.
-Comments or questions about the licenses themselves are also welcome, and
-should be directed to the GCC list as descibed above.
-</em></p>
-
-
-</body>
-</html>
-
-
diff --git a/libstdc++-v3/docs/html/17_intro/porting-howto.html b/libstdc++-v3/docs/html/17_intro/porting-howto.html
deleted file mode 100644
index d6bedb271ed..00000000000
--- a/libstdc++-v3/docs/html/17_intro/porting-howto.html
+++ /dev/null
@@ -1,744 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
-<html>
-<head>
-<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
-<title>Libstdc++-porting-howto</title>
-<meta name="generator" content="DocBook XSL Stylesheets V1.48">
-</head>
-<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="article">
-<div class="titlepage">
-<div><h1 class="title">
-<a name="libstdc++-porting-howto"></a>Libstdc++-porting-howto</h1></div>
-<div><h3 class="author">Felix Natter</h3></div>
-<div><div class="legalnotice">
-<p class="legalnotice-title"><b>Legal Notice</b></p>
-<p>
- This document can be distributed under the FDL
- (<a href="http://www.gnu.org" target="_top">www.gnu.org</a>)
- </p>
-</div></div>
-<div><p class="pubdate">Tue Jun 5 20:07:49 2001</p></div>
-<div><div class="revhistory"><table border="1" width="100%" summary="Revision history">
-<tr><th align="left" valign="top" colspan="3"><b>Revision History</b></th></tr>
-<tr>
-<td align="left">Revision 0.5</td>
-<td align="left">Thu Jun 1 13:06:50 2000</td>
-<td align="left">fnatter</td>
-</tr>
-<tr><td align="left" colspan="3">First docbook-version.</td></tr>
-<tr>
-<td align="left">Revision 0.8</td>
-<td align="left">Sun Jul 30 20:28:40 2000</td>
-<td align="left">fnatter</td>
-</tr>
-<tr><td align="left" colspan="3">First released version using docbook-xml
- + second upload to libstdc++-page.
- </td></tr>
-<tr>
-<td align="left">Revision 0.9</td>
-<td align="left">Wed Sep 6 02:59:32 2000</td>
-<td align="left">fnatter</td>
-</tr>
-<tr><td align="left" colspan="3">5 new sections.</td></tr>
-<tr>
-<td align="left">Revision 0.9.1</td>
-<td align="left">Sat Sep 23 14:20:15 2000</td>
-<td align="left">fnatter</td>
-</tr>
-<tr><td align="left" colspan="3">added information about why file-descriptors are not in the
- standard</td></tr>
-<tr>
-<td align="left">Revision 0.9.2</td>
-<td align="left">Tue Jun 5 20:07:49 2001</td>
-<td align="left">fnatter</td>
-</tr>
-<tr><td align="left" colspan="3">
- a fix, added hint on increased portability of C-shadow-headers,
- added autoconf-test HAVE_CONTAINER_AT
- </td></tr>
-<tr>
-<td align="left">Revision 0.9.3</td>
-<td align="left">Fri Jun 29 16:15:56 2001</td>
-<td align="left">fnatter</td>
-</tr>
-<tr><td align="left" colspan="3">
- changed signature of nonstandard filebuf-constructor and
- update the section on filebuf::attach to point to ../ext/howto.html,
- added link to ../21/strings/howto.html
- in sec-stringstream, changed &lt;link&gt;-tags to have content
- (so that these links work),
- replace &quot;user-space&quot; by &quot;global namespace&quot;
- add note about gcc 3.0 and shadow-headers
- add section about ostream::form and istream::scan
- sec-vector-at: remove hint to modify headers
- fix spelling error in sec-stringstream
- </td></tr>
-<tr>
-<td align="left">Revision 0.9.4</td>
-<td align="left">Mon Nov 5 17:01:04 2001</td>
-<td align="left">fnatter</td>
-</tr>
-<tr><td align="left" colspan="3">
- rewrite section 1.1.3 because of gnu.gcc.help-post by
- Juergen Heinzl
- </td></tr>
-</table></div></div>
-<div><div class="abstract">
-<p><b>Abstract</b></p>
-<p>
- Some notes on porting applications from libstdc++-2.90 (or earlier
- versions) to libstdc++-v3. Not speaking in terms of the GNU libstdc++
- implementations, this means porting from earlier versions of the
- C++-Standard to ISO 14882.
- </p>
-</div></div>
-<hr>
-</div>
-<div class="toc">
-<p><b>Table of Contents</b></p>
-<dl>
-<dt>1. <a href="#sec-nsstd">Namespace std::</a>
-</dt>
-<dd><dl>
-<dt>1.1.1. <a href="#sec-gtkmm-hack">Using namespace
- composition if the project uses a separate
- namespace</a>
-</dt>
-<dt>1.1.2. <a href="#sec-emptyns">Defining an empty namespace std</a>
-</dt>
-<dt>1.1.3. <a href="#sec-avoidfqn">Avoid to use fully qualified names
- (i.e. std::string)</a>
-</dt>
-<dt>1.1.4. <a href="#sec-osprojects">How some open-source-projects deal
- with this</a>
-</dt>
-</dl></dd>
-<dt>2. <a href="#sec-nocreate">There is no ios::nocreate/ios::noreplace
- in ISO 14882</a>
-</dt>
-<dt>3. <a href="#sec-stream::attach">stream::attach(int
- fd) is not in the standard any more</a>
-</dt>
-<dt>4. <a href="#sec-headers">The new headers</a>
-</dt>
-<dd><dl>
-<dt>4.4.1. <a href="#sec-cheaders">New headers replacing C-headers</a>
-</dt>
-<dt>4.4.2. <a href="#sec-fstream-header">
- &lt;fstream&gt; does
- not define std::cout,
- std::cin etc.</a>
-</dt>
-</dl></dd>
-<dt>5. <a href="#sec-iterators">Iterators</a>
-</dt>
-<dt>6. <a href="#sec-macros">
- Libc-macros (i.e. isspace from
- &lt;cctype&gt;)</a>
-</dt>
-<dt>7. <a href="#sec-stream-state">State of streams</a>
-</dt>
-<dt>8. <a href="#sec-vector-at">vector::at is missing (i.e. gcc 2.95.x)</a>
-</dt>
-<dt>9. <a href="#sec-eof">Using std::char_traits&lt;char&gt;::eof()</a>
-</dt>
-<dt>10. <a href="#sec-string-clear">Using string::clear()/string::erase()</a>
-</dt>
-<dt>11. <a href="#sec-scan-form">GNU Extensions ostream::form and istream::scan</a>
-</dt>
-<dt>12. <a href="#sec-stringstream">Using stringstreams</a>
-</dt>
-<dt>13. <a href="#sec-about">About...</a>
-</dt>
-</dl>
-</div>
-<p>
- In the following, when I say portable, I will refer to &quot;portable among ISO
- 14882-implementations&quot;. On the other hand, if I say &quot;backportable&quot; or
- &quot;conservative&quot;, I am talking about &quot;compiles with older
- libstdc++-implementations&quot;.
- </p>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-nsstd"></a>Namespace std::</h2></div></div>
-<p>
- The latest C++-standard (ISO-14882) requires that the standard
- C++-library is defined in namespace std::. Thus, in order to use
- classes from the standard C++-library, you can do one of three
- things:
- <div class="itemizedlist"><ul type="disc">
-<li><p>wrap your code in <b>namespace std {
- ... }</b> =&gt; This is not an option because only symbols
- from the standard c++-library are defined in namespace std::.
- </p></li>
-<li><p>put a kind of
- <span class="emphasis"><i>using-declaration</i></span> in your source (either
- <b>using namespace std;</b> or i.e. <b>using
- std::string;</b>) =&gt; works well for source-files, but
- cannot be used in header-files.
- </p></li>
-<li><p>use a <span class="emphasis"><i>fully qualified name</i></span> for
- each libstdc++-symbol (i.e. <b>std::string</b>,
- <b>std::cout</b>) =&gt; can always be used
- </p></li>
-</ul></div>
-<p>
- Because there are many compilers which still use an implementation
- that does not have the standard C++-library in namespace
- <b>std::</b>, some care is required to support these as
- well.
- </p>
-<p>
- Namespace back-portability-issues are generally not a problem with
- g++, because versions of g++ that do not have libstdc++ in
- <b>std::</b> use <b>-fno-honor-std</b>
- (ignore <b>std::</b>, <b>:: = std::</b>) by
- default. That is, the responsibility for enabling or disabling
- <b>std::</b> is on the user; the maintainer does not have
- to care about it. This probably applies to some other compilers as
- well.
- </p>
-<p>
- The following sections list some possible solutions to support compilers
- that cannot ignore std::.
- </p>
-<div class="section">
-<div class="titlepage"><div><h3 class="title">
-<a name="sec-gtkmm-hack"></a>Using <span class="emphasis"><i>namespace
- composition</i></span> if the project uses a separate
- namespace</h3></div></div>
-<p>
- <a href="http://gtkmm.sourceforge.net" target="_top">Gtk--</a> defines
- most of its classes in namespace Gtk::. Thus, it was possible to
- adapt Gtk-- to namespace std:: by using a C++-feature called
- <span class="emphasis"><i>namespace composition</i></span>. This is what happens if
- you put a <span class="emphasis"><i>using</i></span>-declaration into a
- namespace-definition: the imported symbol(s) gets imported into the
- currently active namespace(s). For example:
- <pre class="programlisting">
- namespace Gtk {
- using std::string;
- class Window { ... }
- }
- </pre>
- In this example, <b>std::string</b> gets imported into
- namespace Gtk::. The result is that you don't have to use
- <b>std::string</b> in this header, but still
- <b>std::string</b> does not get imported into
- the global namespace (::) unless the user does
- <b>using namespace Gtk;</b> (which is not recommended
- practice for Gtk--, so it is not a problem). Additionally, the
- <b>using</b>-declarations are wrapped in macros that
- are set based on autoconf-tests to either &quot;&quot; or i.e. <b>using
- std::string;</b> (depending on whether the system has
- libstdc++ in <b>std::</b> or not). (ideas from
- <tt>&lt;<a href="mailto:llewelly@dbritsch.dsl.xmission.com">llewelly@dbritsch.dsl.xmission.com</a>&gt;</tt>, Karl Nelson
- <tt>&lt;<a href="mailto:kenelson@ece.ucdavis.edu">kenelson@ece.ucdavis.edu</a>&gt;</tt>)
-</div>
-<div class="section">
-<div class="titlepage"><div><h3 class="title">
-<a name="sec-emptyns"></a>Defining an empty namespace std</h3></div></div>
-<p>
- By defining an (empty) namespace <b>std::</b> before
- using it, you avoid getting errors on systems where no part of the
- library is in namespace std:
- <pre class="programlisting">
- namespace std { }
- using namespace std;
- </pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><h3 class="title">
-<a name="sec-avoidfqn"></a>Avoid to use fully qualified names
- (i.e. std::string)</h3></div></div>
-<p>
- If some compilers complain about <b>using
- std::string;</b>, and if the &quot;hack&quot; for gtk-- mentioned above
- does not work, then I see two solutions:
-
- <div class="itemizedlist"><ul type="disc">
-<li><p>
- Define <b>std::</b> as a macro if the compiler
- doesn't know about <b>std::</b>.
- <pre class="programlisting">
- #ifdef OLD_COMPILER
- #define std
- #endif
- </pre>
- (thanks to Juergen Heinzl who posted this solution on
- gnu.gcc.help)
- </li>
-<li><p>
- Define a macro NS_STD, which is defined to
- either &quot;&quot; or &quot;std&quot;
- based on an autoconf-test. Then you should be able to use
- <b>NS_STD::string</b>, which will evaluate to
- <b>::string</b> (&quot;string in the global namespace&quot;) on
- systems that do not put string in std::. (This is untested)
- </p></li>
-</ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><h3 class="title">
-<a name="sec-osprojects"></a>How some open-source-projects deal
- with this</h3></div></div>
-<p>
- This information was gathered around May 2000. It may not be correct
- by the time you read this.
- </p>
-<div class="table">
-<p><b>Table 1. Namespace std:: in Open-Source programs</b></p>
-<table summary="Namespace std:: in Open-Source programs" border="1">
-<colgroup>
-<col>
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td><a href="http://www.clanlib.org" target="_top">clanlib</a></td>
-<td>usual</td>
-</tr>
-<tr>
-<td><a href="http://pingus.seul.org" target="_top">pingus</a></td>
-<td>usual</td>
-</tr>
-<tr>
-<td><a href="http://www.mozilla.org" target="_top">mozilla</a></td>
-<td>usual</td>
-</tr>
-<tr>
-<td><a href="http://libsigc.sourceforge.net" target="_top">
- libsigc++</a></td>
-<td>conservative-impl</td>
-</tr>
-</tbody>
-</table>
-</div>
-<div class="table">
-<p><b>Table 2. Notations for categories</b></p>
-<table summary="Notations for categories" border="1">
-<colgroup>
-<col>
-<col>
-</colgroup>
-<tbody>
-<tr>
-<td>usual</td>
-<td>mostly fully qualified names and some
- using-declarations (but not in headers)</td>
-</tr>
-<tr>
-<td>none</td>
-<td>no namespace std at all</td>
-</tr>
-<tr>
-<td>conservative-impl</td>
-<td>wrap all
- namespace-handling in macros to support compilers without
- namespace-support (no libstdc++ used in headers)</td>
-</tr>
-</tbody>
-</table>
-</div>
-<p>
- As you can see, this currently lacks an example of a project
- which uses libstdc++-symbols in headers in a back-portable way
- (except for Gtk--: see the <a href="#sec-gtkmm-hack" title="Using namespace
- composition if the project uses a separate
- namespace">section on the gtkmm-hack</a>).
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-nocreate"></a>There is no ios::nocreate/ios::noreplace
- in ISO 14882</h2></div></div>
-<p>
- I have seen <b>ios::nocreate</b> being used for
- input-streams, most probably because the author thought it would be
- more correct to specify nocreate &quot;explicitly&quot;. So you can simply
- leave it out for input-streams.
- </p>
-<p>
- For output streams, &quot;nocreate&quot; is probably the default, unless you
- specify <b>std::ios::trunc</b> ? To be safe, you can open
- the file for reading, check if it has been opened, and then decide
- whether you want to create/replace or not. To my knowledge, even
- older implementations support <b>app</b>,
- <b>ate</b> and <b>trunc</b> (except for
- <b>app</b> ?).
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-stream::attach"></a><b>stream::attach(int
- fd)</b> is not in the standard any more</h2></div></div>
-<p>
- Phil Edwards <tt>&lt;<a href="mailto:pedwards@disaster.jaj.com">pedwards@disaster.jaj.com</a>&gt;</tt> writes:
- It was considered and rejected. Not all environments use file
- descriptors. Of those that do, not all of them use integers to represent
- them.
- </p>
-
-<p>
- For a portable solution (among systems which use
- filedescriptors), you need to implement a subclass of
- <b>std::streambuf</b> (or
- <b>std::basic_streambuf&lt;..&gt;</b>) which opens a file
- given a descriptor, and then pass an instance of this to the
- stream-constructor. For an example of this, refer to
- <a href="http://www.josuttis.com/cppcode/fdstream.html" target="_top">fdstream example</a>
- by Nicolai Josuttis.
- </p>
-
-<p>
- An extension is also available:
- <code>&lt;ext/stdio_filebuf.h&gt;</code> contains a derived class called
- <a href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/class____gnu__cxx_1_1stdio__filebuf.html"><code>__gnu_cxx::stdio_filebuf</code></a>.
- This class can be constructed from a C <code>FILE*</code> or a file
- descriptor, and provides the <code>fd()</code> function.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-headers"></a>The new headers</h2></div></div>
-<p>
- All new headers can be seen in this <a href="headers_cc.txt" target="_top">
- source-code</a>.
- </p>
-<p>
- The old C++-headers (iostream.h etc.) are available, but gcc generates
- a warning that you are using deprecated headers.
- </p>
-<div class="section">
-<div class="titlepage"><div><h3 class="title">
-<a name="sec-cheaders"></a>New headers replacing C-headers</h3></div></div>
-<p>
- You should not use the C-headers (except for system-level
- headers) from C++ programs. Instead, you should use a set of
- headers that are named by prepending 'c' and, as usual,
- omitting the extension (.h). For example, instead of using
- <tt>&lt;math.h&gt;</tt>, you
- should use <tt>&lt;cmath&gt;</tt>. In some cases this has
- the advantage that the C++-header is more standardized than
- the C-header (i.e. <tt>&lt;ctime&gt;</tt> (almost)
- corresponds to either <tt>&lt;time.h&gt;</tt> or <tt>&lt;sys/time.h&gt;</tt>).
-
- The standard specifies that if you include the C-style header
- (<tt>&lt;math.h&gt;</tt> in
- this case), the symbols will be available both in the global
- namespace and in namespace <b>std::</b> (but
- libstdc++ does not yet have fully compliant headers) On the
- other hand, if you include only the new header (i.e. <tt>&lt;cmath&gt;</tt>), the symbols
- will only be defined in namespace <b>std::</b>
- (and macros will be converted to inline-functions).
- </p>
-<p>
- For more information on this, and for information on how the
- GNU C++ implementation might reuse (&quot;shadow&quot;) the C
- library-functions, have a look at <a href="http://www.cantrip.org/cheaders.html" target="_top">
- www.cantrip.org</a>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><h3 class="title">
-<a name="sec-fstream-header"></a>
- <tt>&lt;fstream&gt;</tt> does
- not define <b>std::cout</b>,
- <b>std::cin</b> etc.</h3></div></div>
-<p>
- In earlier versions of the standard,
- <tt>&lt;fstream.h&gt;</tt>,
- <tt>&lt;ostream.h&gt;</tt>
- and <tt>&lt;istream.h&gt;</tt>
- used to define
- <b>cout</b>, <b>cin</b> and so on. Because
- of the templatized iostreams in libstdc++-v3, you need to include
- <tt>&lt;iostream&gt;</tt>
- explicitly to define these.
- </p>
-</div>
-</div>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-iterators"></a>Iterators</h2></div></div>
-<p>
- The following are not proper uses of iterators, but may be working
- fixes for existing uses of iterators.
- <div class="itemizedlist"><ul type="disc">
-<li><p>you cannot do
- <b>ostream::operator&lt;&lt;(iterator)</b> to
- print the address of the iterator =&gt; use
- <b>operator&lt;&lt; &amp;*iterator</b> instead ?
- </p></li>
-<li><p>you cannot clear an iterator's reference
- (<b>iterator = 0</b>) =&gt; use
- <b>iterator = iterator_type();</b> ?
- </p></li>
-<li><p>
-<b>if (iterator)</b> won't work any
- more =&gt; use <b>if (iterator != iterator_type())</b>
- ?</p></li>
-</ul></div>
-</div>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-macros"></a>
- Libc-macros (i.e. <b>isspace</b> from
- <tt>&lt;cctype&gt;</tt>)</h2></div></div>
-<p>
- Glibc 2.0.x and 2.1.x define the
- <tt>&lt;ctype.h&gt;</tt>
- -functionality as macros (isspace, isalpha etc.). Libstdc++-v3
- &quot;shadows&quot; these macros as described in the <a href="#sec-cheaders" title="New headers replacing C-headers">section about
- c-headers</a>.
- </p>
-<p>
- Older implementations of libstdc++ (g++-2 for egcs 1.x and g++-3
- for gcc 2.95.x), however, keep these functions as macros, and so it
- is not back-portable to use fully qualified names. For example:
- <pre class="programlisting">
- #include &lt;cctype&gt;
- int main() { std::isspace('X'); }
- </pre>
- will result in something like this (unless using g++-v3):
- <pre class="programlisting">
- std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int)
- _ISspace ) ;
- </pre>
-<p>
- One solution I can think of is to test for -v3 using
- autoconf-macros, and define macros for each of the C-functions
- (maybe that is possible with one &quot;wrapper&quot; macro as well ?).
- </p>
-<p>
- Another solution which would fix g++ is to tell the user to modify a
- header-file so that g++-2 (egcs 1.x) and g++-3 (gcc 2.95.x) define a
- macro which tells <tt>&lt;ctype.h&gt;</tt> to define functions
- instead of macros:
- <pre class="programlisting">
- // This keeps isalnum, et al from being propagated as macros.
- #if __linux__
- #define __NO_CTYPE 1
- #endif
-
- [ now include &lt;ctype.h&gt; ]
- </pre>
-<p>
- Another problem arises if you put a <b>using namespace
- std;</b> declaration at the top, and include <tt>&lt;ctype.h&gt;</tt>. This will result in
- ambiguities between the definitions in the global namespace
- (<tt>&lt;ctype.h&gt;</tt>) and the
- definitions in namespace <b>std::</b>
- (<b>&lt;cctype&gt;</b>).
- </p>
-<p>
- The solution to this problem was posted to the libstdc++-v3
- mailing-list:
- Benjamin Kosnik <tt>&lt;<a href="mailto:bkoz@redhat.com">bkoz@redhat.com</a>&gt;</tt> writes:
- &#x2018;
- --enable-cshadow-headers is currently broken. As a result, shadow
- headers are not being searched....
- &#x2019;
- This is now outdated, but gcc 3.0 still does not have fully
- compliant &quot;shadow headers&quot;.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-stream-state"></a>State of streams</h2></div></div>
-<p>
- At least some older implementations don't have
- <b>std::ios_base</b>, so you should use
- <b>std::ios::badbit</b>, <b>std::ios::failbit</b>
- and <b>std::ios::eofbit</b> and
- <b>std::ios::goodbit</b>.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-vector-at"></a>vector::at is missing (i.e. gcc 2.95.x)</h2></div></div>
-<p>
- One solution is to add an autoconf-test for this:
- <pre class="programlisting">
- AC_MSG_CHECKING(for container::at)
- AC_TRY_COMPILE(
- [
- #include &lt;vector&gt;
- #include &lt;deque&gt;
- #include &lt;string&gt;
-
- using namespace std;
- ],
- [
- deque&lt;int&gt; test_deque(3);
- test_deque.at(2);
- vector&lt;int&gt; test_vector(2);
- test_vector.at(1);
- string test_string(&quot;test_string&quot;);
- test_string.at(3);
- ],
- [AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_CONTAINER_AT)],
- [AC_MSG_RESULT(no)])
- </pre>
- If you are using other (non-GNU) compilers it might be a good idea
- to check for <b>string::at</b> separately.
-</div>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-eof"></a>Using std::char_traits&lt;char&gt;::eof()</h2></div></div>
-<p>
- <pre class="programlisting">
- #ifdef HAVE_CHAR_TRAITS
- #define CPP_EOF std::char_traits&lt;char&gt;::eof()
- #else
- #define CPP_EOF EOF
- #endif
- </pre>
-</div>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-string-clear"></a>Using string::clear()/string::erase()</h2></div></div>
-<p>
- There are two functions for deleting the contents of a string:
- <b>clear</b> and <b>erase</b> (the latter
- returns the string).
- <pre class="programlisting">
- void
- clear() { _M_mutate(0, this-&gt;size(), 0); }
- </pre>
- <pre class="programlisting">
- basic_string&amp;
- erase(size_type __pos = 0, size_type __n = npos)
- {
- return this-&gt;replace(_M_check(__pos), _M_fold(__pos, __n),
- _M_data(), _M_data());
- }
- </pre>
- The implementation of <b>erase</b> seems to be more
- complicated (from libstdc++-v3), but <b>clear</b> is not
- implemented in gcc 2.95.x's libstdc++, so you should use
- <b>erase</b> (which is probably faster than
- <b>operator=(charT*)</b>).
-</div>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-scan-form"></a>GNU Extensions ostream::form and istream::scan</h2></div></div>
-<p>
- These are not supported any more - use
- <a href="#sec-stringstream" title="Using stringstreams">
- stringstreams</a> instead.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-stringstream"></a>Using stringstreams</h2></div></div>
-<p>
- Libstdc++-v3 provides the new
- <b>i/ostringstream</b>-classes, (<tt>&lt;sstream&gt;</tt>), but for compatibility
- with older implementations you still have to use
- <b>i/ostrstream</b> (<tt>&lt;strstream&gt;</tt>):
- <pre class="programlisting">
- #ifdef HAVE_SSTREAM
- #include &lt;sstream&gt;
- #else
- #include &lt;strstream&gt;
- #endif
- </pre>
- <div class="itemizedlist"><ul type="disc">
-<li><p> <b>strstream</b> is considered to be
- deprecated
- </p></li>
-<li><p> <b>strstream</b> is limited to
- <b>char</b>
- </p></li>
-<li><p> with <b>ostringstream</b> you don't
- have to take care of terminating the string or freeing its
- memory
- </p></li>
-<li><p> <b>istringstream</b> can be re-filled
- (clear(); str(input);)
- </p></li>
-</ul></div>
-<p>
- You can then use output-stringstreams like this:
- <pre class="programlisting">
- #ifdef HAVE_SSTREAM
- std::ostringstream oss;
- #else
- std::ostrstream oss;
- #endif
- oss &lt;&lt; &quot;Name=&quot; &lt;&lt; m_name &lt;&lt; &quot;, number=&quot; &lt;&lt; m_number &lt;&lt; std::endl;
- ...
- #ifndef HAVE_SSTREAM
- oss &lt;&lt; std::ends; // terminate the char*-string
- #endif
- // str() returns char* for ostrstream and a string for ostringstream
- // this also causes ostrstream to think that the buffer's memory
- // is yours
- m_label.set_text(oss.str());
- #ifndef HAVE_SSTREAM
- // let the ostrstream take care of freeing the memory
- oss.freeze(false);
- #endif
- </pre>
-<p>
- Input-stringstreams can be used similarly:
- <pre class="programlisting">
- std::string input;
- ...
- #ifdef HAVE_SSTREAM
- std::istringstream iss(input);
- #else
- std::istrstream iss(input.c_str());
- #endif
- int i;
- iss &gt;&gt; i;
- </pre>
- One (the only?) restriction is that an istrstream cannot be re-filled:
- <pre class="programlisting">
- std::istringstream iss(numerator);
- iss &gt;&gt; m_num;
- // this is not possible with istrstream
- iss.clear();
- iss.str(denominator);
- iss &gt;&gt; m_den;
- </pre>
- If you don't care about speed, you can put these conversions in
- a template-function:
- <pre class="programlisting">
- template &lt;class X&gt;
- void fromString(const string&amp; input, X&amp; any)
- {
- #ifdef HAVE_SSTREAM
- std::istringstream iss(input);
- #else
- std::istrstream iss(input.c_str());
- #endif
- X temp;
- iss &gt;&gt; temp;
- if (iss.fail())
- throw runtime_error(..)
- any = temp;
- }
- </pre>
- Another example of using stringstreams is in <a href="../21_strings/howto.html" target="_top">this howto</a>.
-<p>
- I have read the Josuttis book on Standard C++, so some information
- comes from there. Additionally, there is information in
- &quot;info iostream&quot;, which covers the old implementation that gcc 2.95.x
- uses.
- </p>
-</div>
-<div class="section">
-<div class="titlepage"><div><h2 class="title" style="clear: both">
-<a name="sec-about"></a>About...</h2></div></div>
-<p>
- Please send any experience, additions, corrections or questions to
- <a href="mailto:fnatter@gmx.net" target="_top">fnatter@gmx.net</a> or for
- discussion to the libstdc++-v3-mailing-list.
- </p>
-</div>
-</div></body>
-</html>
diff --git a/libstdc++-v3/docs/html/17_intro/porting.html b/libstdc++-v3/docs/html/17_intro/porting.html
deleted file mode 100644
index c280990c901..00000000000
--- a/libstdc++-v3/docs/html/17_intro/porting.html
+++ /dev/null
@@ -1,992 +0,0 @@
-<html lang="en">
-<head>
-<title>Porting libstdc++-v3</title>
-<meta http-equiv="Content-Type" content="text/html">
-<meta name="description" content="Porting libstdc++-v3">
-<meta name="generator" content="makeinfo 4.6">
-<!--
-Copyright &copy; 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
-
- <p>Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.2 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being "GNU General Public License", the Front-Cover
-texts being (a) (see below), and with the Back-Cover Texts being (b)
-(see below). A copy of the license is included in the section entitled
-"GNU Free Documentation License".
-
- <p>(a) The FSF's Front-Cover Text is:
-
- <p>A GNU Manual
-
- <p>(b) The FSF's Back-Cover Text is:
-
- <p>You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development.-->
-<meta http-equiv="Content-Style-Type" content="text/css">
-<style type="text/css"><!--
- pre.display { font-family:inherit }
- pre.format { font-family:inherit }
- pre.smalldisplay { font-family:inherit; font-size:smaller }
- pre.smallformat { font-family:inherit; font-size:smaller }
- pre.smallexample { font-size:smaller }
- pre.smalllisp { font-size:smaller }
---></style>
-</head>
-<body>
-<h1 class="settitle">Porting libstdc++-v3</h1>
-<div class="node">
-<p><hr>
-Node:&nbsp;<a name="Top">Top</a>,
-Next:&nbsp;<a rel="next" accesskey="n" href="#Operating%20system">Operating system</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
-<br>
-</div>
-
-<h2 class="unnumbered">Porting libstdc++-v3</h2>
-
-<p>This document explains how to port libstdc++-v3 (the GNU C++ library) to
-a new target.
-
- <p>In order to make the GNU C++ library (libstdc++-v3) work with a new
-target, you must edit some configuration files and provide some new
-header files. Unless this is done, libstdc++-v3 will use generic
-settings which may not be correct for your target; even if they are
-correct, they will likely be inefficient.
-
- <p>Before you get started, make sure that you have a working C library on
-your target. The C library need not precisely comply with any
-particular standard, but should generally conform to the requirements
-imposed by the ANSI/ISO standard.
-
- <p>In addition, you should try to verify that the C++ compiler generally
-works. It is difficult to test the C++ compiler without a working
-library, but you should at least try some minimal test cases.
-
- <p>(Note that what we think of as a "target," the library refers to as
-a "host." The comment at the top of <code>configure.ac</code> explains why.)
-
- <p>Here are the primary steps required to port the library:
-
-<ul class="menu">
-<li><a accesskey="1" href="#Operating%20system">Operating system</a>: Configuring for your operating system.
-<li><a accesskey="2" href="#CPU">CPU</a>: Configuring for your processor chip.
-<li><a accesskey="3" href="#Character%20types">Character types</a>: Implementing character classification.
-<li><a accesskey="4" href="#Thread%20safety">Thread safety</a>: Implementing atomic operations.
-<li><a accesskey="5" href="#Numeric%20limits">Numeric limits</a>: Implementing numeric limits.
-<li><a accesskey="6" href="#Libtool">Libtool</a>: Using libtool.
-<li><a accesskey="7" href="#GNU%20Free%20Documentation%20License">GNU Free Documentation License</a>: How you can copy and share this manual.
-</ul>
-
-<div class="node">
-<p><hr>
-Node:&nbsp;<a name="Operating%20system">Operating system</a>,
-Next:&nbsp;<a rel="next" accesskey="n" href="#CPU">CPU</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Top">Top</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-<br>
-</div>
-
-<h2 class="chapter">Operating system</h2>
-
-<p>If you are porting to a new operating system (as opposed to a new chip
-using an existing operating system), you will need to create a new
-directory in the <code>config/os</code> hierarchy. For example, the IRIX
-configuration files are all in <code>config/os/irix</code>. There is no set
-way to organize the OS configuration directory. For example,
-<code>config/os/solaris/solaris-2.6</code> and
-<code>config/os/solaris/solaris-2.7</code> are used as configuration
-directories for these two versions of Solaris. On the other hand, both
-Solaris 2.7 and Solaris 2.8 use the <code>config/os/solaris/solaris-2.7</code>
-directory. The important information is that there needs to be a
-directory under <code>config/os</code> to store the files for your operating
-system.
-
- <p>You might have to change the <code>configure.host</code> file to ensure that
-your new directory is activated. Look for the switch statement that sets
-<code>os_include_dir</code>, and add a pattern to handle your operating system
-if the default will not suffice. The switch statement switches on only
-the OS portion of the standard target triplet; e.g., the <code>solaris2.8</code>
-in <code>sparc-sun-solaris2.8</code>. If the new directory is named after the
-OS portion of the triplet (the default), then nothing needs to be changed.
-
- <p>The first file to create in this directory, should be called
-<code>os_defines.h</code>. This file contains basic macro definitions
-that are required to allow the C++ library to work with your C library.
-
- <p>Several libstdc++-v3 source files unconditionally define the macro
-<code>_POSIX_SOURCE</code>. On many systems, defining this macro causes
-large portions of the C library header files to be eliminated
-at preprocessing time. Therefore, you may have to <code>#undef</code> this
-macro, or define other macros (like <code>_LARGEFILE_SOURCE</code> or
-<code>__EXTENSIONS__</code>). You won't know what macros to define or
-undefine at this point; you'll have to try compiling the library and
-seeing what goes wrong. If you see errors about calling functions
-that have not been declared, look in your C library headers to see if
-the functions are declared there, and then figure out what macros you
-need to define. You will need to add them to the
-<code>CPLUSPLUS_CPP_SPEC</code> macro in the GCC configuration file for your
-target. It will not work to simply define these macros in
-<code>os_defines.h</code>.
-
- <p>At this time, there are a few libstdc++-v3-specific macros which may be
-defined:
-
- <p><code>_GLIBCXX_USE_C99_CHECK</code> may be defined to 1 to check C99
-function declarations (which are not covered by specialization below)
-found in system headers against versions found in the library headers
-derived from the standard.
-
- <p><code>_GLIBCXX_USE_C99_DYNAMIC</code> may be defined to an expression that
-yields 0 if and only if the system headers are exposing proper support
-for C99 functions (which are not covered by specialization below). If
-defined, it must be 0 while bootstrapping the compiler/rebuilding the
-library.
-
- <p><code>_GLIBCXX_USE_C99_LONG_LONG_CHECK</code> may be defined to 1 to check
-the set of C99 long long function declarations found in system headers
-against versions found in the library headers derived from the
-standard.
-
- <p><code>_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC</code> may be defined to an
-expression that yields 0 if and only if the system headers are
-exposing proper support for the set of C99 long long functions. If
-defined, it must be 0 while bootstrapping the compiler/rebuilding the
-library.
-
- <p><code>_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC</code> may be defined to an
-expression that yields 0 if and only if the system headers
-are exposing proper support for the related set of macros. If defined,
-it must be 0 while bootstrapping the compiler/rebuilding the library.
-
- <p><code>_GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_CHECK</code> may be defined
-to 1 to check the related set of function declarations found in system
-headers against versions found in the library headers derived from
-the standard.
-
- <p><code>_GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC</code> may be defined
-to an expression that yields 0 if and only if the system headers
-are exposing proper support for the related set of functions. If defined,
-it must be 0 while bootstrapping the compiler/rebuilding the library.
-
- <p>Finally, you should bracket the entire file in an include-guard, like
-this:
-
-<pre class="example"> #ifndef _GLIBCXX_OS_DEFINES
- #define _GLIBCXX_OS_DEFINES
- ...
- #endif
- </pre>
-
- <p>We recommend copying an existing <code>os_defines.h</code> to use as a
-starting point.
-
-<div class="node">
-<p><hr>
-Node:&nbsp;<a name="CPU">CPU</a>,
-Next:&nbsp;<a rel="next" accesskey="n" href="#Character%20types">Character types</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Operating%20system">Operating system</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-<br>
-</div>
-
-<h2 class="chapter">CPU</h2>
-
-<p>If you are porting to a new chip (as opposed to a new operating system
-running on an existing chip), you will need to create a new directory in the
-<code>config/cpu</code> hierarchy. Much like the <a href="#Operating%20system">Operating system</a> setup,
-there are no strict rules on how to organize the CPU configuration
-directory, but careful naming choices will allow the configury to find your
-setup files without explicit help.
-
- <p>We recommend that for a target triplet <code>&lt;CPU&gt;-&lt;vendor&gt;-&lt;OS&gt;</code>, you
-name your configuration directory <code>config/cpu/&lt;CPU&gt;</code>. If you do this,
-the configury will find the directory by itself. Otherwise you will need to
-edit the <code>configure.host</code> file and, in the switch statement that sets
-<code>cpu_include_dir</code>, add a pattern to handle your chip.
-
- <p>Note that some chip families share a single configuration directory, for
-example, <code>alpha</code>, <code>alphaev5</code>, and <code>alphaev6</code> all use the
-<code>config/cpu/alpha</code> directory, and there is an entry in the
-<code>configure.host</code> switch statement to handle this.
-
- <p>The <code>cpu_include_dir</code> sets default locations for the files controlling
-<a href="#Thread%20safety">Thread safety</a> and <a href="#Numeric%20limits">Numeric limits</a>, if the defaults are not
-appropriate for your chip.
-
-<div class="node">
-<p><hr>
-Node:&nbsp;<a name="Character%20types">Character types</a>,
-Next:&nbsp;<a rel="next" accesskey="n" href="#Thread%20safety">Thread safety</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#CPU">CPU</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-<br>
-</div>
-
-<h2 class="chapter">Character types</h2>
-
-<p>The library requires that you provide three header files to implement
-character classification, analogous to that provided by the C libraries
-<code>&lt;ctype.h&gt;</code> header. You can model these on the files provided in
-<code>config/os/generic</code>. However, these files will almost
-certainly need some modification.
-
- <p>The first file to write is <code>ctype_base.h</code>. This file provides
-some very basic information about character classification. The libstdc++-v3
-library assumes that your C library implements <code>&lt;ctype.h&gt;</code> by using
-a table (indexed by character code) containing integers, where each of
-these integers is a bit-mask indicating whether the character is
-upper-case, lower-case, alphabetic, etc. The <code>ctype_base.h</code>
-file gives the type of the integer, and the values of the various bit
-masks. You will have to peer at your own <code>&lt;ctype.h&gt;</code> to figure out
-how to define the values required by this file.
-
- <p>The <code>ctype_base.h</code> header file does not need include guards.
-It should contain a single <code>struct</code> definition called
-<code>ctype_base</code>. This <code>struct</code> should contain two type
-declarations, and one enumeration declaration, like this example, taken
-from the IRIX configuration:
-
-<pre class="example"> struct ctype_base
- {
- typedef unsigned int mask;
- typedef int* __to_type;
-
- enum
- {
- space = _ISspace,
- print = _ISprint,
- cntrl = _IScntrl,
- upper = _ISupper,
- lower = _ISlower,
- alpha = _ISalpha,
- digit = _ISdigit,
- punct = _ISpunct,
- xdigit = _ISxdigit,
- alnum = _ISalnum,
- graph = _ISgraph
- };
- };
- </pre>
-
-<p>The <code>mask</code> type is the type of the elements in the table. If your
-C library uses a table to map lower-case numbers to upper-case numbers,
-and vice versa, you should define <code>__to_type</code> to be the type of the
-elements in that table. If you don't mind taking a minor performance
-penalty, or if your library doesn't implement <code>toupper</code> and
-<code>tolower</code> in this way, you can pick any pointer-to-integer type,
-but you must still define the type.
-
- <p>The enumeration should give definitions for all the values in the above
-example, using the values from your native <code>&lt;ctype.h&gt;</code>. They can
-be given symbolically (as above), or numerically, if you prefer. You do
-not have to include <code>&lt;ctype.h&gt;</code> in this header; it will always be
-included before <code>ctype_base.h</code> is included.
-
- <p>The next file to write is <code>ctype_noninline.h</code>, which also does
-not require include guards. This file defines a few member functions
-that will be included in <code>include/bits/locale_facets.h</code>. The first
-function that must be written is the <code>ctype&lt;char&gt;::ctype</code>
-constructor. Here is the IRIX example:
-
-<pre class="example"> ctype&lt;char&gt;::ctype(const mask* __table = 0, bool __del = false,
- size_t __refs = 0)
- : _Ctype_nois&lt;char&gt;(__refs), _M_del(__table != 0 &amp;&amp; __del),
- _M_toupper(NULL),
- _M_tolower(NULL),
- _M_ctable(NULL),
- _M_table(!__table
- ? (const mask*) (__libc_attr._ctype_tbl-&gt;_class + 1)
- : __table)
- { }
- </pre>
-
-<p>There are two parts of this that you might choose to alter. The first,
-and most important, is the line involving <code>__libc_attr</code>. That is
-IRIX system-dependent code that gets the base of the table mapping
-character codes to attributes. You need to substitute code that obtains
-the address of this table on your system. If you want to use your
-operating system's tables to map upper-case letters to lower-case, and
-vice versa, you should initialize <code>_M_toupper</code> and
-<code>_M_tolower</code> with those tables, in similar fashion.
-
- <p>Now, you have to write two functions to convert from upper-case to
-lower-case, and vice versa. Here are the IRIX versions:
-
-<pre class="example"> char
- ctype&lt;char&gt;::do_toupper(char __c) const
- { return _toupper(__c); }
-
- char
- ctype&lt;char&gt;::do_tolower(char __c) const
- { return _tolower(__c); }
- </pre>
-
-<p>Your C library provides equivalents to IRIX's <code>_toupper</code> and
-<code>_tolower</code>. If you initialized <code>_M_toupper</code> and
-<code>_M_tolower</code> above, then you could use those tables instead.
-
- <p>Finally, you have to provide two utility functions that convert strings
-of characters. The versions provided here will always work - but you
-could use specialized routines for greater performance if you have
-machinery to do that on your system:
-
-<pre class="example"> const char*
- ctype&lt;char&gt;::do_toupper(char* __low, const char* __high) const
- {
- while (__low &lt; __high)
- {
- *__low = do_toupper(*__low);
- ++__low;
- }
- return __high;
- }
-
- const char*
- ctype&lt;char&gt;::do_tolower(char* __low, const char* __high) const
- {
- while (__low &lt; __high)
- {
- *__low = do_tolower(*__low);
- ++__low;
- }
- return __high;
- }
- </pre>
-
- <p>You must also provide the <code>ctype_inline.h</code> file, which
-contains a few more functions. On most systems, you can just copy
-<code>config/os/generic/ctype_inline.h</code> and use it on your system.
-
- <p>In detail, the functions provided test characters for particular
-properties; they are analogous to the functions like <code>isalpha</code> and
-<code>islower</code> provided by the C library.
-
- <p>The first function is implemented like this on IRIX:
-
-<pre class="example"> bool
- ctype&lt;char&gt;::
- is(mask __m, char __c) const throw()
- { return (_M_table)[(unsigned char)(__c)] &amp; __m; }
- </pre>
-
-<p>The <code>_M_table</code> is the table passed in above, in the constructor.
-This is the table that contains the bitmasks for each character. The
-implementation here should work on all systems.
-
- <p>The next function is:
-
-<pre class="example"> const char*
- ctype&lt;char&gt;::
- is(const char* __low, const char* __high, mask* __vec) const throw()
- {
- while (__low &lt; __high)
- *__vec++ = (_M_table)[(unsigned char)(*__low++)];
- return __high;
- }
- </pre>
-
-<p>This function is similar; it copies the masks for all the characters
-from <code>__low</code> up until <code>__high</code> into the vector given by
-<code>__vec</code>.
-
- <p>The last two functions again are entirely generic:
-
-<pre class="example"> const char*
- ctype&lt;char&gt;::
- scan_is(mask __m, const char* __low, const char* __high) const throw()
- {
- while (__low &lt; __high &amp;&amp; !this-&gt;is(__m, *__low))
- ++__low;
- return __low;
- }
-
- const char*
- ctype&lt;char&gt;::
- scan_not(mask __m, const char* __low, const char* __high) const throw()
- {
- while (__low &lt; __high &amp;&amp; this-&gt;is(__m, *__low))
- ++__low;
- return __low;
- }
- </pre>
-
-<div class="node">
-<p><hr>
-Node:&nbsp;<a name="Thread%20safety">Thread safety</a>,
-Next:&nbsp;<a rel="next" accesskey="n" href="#Numeric%20limits">Numeric limits</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Character%20types">Character types</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-<br>
-</div>
-
-<h2 class="chapter">Thread safety</h2>
-
-<p>The C++ library string functionality requires a couple of atomic
-operations to provide thread-safety. If you don't take any special
-action, the library will use stub versions of these functions that are
-not thread-safe. They will work fine, unless your applications are
-multi-threaded.
-
- <p>If you want to provide custom, safe, versions of these functions, there
-are two distinct approaches. One is to provide a version for your CPU,
-using assembly language constructs. The other is to use the
-thread-safety primitives in your operating system. In either case, you
-make a file called <code>atomicity.h</code>, and the variable
-<code>ATOMICITYH</code> must point to this file.
-
- <p>If you are using the assembly-language approach, put this code in
-<code>config/cpu/&lt;chip&gt;/atomicity.h</code>, where chip is the name of
-your processor (see <a href="#CPU">CPU</a>). No additional changes are necessary to
-locate the file in this case; <code>ATOMICITYH</code> will be set by default.
-
- <p>If you are using the operating system thread-safety primitives approach,
-you can also put this code in the same CPU directory, in which case no more
-work is needed to locate the file. For examples of this approach,
-see the <code>atomicity.h</code> file for IRIX or IA64.
-
- <p>Alternatively, if the primitives are more closely related to the OS
-than they are to the CPU, you can put the <code>atomicity.h</code> file in
-the <a href="#Operating%20system">Operating system</a> directory instead. In this case, you must
-edit <code>configure.host</code>, and in the switch statement that handles
-operating systems, override the <code>ATOMICITYH</code> variable to point to
-the appropriate <code>os_include_dir</code>. For examples of this approach,
-see the <code>atomicity.h</code> file for AIX.
-
- <p>With those bits out of the way, you have to actually write
-<code>atomicity.h</code> itself. This file should be wrapped in an
-include guard named <code>_GLIBCXX_ATOMICITY_H</code>. It should define one
-type, and two functions.
-
- <p>The type is <code>_Atomic_word</code>. Here is the version used on IRIX:
-
-<pre class="example"> typedef long _Atomic_word;
- </pre>
-
-<p>This type must be a signed integral type supporting atomic operations.
-If you're using the OS approach, use the same type used by your system's
-primitives. Otherwise, use the type for which your CPU provides atomic
-primitives.
-
- <p>Then, you must provide two functions. The bodies of these functions
-must be equivalent to those provided here, but using atomic operations:
-
-<pre class="example"> static inline _Atomic_word
- __attribute__ ((__unused__))
- __exchange_and_add (_Atomic_word* __mem, int __val)
- {
- _Atomic_word __result = *__mem;
- *__mem += __val;
- return __result;
- }
-
- static inline void
- __attribute__ ((__unused__))
- __atomic_add (_Atomic_word* __mem, int __val)
- {
- *__mem += __val;
- }
- </pre>
-
-<div class="node">
-<p><hr>
-Node:&nbsp;<a name="Numeric%20limits">Numeric limits</a>,
-Next:&nbsp;<a rel="next" accesskey="n" href="#Libtool">Libtool</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Thread%20safety">Thread safety</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-<br>
-</div>
-
-<h2 class="chapter">Numeric limits</h2>
-
-<p>The C++ library requires information about the fundamental data types,
-such as the minimum and maximum representable values of each type.
-You can define each of these values individually, but it is usually
-easiest just to indicate how many bits are used in each of the data
-types and let the library do the rest. For information about the
-macros to define, see the top of <code>include/bits/std_limits.h</code>.
-
- <p>If you need to define any macros, you can do so in <code>os_defines.h</code>.
-However, if all operating systems for your CPU are likely to use the
-same values, you can provide a CPU-specific file instead so that you
-do not have to provide the same definitions for each operating system.
-To take that approach, create a new file called <code>cpu_limits.h</code> in
-your CPU configuration directory (see <a href="#CPU">CPU</a>).
-
-<div class="node">
-<p><hr>
-Node:&nbsp;<a name="Libtool">Libtool</a>,
-Next:&nbsp;<a rel="next" accesskey="n" href="#GNU%20Free%20Documentation%20License">GNU Free Documentation License</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Numeric%20limits">Numeric limits</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-<br>
-</div>
-
-<h2 class="chapter">Libtool</h2>
-
-<p>The C++ library is compiled, archived and linked with libtool.
-Explaining the full workings of libtool is beyond the scope of this
-document, but there are a few, particular bits that are necessary for
-porting.
-
- <p>Some parts of the libstdc++-v3 library are compiled with the libtool
-<code>--tags CXX</code> option (the C++ definitions for libtool). Therefore,
-<code>ltcf-cxx.sh</code> in the top-level directory needs to have the correct
-logic to compile and archive objects equivalent to the C version of libtool,
-<code>ltcf-c.sh</code>. Some libtool targets have definitions for C but not
-for C++, or C++ definitions which have not been kept up to date.
-
- <p>The C++ run-time library contains initialization code that needs to be
-run as the library is loaded. Often, that requires linking in special
-object files when the C++ library is built as a shared library, or
-taking other system-specific actions.
-
- <p>The libstdc++-v3 library is linked with the C version of libtool, even
-though it is a C++ library. Therefore, the C version of libtool needs to
-ensure that the run-time library initializers are run. The usual way to
-do this is to build the library using <code>gcc -shared</code>.
-
- <p>If you need to change how the library is linked, look at
-<code>ltcf-c.sh</code> in the top-level directory. Find the switch statement
-that sets <code>archive_cmds</code>. Here, adjust the setting for your
-operating system.
-
-<div class="node">
-<p><hr>
-Node:&nbsp;<a name="GNU%20Free%20Documentation%20License">GNU Free Documentation License</a>,
-Previous:&nbsp;<a rel="previous" accesskey="p" href="#Libtool">Libtool</a>,
-Up:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-<br>
-</div>
-
-<h2 class="unnumbered">GNU Free Documentation License</h2>
-
-<div align="center">Version 1.2, November 2002</div>
-<pre class="display"> Copyright &copy; 2000,2001,2002 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
- </pre>
-
- <ol type=1 start=0>
-<li>PREAMBLE
-
- <p>The purpose of this License is to make a manual, textbook, or other
-functional and useful document <dfn>free</dfn> in the sense of freedom: to
-assure everyone the effective freedom to copy and redistribute it,
-with or without modifying it, either commercially or noncommercially.
-Secondarily, this License preserves for the author and publisher a way
-to get credit for their work, while not being considered responsible
-for modifications made by others.
-
- <p>This License is a kind of "copyleft", which means that derivative
-works of the document must themselves be free in the same sense. It
-complements the GNU General Public License, which is a copyleft
-license designed for free software.
-
- <p>We have designed this License in order to use it for manuals for free
-software, because free software needs free documentation: a free
-program should come with manuals providing the same freedoms that the
-software does. But this License is not limited to software manuals;
-it can be used for any textual work, regardless of subject matter or
-whether it is published as a printed book. We recommend this License
-principally for works whose purpose is instruction or reference.
-
- </p><li>APPLICABILITY AND DEFINITIONS
-
- <p>This License applies to any manual or other work, in any medium, that
-contains a notice placed by the copyright holder saying it can be
-distributed under the terms of this License. Such a notice grants a
-world-wide, royalty-free license, unlimited in duration, to use that
-work under the conditions stated herein. The "Document", below,
-refers to any such manual or work. Any member of the public is a
-licensee, and is addressed as "you". You accept the license if you
-copy, modify or distribute the work in a way requiring permission
-under copyright law.
-
- <p>A "Modified Version" of the Document means any work containing the
-Document or a portion of it, either copied verbatim, or with
-modifications and/or translated into another language.
-
- <p>A "Secondary Section" is a named appendix or a front-matter section
-of the Document that deals exclusively with the relationship of the
-publishers or authors of the Document to the Document's overall
-subject (or to related matters) and contains nothing that could fall
-directly within that overall subject. (Thus, if the Document is in
-part a textbook of mathematics, a Secondary Section may not explain
-any mathematics.) The relationship could be a matter of historical
-connection with the subject or with related matters, or of legal,
-commercial, philosophical, ethical or political position regarding
-them.
-
- <p>The "Invariant Sections" are certain Secondary Sections whose titles
-are designated, as being those of Invariant Sections, in the notice
-that says that the Document is released under this License. If a
-section does not fit the above definition of Secondary then it is not
-allowed to be designated as Invariant. The Document may contain zero
-Invariant Sections. If the Document does not identify any Invariant
-Sections then there are none.
-
- <p>The "Cover Texts" are certain short passages of text that are listed,
-as Front-Cover Texts or Back-Cover Texts, in the notice that says that
-the Document is released under this License. A Front-Cover Text may
-be at most 5 words, and a Back-Cover Text may be at most 25 words.
-
- <p>A "Transparent" copy of the Document means a machine-readable copy,
-represented in a format whose specification is available to the
-general public, that is suitable for revising the document
-straightforwardly with generic text editors or (for images composed of
-pixels) generic paint programs or (for drawings) some widely available
-drawing editor, and that is suitable for input to text formatters or
-for automatic translation to a variety of formats suitable for input
-to text formatters. A copy made in an otherwise Transparent file
-format whose markup, or absence of markup, has been arranged to thwart
-or discourage subsequent modification by readers is not Transparent.
-An image format is not Transparent if used for any substantial amount
-of text. A copy that is not "Transparent" is called "Opaque".
-
- <p>Examples of suitable formats for Transparent copies include plain
-<small>ASCII</small> without markup, Texinfo input format, LaTeX input
-format, <small>SGML</small> or <small>XML</small> using a publicly available
-<small>DTD</small>, and standard-conforming simple <small>HTML</small>,
-PostScript or <small>PDF</small> designed for human modification. Examples
-of transparent image formats include <small>PNG</small>, <small>XCF</small> and
-<small>JPG</small>. Opaque formats include proprietary formats that can be
-read and edited only by proprietary word processors, <small>SGML</small> or
-<small>XML</small> for which the <small>DTD</small> and/or processing tools are
-not generally available, and the machine-generated <small>HTML</small>,
-PostScript or <small>PDF</small> produced by some word processors for
-output purposes only.
-
- <p>The "Title Page" means, for a printed book, the title page itself,
-plus such following pages as are needed to hold, legibly, the material
-this License requires to appear in the title page. For works in
-formats which do not have any title page as such, "Title Page" means
-the text near the most prominent appearance of the work's title,
-preceding the beginning of the body of the text.
-
- <p>A section "Entitled XYZ" means a named subunit of the Document whose
-title either is precisely XYZ or contains XYZ in parentheses following
-text that translates XYZ in another language. (Here XYZ stands for a
-specific section name mentioned below, such as "Acknowledgements",
-"Dedications", "Endorsements", or "History".) To "Preserve the Title"
-of such a section when you modify the Document means that it remains a
-section "Entitled XYZ" according to this definition.
-
- <p>The Document may include Warranty Disclaimers next to the notice which
-states that this License applies to the Document. These Warranty
-Disclaimers are considered to be included by reference in this
-License, but only as regards disclaiming warranties: any other
-implication that these Warranty Disclaimers may have is void and has
-no effect on the meaning of this License.
-
- </p><li>VERBATIM COPYING
-
- <p>You may copy and distribute the Document in any medium, either
-commercially or noncommercially, provided that this License, the
-copyright notices, and the license notice saying this License applies
-to the Document are reproduced in all copies, and that you add no other
-conditions whatsoever to those of this License. You may not use
-technical measures to obstruct or control the reading or further
-copying of the copies you make or distribute. However, you may accept
-compensation in exchange for copies. If you distribute a large enough
-number of copies you must also follow the conditions in section 3.
-
- <p>You may also lend copies, under the same conditions stated above, and
-you may publicly display copies.
-
- </p><li>COPYING IN QUANTITY
-
- <p>If you publish printed copies (or copies in media that commonly have
-printed covers) of the Document, numbering more than 100, and the
-Document's license notice requires Cover Texts, you must enclose the
-copies in covers that carry, clearly and legibly, all these Cover
-Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
-the back cover. Both covers must also clearly and legibly identify
-you as the publisher of these copies. The front cover must present
-the full title with all words of the title equally prominent and
-visible. You may add other material on the covers in addition.
-Copying with changes limited to the covers, as long as they preserve
-the title of the Document and satisfy these conditions, can be treated
-as verbatim copying in other respects.
-
- <p>If the required texts for either cover are too voluminous to fit
-legibly, you should put the first ones listed (as many as fit
-reasonably) on the actual cover, and continue the rest onto adjacent
-pages.
-
- <p>If you publish or distribute Opaque copies of the Document numbering
-more than 100, you must either include a machine-readable Transparent
-copy along with each Opaque copy, or state in or with each Opaque copy
-a computer-network location from which the general network-using
-public has access to download using public-standard network protocols
-a complete Transparent copy of the Document, free of added material.
-If you use the latter option, you must take reasonably prudent steps,
-when you begin distribution of Opaque copies in quantity, to ensure
-that this Transparent copy will remain thus accessible at the stated
-location until at least one year after the last time you distribute an
-Opaque copy (directly or through your agents or retailers) of that
-edition to the public.
-
- <p>It is requested, but not required, that you contact the authors of the
-Document well before redistributing any large number of copies, to give
-them a chance to provide you with an updated version of the Document.
-
- </p><li>MODIFICATIONS
-
- <p>You may copy and distribute a Modified Version of the Document under
-the conditions of sections 2 and 3 above, provided that you release
-the Modified Version under precisely this License, with the Modified
-Version filling the role of the Document, thus licensing distribution
-and modification of the Modified Version to whoever possesses a copy
-of it. In addition, you must do these things in the Modified Version:
-
- <ol type=A start=1>
-<li>Use in the Title Page (and on the covers, if any) a title distinct
-from that of the Document, and from those of previous versions
-(which should, if there were any, be listed in the History section
-of the Document). You may use the same title as a previous version
-if the original publisher of that version gives permission.
-
- <li>List on the Title Page, as authors, one or more persons or entities
-responsible for authorship of the modifications in the Modified
-Version, together with at least five of the principal authors of the
-Document (all of its principal authors, if it has fewer than five),
-unless they release you from this requirement.
-
- <li>State on the Title page the name of the publisher of the
-Modified Version, as the publisher.
-
- <li>Preserve all the copyright notices of the Document.
-
- <li>Add an appropriate copyright notice for your modifications
-adjacent to the other copyright notices.
-
- <li>Include, immediately after the copyright notices, a license notice
-giving the public permission to use the Modified Version under the
-terms of this License, in the form shown in the Addendum below.
-
- <li>Preserve in that license notice the full lists of Invariant Sections
-and required Cover Texts given in the Document's license notice.
-
- <li>Include an unaltered copy of this License.
-
- <li>Preserve the section Entitled "History", Preserve its Title, and add
-to it an item stating at least the title, year, new authors, and
-publisher of the Modified Version as given on the Title Page. If
-there is no section Entitled "History" in the Document, create one
-stating the title, year, authors, and publisher of the Document as
-given on its Title Page, then add an item describing the Modified
-Version as stated in the previous sentence.
-
- <li>Preserve the network location, if any, given in the Document for
-public access to a Transparent copy of the Document, and likewise
-the network locations given in the Document for previous versions
-it was based on. These may be placed in the "History" section.
-You may omit a network location for a work that was published at
-least four years before the Document itself, or if the original
-publisher of the version it refers to gives permission.
-
- <li>For any section Entitled "Acknowledgements" or "Dedications", Preserve
-the Title of the section, and preserve in the section all the
-substance and tone of each of the contributor acknowledgements and/or
-dedications given therein.
-
- <li>Preserve all the Invariant Sections of the Document,
-unaltered in their text and in their titles. Section numbers
-or the equivalent are not considered part of the section titles.
-
- <li>Delete any section Entitled "Endorsements". Such a section
-may not be included in the Modified Version.
-
- <li>Do not retitle any existing section to be Entitled "Endorsements" or
-to conflict in title with any Invariant Section.
-
- <li>Preserve any Warranty Disclaimers.
- </ol>
-
- <p>If the Modified Version includes new front-matter sections or
-appendices that qualify as Secondary Sections and contain no material
-copied from the Document, you may at your option designate some or all
-of these sections as invariant. To do this, add their titles to the
-list of Invariant Sections in the Modified Version's license notice.
-These titles must be distinct from any other section titles.
-
- <p>You may add a section Entitled "Endorsements", provided it contains
-nothing but endorsements of your Modified Version by various
-parties--for example, statements of peer review or that the text has
-been approved by an organization as the authoritative definition of a
-standard.
-
- <p>You may add a passage of up to five words as a Front-Cover Text, and a
-passage of up to 25 words as a Back-Cover Text, to the end of the list
-of Cover Texts in the Modified Version. Only one passage of
-Front-Cover Text and one of Back-Cover Text may be added by (or
-through arrangements made by) any one entity. If the Document already
-includes a cover text for the same cover, previously added by you or
-by arrangement made by the same entity you are acting on behalf of,
-you may not add another; but you may replace the old one, on explicit
-permission from the previous publisher that added the old one.
-
- <p>The author(s) and publisher(s) of the Document do not by this License
-give permission to use their names for publicity for or to assert or
-imply endorsement of any Modified Version.
-
- </p><li>COMBINING DOCUMENTS
-
- <p>You may combine the Document with other documents released under this
-License, under the terms defined in section 4 above for modified
-versions, provided that you include in the combination all of the
-Invariant Sections of all of the original documents, unmodified, and
-list them all as Invariant Sections of your combined work in its
-license notice, and that you preserve all their Warranty Disclaimers.
-
- <p>The combined work need only contain one copy of this License, and
-multiple identical Invariant Sections may be replaced with a single
-copy. If there are multiple Invariant Sections with the same name but
-different contents, make the title of each such section unique by
-adding at the end of it, in parentheses, the name of the original
-author or publisher of that section if known, or else a unique number.
-Make the same adjustment to the section titles in the list of
-Invariant Sections in the license notice of the combined work.
-
- <p>In the combination, you must combine any sections Entitled "History"
-in the various original documents, forming one section Entitled
-"History"; likewise combine any sections Entitled "Acknowledgements",
-and any sections Entitled "Dedications". You must delete all
-sections Entitled "Endorsements."
-
- </p><li>COLLECTIONS OF DOCUMENTS
-
- <p>You may make a collection consisting of the Document and other documents
-released under this License, and replace the individual copies of this
-License in the various documents with a single copy that is included in
-the collection, provided that you follow the rules of this License for
-verbatim copying of each of the documents in all other respects.
-
- <p>You may extract a single document from such a collection, and distribute
-it individually under this License, provided you insert a copy of this
-License into the extracted document, and follow this License in all
-other respects regarding verbatim copying of that document.
-
- </p><li>AGGREGATION WITH INDEPENDENT WORKS
-
- <p>A compilation of the Document or its derivatives with other separate
-and independent documents or works, in or on a volume of a storage or
-distribution medium, is called an "aggregate" if the copyright
-resulting from the compilation is not used to limit the legal rights
-of the compilation's users beyond what the individual works permit.
-When the Document is included an aggregate, this License does not
-apply to the other works in the aggregate which are not themselves
-derivative works of the Document.
-
- <p>If the Cover Text requirement of section 3 is applicable to these
-copies of the Document, then if the Document is less than one half of
-the entire aggregate, the Document's Cover Texts may be placed on
-covers that bracket the Document within the aggregate, or the
-electronic equivalent of covers if the Document is in electronic form.
-Otherwise they must appear on printed covers that bracket the whole
-aggregate.
-
- </p><li>TRANSLATION
-
- <p>Translation is considered a kind of modification, so you may
-distribute translations of the Document under the terms of section 4.
-Replacing Invariant Sections with translations requires special
-permission from their copyright holders, but you may include
-translations of some or all Invariant Sections in addition to the
-original versions of these Invariant Sections. You may include a
-translation of this License, and all the license notices in the
-Document, and any Warrany Disclaimers, provided that you also include
-the original English version of this License and the original versions
-of those notices and disclaimers. In case of a disagreement between
-the translation and the original version of this License or a notice
-or disclaimer, the original version will prevail.
-
- <p>If a section in the Document is Entitled "Acknowledgements",
-"Dedications", or "History", the requirement (section 4) to Preserve
-its Title (section 1) will typically require changing the actual
-title.
-
- </p><li>TERMINATION
-
- <p>You may not copy, modify, sublicense, or distribute the Document except
-as expressly provided for under this License. Any other attempt to
-copy, modify, sublicense or distribute the Document is void, and will
-automatically terminate your rights under this License. However,
-parties who have received copies, or rights, from you under this
-License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- </p><li>FUTURE REVISIONS OF THIS LICENSE
-
- <p>The Free Software Foundation may publish new, revised versions
-of the GNU Free Documentation License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns. See
-<a href="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</a>.
-
- <p>Each version of the License is given a distinguishing version number.
-If the Document specifies that a particular numbered version of this
-License "or any later version" applies to it, you have the option of
-following the terms and conditions either of that specified version or
-of any later version that has been published (not as a draft) by the
-Free Software Foundation. If the Document does not specify a version
-number of this License, you may choose any version ever published (not
-as a draft) by the Free Software Foundation.
- </ol>
-
-<h3 class="unnumberedsec">ADDENDUM: How to use this License for your documents</h3>
-
-<p>To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and
-license notices just after the title page:
-
-<pre class="smallexample"> Copyright (C) <var>year</var> <var>your name</var>.
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.2
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
- A copy of the license is included in the section entitled ``GNU
- Free Documentation License''.
- </pre>
-
- <p>If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
-replace the "with...Texts." line with this:
-
-<pre class="smallexample"> with the Invariant Sections being <var>list their titles</var>, with
- the Front-Cover Texts being <var>list</var>, and with the Back-Cover Texts
- being <var>list</var>.
- </pre>
-
- <p>If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
- <p>If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of
-free software license, such as the GNU General Public License,
-to permit their use in free software.
-
-
-<div class="contents">
-<h2>Table of Contents</h2>
-<ul>
-<li><a name="toc_Top" href="#Top">Porting libstdc++-v3</a>
-<li><a name="toc_Operating%20system" href="#Operating%20system">Operating system</a>
-<li><a name="toc_CPU" href="#CPU">CPU</a>
-<li><a name="toc_Character%20types" href="#Character%20types">Character types</a>
-<li><a name="toc_Thread%20safety" href="#Thread%20safety">Thread safety</a>
-<li><a name="toc_Numeric%20limits" href="#Numeric%20limits">Numeric limits</a>
-<li><a name="toc_Libtool" href="#Libtool">Libtool</a>
-<li><a name="toc_GNU%20Free%20Documentation%20License" href="#GNU%20Free%20Documentation%20License">GNU Free Documentation License</a>
-<ul>
-<li><a href="#GNU%20Free%20Documentation%20License">ADDENDUM: How to use this License for your documents</a>
-</li></ul>
-</li></ul>
-</div>
-
- </body></html>
-
diff --git a/libstdc++-v3/docs/html/17_intro/porting.texi b/libstdc++-v3/docs/html/17_intro/porting.texi
deleted file mode 100644
index 090bdf77155..00000000000
--- a/libstdc++-v3/docs/html/17_intro/porting.texi
+++ /dev/null
@@ -1,570 +0,0 @@
-\input texinfo
-
-@c ---------------------------------------------------------------------
-@c Prologue
-@c ---------------------------------------------------------------------
-
-@setfilename porting.info
-@settitle Porting libstdc++-v3
-@setchapternewpage odd
-
-@copying
-Copyright @copyright{} 2000, 2001, 2002, 2003, 2005
-Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.2 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being ``GNU General Public License'', the Front-Cover
-texts being (a) (see below), and with the Back-Cover Texts being (b)
-(see below). A copy of the license is included in the section entitled
-``GNU Free Documentation License''.
-
-(a) The FSF's Front-Cover Text is:
-
- A GNU Manual
-
-(b) The FSF's Back-Cover Text is:
-
- You have freedom to copy and modify this GNU Manual, like GNU
- software. Copies published by the Free Software Foundation raise
- funds for GNU development.
-@end copying
-
-@ifinfo
-This file explains how to port libstdc++-v3 (the GNU C++ library) to
-a new target.
-
-@insertcopying
-@end ifinfo
-
-@c ---------------------------------------------------------------------
-@c Titlepage
-@c ---------------------------------------------------------------------
-
-@titlepage
-@title Porting libstdc++-v3
-@author Mark Mitchell
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-@end titlepage
-
-@c ---------------------------------------------------------------------
-@c Top
-@c ---------------------------------------------------------------------
-
-@node Top
-@top Porting libstdc++-v3
-
-This document explains how to port libstdc++-v3 (the GNU C++ library) to
-a new target.
-
-In order to make the GNU C++ library (libstdc++-v3) work with a new
-target, you must edit some configuration files and provide some new
-header files. Unless this is done, libstdc++-v3 will use generic
-settings which may not be correct for your target; even if they are
-correct, they will likely be inefficient.
-
-Before you get started, make sure that you have a working C library on
-your target. The C library need not precisely comply with any
-particular standard, but should generally conform to the requirements
-imposed by the ANSI/ISO standard.
-
-In addition, you should try to verify that the C++ compiler generally
-works. It is difficult to test the C++ compiler without a working
-library, but you should at least try some minimal test cases.
-
-(Note that what we think of as a ``target,'' the library refers to as
-a ``host.'' The comment at the top of @file{configure.ac} explains why.)
-
-Here are the primary steps required to port the library:
-
-@menu
-* Operating system:: Configuring for your operating system.
-* CPU:: Configuring for your processor chip.
-* Character types:: Implementing character classification.
-* Thread safety:: Implementing atomic operations.
-* Numeric limits:: Implementing numeric limits.
-* Libtool:: Using libtool.
-* GNU Free Documentation License:: How you can copy and share this manual.
-@end menu
-
-@c ---------------------------------------------------------------------
-@c Operating system
-@c ---------------------------------------------------------------------
-
-@node Operating system
-@chapter Operating system
-
-If you are porting to a new operating system (as opposed to a new chip
-using an existing operating system), you will need to create a new
-directory in the @file{config/os} hierarchy. For example, the IRIX
-configuration files are all in @file{config/os/irix}. There is no set
-way to organize the OS configuration directory. For example,
-@file{config/os/solaris/solaris-2.6} and
-@file{config/os/solaris/solaris-2.7} are used as configuration
-directories for these two versions of Solaris. On the other hand, both
-Solaris 2.7 and Solaris 2.8 use the @file{config/os/solaris/solaris-2.7}
-directory. The important information is that there needs to be a
-directory under @file{config/os} to store the files for your operating
-system.
-
-You might have to change the @file{configure.host} file to ensure that
-your new directory is activated. Look for the switch statement that sets
-@code{os_include_dir}, and add a pattern to handle your operating system
-if the default will not suffice. The switch statement switches on only
-the OS portion of the standard target triplet; e.g., the @code{solaris2.8}
-in @code{sparc-sun-solaris2.8}. If the new directory is named after the
-OS portion of the triplet (the default), then nothing needs to be changed.
-
-The first file to create in this directory, should be called
-@file{os_defines.h}. This file contains basic macro definitions
-that are required to allow the C++ library to work with your C library.
-
-Several libstdc++-v3 source files unconditionally define the macro
-@code{_POSIX_SOURCE}. On many systems, defining this macro causes
-large portions of the C library header files to be eliminated
-at preprocessing time. Therefore, you may have to @code{#undef} this
-macro, or define other macros (like @code{_LARGEFILE_SOURCE} or
-@code{__EXTENSIONS__}). You won't know what macros to define or
-undefine at this point; you'll have to try compiling the library and
-seeing what goes wrong. If you see errors about calling functions
-that have not been declared, look in your C library headers to see if
-the functions are declared there, and then figure out what macros you
-need to define. You will need to add them to the
-@code{CPLUSPLUS_CPP_SPEC} macro in the GCC configuration file for your
-target. It will not work to simply define these macros in
-@file{os_defines.h}.
-
-At this time, there are a few libstdc++-v3-specific macros which may be
-defined:
-
-@code{_GLIBCXX_USE_C99_CHECK} may be defined to 1 to check C99
-function declarations (which are not covered by specialization below)
-found in system headers against versions found in the library headers
-derived from the standard.
-
-@code{_GLIBCXX_USE_C99_DYNAMIC} may be defined to an expression that
-yields 0 if and only if the system headers are exposing proper support
-for C99 functions (which are not covered by specialization below). If
-defined, it must be 0 while bootstrapping the compiler/rebuilding the
-library.
-
-@code{_GLIBCXX_USE_C99_LONG_LONG_CHECK} may be defined to 1 to check
-the set of C99 long long function declarations found in system headers
-against versions found in the library headers derived from the
-standard.
-
-@code{_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC} may be defined to an
-expression that yields 0 if and only if the system headers are
-exposing proper support for the set of C99 long long functions. If
-defined, it must be 0 while bootstrapping the compiler/rebuilding the
-library.
-
-@code{_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC} may be defined to an
-expression that yields 0 if and only if the system headers
-are exposing proper support for the related set of macros. If defined,
-it must be 0 while bootstrapping the compiler/rebuilding the library.
-
-@code{_GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_CHECK} may be defined
-to 1 to check the related set of function declarations found in system
-headers against versions found in the library headers derived from
-the standard.
-
-@code{_GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC} may be defined
-to an expression that yields 0 if and only if the system headers
-are exposing proper support for the related set of functions. If defined,
-it must be 0 while bootstrapping the compiler/rebuilding the library.
-
-Finally, you should bracket the entire file in an include-guard, like
-this:
-
-@example
-#ifndef _GLIBCXX_OS_DEFINES
-#define _GLIBCXX_OS_DEFINES
-...
-#endif
-@end example
-
-We recommend copying an existing @file{os_defines.h} to use as a
-starting point.
-
-@c ---------------------------------------------------------------------
-@c CPU
-@c ---------------------------------------------------------------------
-
-@node CPU
-@chapter CPU
-
-If you are porting to a new chip (as opposed to a new operating system
-running on an existing chip), you will need to create a new directory in the
-@file{config/cpu} hierarchy. Much like the @ref{Operating system} setup,
-there are no strict rules on how to organize the CPU configuration
-directory, but careful naming choices will allow the configury to find your
-setup files without explicit help.
-
-We recommend that for a target triplet @code{<CPU>-<vendor>-<OS>}, you
-name your configuration directory @file{config/cpu/<CPU>}. If you do this,
-the configury will find the directory by itself. Otherwise you will need to
-edit the @file{configure.host} file and, in the switch statement that sets
-@code{cpu_include_dir}, add a pattern to handle your chip.
-
-Note that some chip families share a single configuration directory, for
-example, @code{alpha}, @code{alphaev5}, and @code{alphaev6} all use the
-@file{config/cpu/alpha} directory, and there is an entry in the
-@file{configure.host} switch statement to handle this.
-
-The @code{cpu_include_dir} sets default locations for the files controlling
-@ref{Thread safety} and @ref{Numeric limits}, if the defaults are not
-appropriate for your chip.
-
-
-@c ---------------------------------------------------------------------
-@c Character types
-@c ---------------------------------------------------------------------
-
-@node Character types
-@chapter Character types
-
-The library requires that you provide three header files to implement
-character classification, analogous to that provided by the C libraries
-@file{<ctype.h>} header. You can model these on the files provided in
-@file{config/os/generic}. However, these files will almost
-certainly need some modification.
-
-The first file to write is @file{ctype_base.h}. This file provides
-some very basic information about character classification. The libstdc++-v3
-library assumes that your C library implements @file{<ctype.h>} by using
-a table (indexed by character code) containing integers, where each of
-these integers is a bit-mask indicating whether the character is
-upper-case, lower-case, alphabetic, etc. The @file{ctype_base.h}
-file gives the type of the integer, and the values of the various bit
-masks. You will have to peer at your own @file{<ctype.h>} to figure out
-how to define the values required by this file.
-
-The @file{ctype_base.h} header file does not need include guards.
-It should contain a single @code{struct} definition called
-@code{ctype_base}. This @code{struct} should contain two type
-declarations, and one enumeration declaration, like this example, taken
-from the IRIX configuration:
-
-@example
-struct ctype_base
-@{
- typedef unsigned int mask;
- typedef int* __to_type;
-
- enum
- @{
- space = _ISspace,
- print = _ISprint,
- cntrl = _IScntrl,
- upper = _ISupper,
- lower = _ISlower,
- alpha = _ISalpha,
- digit = _ISdigit,
- punct = _ISpunct,
- xdigit = _ISxdigit,
- alnum = _ISalnum,
- graph = _ISgraph
- @};
-@};
-@end example
-
-@noindent
-The @code{mask} type is the type of the elements in the table. If your
-C library uses a table to map lower-case numbers to upper-case numbers,
-and vice versa, you should define @code{__to_type} to be the type of the
-elements in that table. If you don't mind taking a minor performance
-penalty, or if your library doesn't implement @code{toupper} and
-@code{tolower} in this way, you can pick any pointer-to-integer type,
-but you must still define the type.
-
-The enumeration should give definitions for all the values in the above
-example, using the values from your native @file{<ctype.h>}. They can
-be given symbolically (as above), or numerically, if you prefer. You do
-not have to include @file{<ctype.h>} in this header; it will always be
-included before @file{ctype_base.h} is included.
-
-The next file to write is @file{ctype_noninline.h}, which also does
-not require include guards. This file defines a few member functions
-that will be included in @file{include/bits/locale_facets.h}. The first
-function that must be written is the @code{ctype<char>::ctype}
-constructor. Here is the IRIX example:
-
-@example
-ctype<char>::ctype(const mask* __table = 0, bool __del = false,
- size_t __refs = 0)
- : _Ctype_nois<char>(__refs), _M_del(__table != 0 && __del),
- _M_toupper(NULL),
- _M_tolower(NULL),
- _M_ctable(NULL),
- _M_table(!__table
- ? (const mask*) (__libc_attr._ctype_tbl->_class + 1)
- : __table)
- @{ @}
-@end example
-
-@noindent
-There are two parts of this that you might choose to alter. The first,
-and most important, is the line involving @code{__libc_attr}. That is
-IRIX system-dependent code that gets the base of the table mapping
-character codes to attributes. You need to substitute code that obtains
-the address of this table on your system. If you want to use your
-operating system's tables to map upper-case letters to lower-case, and
-vice versa, you should initialize @code{_M_toupper} and
-@code{_M_tolower} with those tables, in similar fashion.
-
-Now, you have to write two functions to convert from upper-case to
-lower-case, and vice versa. Here are the IRIX versions:
-
-@example
-char
-ctype<char>::do_toupper(char __c) const
-@{ return _toupper(__c); @}
-
-char
-ctype<char>::do_tolower(char __c) const
-@{ return _tolower(__c); @}
-@end example
-
-@noindent
-Your C library provides equivalents to IRIX's @code{_toupper} and
-@code{_tolower}. If you initialized @code{_M_toupper} and
-@code{_M_tolower} above, then you could use those tables instead.
-
-Finally, you have to provide two utility functions that convert strings
-of characters. The versions provided here will always work -- but you
-could use specialized routines for greater performance if you have
-machinery to do that on your system:
-
-@example
-const char*
-ctype<char>::do_toupper(char* __low, const char* __high) const
-@{
- while (__low < __high)
- @{
- *__low = do_toupper(*__low);
- ++__low;
- @}
- return __high;
-@}
-
-const char*
-ctype<char>::do_tolower(char* __low, const char* __high) const
-@{
- while (__low < __high)
- @{
- *__low = do_tolower(*__low);
- ++__low;
- @}
- return __high;
-@}
-@end example
-
-You must also provide the @file{ctype_inline.h} file, which
-contains a few more functions. On most systems, you can just copy
-@file{config/os/generic/ctype_inline.h} and use it on your system.
-
-In detail, the functions provided test characters for particular
-properties; they are analogous to the functions like @code{isalpha} and
-@code{islower} provided by the C library.
-
-The first function is implemented like this on IRIX:
-
-@example
-bool
-ctype<char>::
-is(mask __m, char __c) const throw()
-@{ return (_M_table)[(unsigned char)(__c)] & __m; @}
-@end example
-
-@noindent
-The @code{_M_table} is the table passed in above, in the constructor.
-This is the table that contains the bitmasks for each character. The
-implementation here should work on all systems.
-
-The next function is:
-
-@example
-const char*
-ctype<char>::
-is(const char* __low, const char* __high, mask* __vec) const throw()
-@{
- while (__low < __high)
- *__vec++ = (_M_table)[(unsigned char)(*__low++)];
- return __high;
-@}
-@end example
-
-@noindent
-This function is similar; it copies the masks for all the characters
-from @code{__low} up until @code{__high} into the vector given by
-@code{__vec}.
-
-The last two functions again are entirely generic:
-
-@example
-const char*
-ctype<char>::
-scan_is(mask __m, const char* __low, const char* __high) const throw()
-@{
- while (__low < __high && !this->is(__m, *__low))
- ++__low;
- return __low;
-@}
-
-const char*
-ctype<char>::
-scan_not(mask __m, const char* __low, const char* __high) const throw()
-@{
- while (__low < __high && this->is(__m, *__low))
- ++__low;
- return __low;
-@}
-@end example
-
-@c ---------------------------------------------------------------------
-@c Thread safety
-@c ---------------------------------------------------------------------
-
-@node Thread safety
-@chapter Thread safety
-
-The C++ library string functionality requires a couple of atomic
-operations to provide thread-safety. If you don't take any special
-action, the library will use stub versions of these functions that are
-not thread-safe. They will work fine, unless your applications are
-multi-threaded.
-
-If you want to provide custom, safe, versions of these functions, there
-are two distinct approaches. One is to provide a version for your CPU,
-using assembly language constructs. The other is to use the
-thread-safety primitives in your operating system. In either case, you
-make a file called @file{atomicity.h}, and the variable
-@code{ATOMICITYH} must point to this file.
-
-If you are using the assembly-language approach, put this code in
-@file{config/cpu/<chip>/atomicity.h}, where chip is the name of
-your processor (@pxref{CPU}). No additional changes are necessary to
-locate the file in this case; @code{ATOMICITYH} will be set by default.
-
-If you are using the operating system thread-safety primitives approach,
-you can also put this code in the same CPU directory, in which case no more
-work is needed to locate the file. For examples of this approach,
-see the @file{atomicity.h} file for IRIX or IA64.
-
-Alternatively, if the primitives are more closely related to the OS
-than they are to the CPU, you can put the @file{atomicity.h} file in
-the @ref{Operating system} directory instead. In this case, you must
-edit @file{configure.host}, and in the switch statement that handles
-operating systems, override the @code{ATOMICITYH} variable to point to
-the appropriate @code{os_include_dir}. For examples of this approach,
-see the @file{atomicity.h} file for AIX.
-
-With those bits out of the way, you have to actually write
-@file{atomicity.h} itself. This file should be wrapped in an
-include guard named @code{_GLIBCXX_ATOMICITY_H}. It should define one
-type, and two functions.
-
-The type is @code{_Atomic_word}. Here is the version used on IRIX:
-
-@example
-typedef long _Atomic_word;
-@end example
-
-@noindent
-This type must be a signed integral type supporting atomic operations.
-If you're using the OS approach, use the same type used by your system's
-primitives. Otherwise, use the type for which your CPU provides atomic
-primitives.
-
-Then, you must provide two functions. The bodies of these functions
-must be equivalent to those provided here, but using atomic operations:
-
-@example
-static inline _Atomic_word
-__attribute__ ((__unused__))
-__exchange_and_add (_Atomic_word* __mem, int __val)
-@{
- _Atomic_word __result = *__mem;
- *__mem += __val;
- return __result;
-@}
-
-static inline void
-__attribute__ ((__unused__))
-__atomic_add (_Atomic_word* __mem, int __val)
-@{
- *__mem += __val;
-@}
-@end example
-
-@c ---------------------------------------------------------------------
-@c Numeric limits
-@c ---------------------------------------------------------------------
-
-@node Numeric limits
-@chapter Numeric limits
-
-The C++ library requires information about the fundamental data types,
-such as the minimum and maximum representable values of each type.
-You can define each of these values individually, but it is usually
-easiest just to indicate how many bits are used in each of the data
-types and let the library do the rest. For information about the
-macros to define, see the top of @file{include/bits/std_limits.h}.
-
-If you need to define any macros, you can do so in @file{os_defines.h}.
-However, if all operating systems for your CPU are likely to use the
-same values, you can provide a CPU-specific file instead so that you
-do not have to provide the same definitions for each operating system.
-To take that approach, create a new file called @file{cpu_limits.h} in
-your CPU configuration directory (@pxref{CPU}).
-
-@c ---------------------------------------------------------------------
-@c Libtool
-@c ---------------------------------------------------------------------
-
-@node Libtool
-@chapter Libtool
-
-The C++ library is compiled, archived and linked with libtool.
-Explaining the full workings of libtool is beyond the scope of this
-document, but there are a few, particular bits that are necessary for
-porting.
-
-Some parts of the libstdc++-v3 library are compiled with the libtool
-@code{--tags CXX} option (the C++ definitions for libtool). Therefore,
-@file{ltcf-cxx.sh} in the top-level directory needs to have the correct
-logic to compile and archive objects equivalent to the C version of libtool,
-@file{ltcf-c.sh}. Some libtool targets have definitions for C but not
-for C++, or C++ definitions which have not been kept up to date.
-
-The C++ run-time library contains initialization code that needs to be
-run as the library is loaded. Often, that requires linking in special
-object files when the C++ library is built as a shared library, or
-taking other system-specific actions.
-
-The libstdc++-v3 library is linked with the C version of libtool, even
-though it is a C++ library. Therefore, the C version of libtool needs to
-ensure that the run-time library initializers are run. The usual way to
-do this is to build the library using @code{gcc -shared}.
-
-If you need to change how the library is linked, look at
-@file{ltcf-c.sh} in the top-level directory. Find the switch statement
-that sets @code{archive_cmds}. Here, adjust the setting for your
-operating system.
-
-@c ---------------------------------------------------------------------
-@c GFDL
-@c ---------------------------------------------------------------------
-
-@include fdl.texi
-
-@c ---------------------------------------------------------------------
-@c Epilogue
-@c ---------------------------------------------------------------------
-
-@contents
-@bye