summaryrefslogtreecommitdiffstats
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/BUGS28
-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/abi.html991
-rw-r--r--libstdc++-v3/docs/html/17_intro/api.html596
-rw-r--r--libstdc++-v3/docs/html/17_intro/c++0x_status.html2280
-rw-r--r--libstdc++-v3/docs/html/17_intro/c++1998_status.html (renamed from libstdc++-v3/docs/html/17_intro/CHECKLIST)2
-rw-r--r--libstdc++-v3/docs/html/17_intro/concept_check.diff382
-rw-r--r--libstdc++-v3/docs/html/17_intro/configury.html4
-rw-r--r--libstdc++-v3/docs/html/17_intro/headers_cc.txt83
-rw-r--r--libstdc++-v3/docs/html/17_intro/howto.html334
-rw-r--r--libstdc++-v3/docs/html/17_intro/license.html4
-rw-r--r--libstdc++-v3/docs/html/17_intro/porting-howto.html744
-rw-r--r--libstdc++-v3/docs/html/17_intro/porting.html26
-rw-r--r--libstdc++-v3/docs/html/17_intro/tr1_status.html2322
16 files changed, 6452 insertions, 1599 deletions
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/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/abi.html b/libstdc++-v3/docs/html/17_intro/abi.html
new file mode 100644
index 00000000000..c27de61515c
--- /dev/null
+++ b/libstdc++-v3/docs/html/17_intro/abi.html
@@ -0,0 +1,991 @@
+<?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 name="AUTHOR" content="bkoz@gcc.gnu.org (Benjamin Kosnik)" />
+ <meta name="KEYWORDS" content="C++, libstdc++, dynamic, shared, library, ABI, version" />
+ <meta name="DESCRIPTION" content="C++ Standard Library ABI" />
+ <meta name="GENERATOR" content="emacs and ten fingers" />
+ <title>Standard C++ Library ABI</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="Copyright" href="17_intro/license.html" type="text/html" />
+</head>
+<body>
+
+<h1 class="centered"><a name="top">C++ Standard Library ABI</a></h1>
+
+<p class="fineprint"><em>
+ The latest version of this document is always available at
+ <a href="http://gcc.gnu.org/onlinedocs/libstdc++/abi.html">
+ http://gcc.gnu.org/onlinedocs/libstdc++/abi.html</a>.
+</em></p>
+
+<p><em>
+ To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++ homepage</a>.
+</em></p>
+
+<!-- ####################################################### -->
+<hr />
+<h3 class="left">
+ <a name="CXXinterface">The C++ interface</a>
+</h3>
+
+<p> C++ applications often dependent on specific language support
+routines, say for throwing exceptions, or catching exceptions, and
+perhaps also dependent on features in the C++ Standard Library.
+</p>
+
+<p> The C++ Standard Library has many include files, types defined in
+those include files, specific named functions, and other behavior. The
+text of these behaviors, as written in source include files, is called
+the Application Programing Interface, or API.
+</p>
+
+<p> Furthermore, C++ source that is compiled into object files is
+ transformed by the compiler: it arranges objects with specific
+ alignment and in a particular layout, mangling names according to a
+ well-defined algorithm, has specific arrangements for the support of
+ virtual functions, etc. These details are defined as the compiler
+ Application Binary Interface, or ABI. The GNU C++ compiler uses an
+ industry-standard C++ ABI starting with version 3. Details can be
+ found in the <a href="http://www.codesourcery.com/cxx-abi/abi.html">
+ ABI specification</a>.
+</p>
+
+<p>
+ The GNU C++ compiler, g++, has a compiler command line option to
+ switch between various different C++ ABIs. This explicit version
+ switch is the flag <code> -fabi-version</code>. In addition, some
+ g++ command line options may change the ABI as a side-effect of
+ use. Such flags include <code>-fpack-struct</code> and
+ <code>-fno-exceptions</code>, but include others: see the complete
+ list in the GCC manual under the heading <a
+ href="http://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code%20Gen%20Options">Options
+ for Code Generation Conventions</a>.
+</p>
+
+<p> The configure options used when building a specific libstdc++
+version may also impact the resulting library ABI. The available
+configure options, and their impact on the library ABI, are documented
+<a href="http://gcc.gnu.org/onlinedocs/libstdc++/configopts.html">
+here</a>.
+</p>
+
+<p> Putting all of these ideas together results in the C++ Standard
+library ABI, which is the compilation of a given library API by a
+given compiler ABI. In a nutshell:
+</p>
+
+<code> library API + compiler ABI = library ABI</code>
+
+<p>
+ The library ABI is mostly of interest for end-users who have
+ unresolved symbols and are linking dynamically to the C++ Standard
+ library, and who thus must be careful to compile their application
+ with a compiler that is compatible with the available C++ Standard
+ library binary. In this case, compatible is defined with the equation
+ above: given an application compiled with a given compiler ABI and
+ library API, it will work correctly with a Standard C++ Library
+ created with the same constraints.
+</p>
+
+<p>
+ To use a specific version of the C++ ABI, one must use a
+ corresponding GNU C++ toolchain (Ie, g++ and libstdc++) that
+ implements the C++ ABI in question.
+</p>
+
+<h3 class="left">
+ <a name="ABI_versioning">Versioning</a>
+</h3>
+
+<p> The C++ interface has evolved throughout the history of the GNU
+C++ toolchain. With each release, various details have been changed so
+as to give distinct versions to the C++ interface.
+</p>
+
+<h5 class="left">
+ <a name="goals">Goals of versioning</a>
+</h5>
+
+<p>Extending existing, stable ABIs. Versioning gives subsequent stable
+releases series libraries the ability to add new symbols and add
+functionality, all the while retaining backwards compatibility with
+the previous releases in the series. Note: the reverse is not true. It
+is not possible to take binaries linked with the latest version of a
+release series (if symbols have been added) and expect the initial
+release of the series to remain link compatible.
+</p>
+
+<p>Allows multiple, incompatible ABIs to coexist at the same time.
+</p>
+
+<p>
+</p>
+
+<h5 class="left">
+ <a name="details"> Version History </a>
+</h5>
+<p>
+ How can this complexity be managed? What does C++ versioning mean?
+ Because library and compiler changes often make binaries compiled
+ with one version of the GNU tools incompatible with binaries
+ compiled with other (either newer or older) versions of the same GNU
+ tools, specific techniques are used to make managing this complexity
+ easier.
+</p>
+
+<p>
+ The following techniques are used:
+</p>
+
+ <ul>
+
+ <li> <p>Release versioning on the libgcc_s.so binary. This is
+implemented via file names and the ELF DT_SONAME mechanism (at least
+on ELF systems).</p>
+
+ <p>It is versioned as follows:
+ </p>
+ <ul>
+ <li>gcc-3.0.0: libgcc_s.so.1</li>
+ <li>gcc-3.0.1: libgcc_s.so.1</li>
+ <li>gcc-3.0.2: libgcc_s.so.1</li>
+ <li>gcc-3.0.3: libgcc_s.so.1</li>
+ <li>gcc-3.0.4: libgcc_s.so.1</li>
+ <li>gcc-3.1.0: libgcc_s.so.1</li>
+ <li>gcc-3.1.1: libgcc_s.so.1</li>
+ <li>gcc-3.2.0: libgcc_s.so.1</li>
+ <li>gcc-3.2.1: libgcc_s.so.1</li>
+ <li>gcc-3.2.2: libgcc_s.so.1</li>
+ <li>gcc-3.2.3: libgcc_s.so.1</li>
+ <li>gcc-3.3.0: libgcc_s.so.1</li>
+ <li>gcc-3.3.1: libgcc_s.so.1</li>
+ <li>gcc-3.3.2: libgcc_s.so.1</li>
+ <li>gcc-3.3.3: libgcc_s.so.1</li>
+ <li>gcc-3.4.x, gcc-4.0.x, gcc-4.1.x, gcc-4.2.x: on m68k-linux and
+ hppa-linux this is either libgcc_s.so.1 (when configuring
+ <code>--with-sjlj-exceptions</code>) or libgcc_s.so.2. For all
+ others, this is libgcc_s.so.1. </li> </ul>
+ <p></p>
+ </li>
+
+ <li>Symbol versioning on the libgcc_s.so binary.
+ <p>mapfile: gcc/libgcc-std.ver</p>
+
+ <p>It is versioned with the following labels and version
+ definitions, where the version definition is the maximum for a
+ particular release. Labels are cumulative. If a particular release
+ is not listed, it has the same version labels as the preceeding
+ release.</p>
+ <ul>
+ <li>gcc-3.0.0: GCC_3.0</li>
+ <li>gcc-3.3.0: GCC_3.3</li>
+ <li>gcc-3.3.1: GCC_3.3.1</li>
+ <li>gcc-3.3.2: GCC_3.3.2</li>
+ <li>gcc-3.3.4: GCC_3.3.4</li>
+ <li>gcc-3.4.0: GCC_3.4</li>
+ <li>gcc-3.4.2: GCC_3.4.2</li>
+ <li>gcc-3.4.4: GCC_3.4.4</li>
+ <li>gcc-4.0.0: GCC_4.0.0</li>
+ <li>gcc-4.1.0: GCC_4.1.0</li>
+ <li>gcc-4.2.0: GCC_4.2.0</li>
+ </ul>
+ <p></p>
+ </li>
+
+ <li>Release versioning on the libstdc++.so binary, implemented in the same was as the libgcc_s.so binary, above.
+
+ <p>It is versioned as follows:
+ </p>
+ <ul>
+ <li>gcc-3.0.0: libstdc++.so.3.0.0</li>
+ <li>gcc-3.0.1: libstdc++.so.3.0.1</li>
+ <li>gcc-3.0.2: libstdc++.so.3.0.2</li>
+ <li>gcc-3.0.3: libstdc++.so.3.0.2 (Error should be libstdc++.so.3.0.3)</li>
+ <li>gcc-3.0.4: libstdc++.so.3.0.4</li>
+ <li>gcc-3.1.0: libstdc++.so.4.0.0</li>
+ <li>gcc-3.1.1: libstdc++.so.4.0.1</li>
+ <li>gcc-3.2.0: libstdc++.so.5.0.0</li>
+ <li>gcc-3.2.1: libstdc++.so.5.0.1</li>
+ <li>gcc-3.2.2: libstdc++.so.5.0.2</li>
+ <li>gcc-3.2.3: libstdc++.so.5.0.3 (Not strictly required)</li>
+ <li>gcc-3.3.0: libstdc++.so.5.0.4</li>
+ <li>gcc-3.3.1: libstdc++.so.5.0.5</li>
+ <li>gcc-3.3.2: libstdc++.so.5.0.5</li>
+ <li>gcc-3.3.3: libstdc++.so.5.0.5</li>
+ <li>gcc-3.4.0: libstdc++.so.6.0.0</li>
+ <li>gcc-3.4.1: libstdc++.so.6.0.1</li>
+ <li>gcc-3.4.2: libstdc++.so.6.0.2</li>
+ <li>gcc-3.4.3: libstdc++.so.6.0.3</li>
+ <li>gcc-3.4.4: libstdc++.so.6.0.3</li>
+ <li>gcc-3.4.5: libstdc++.so.6.0.3</li>
+ <li>gcc-3.4.6: libstdc++.so.6.0.3</li>
+ <li>gcc-4.0.0: libstdc++.so.6.0.4</li>
+ <li>gcc-4.0.1: libstdc++.so.6.0.5</li>
+ <li>gcc-4.0.2: libstdc++.so.6.0.6</li>
+ <li>gcc-4.0.3: libstdc++.so.6.0.7</li>
+ <li>gcc-4.1.0: libstdc++.so.6.0.7</li>
+ <li>gcc-4.1.1: libstdc++.so.6.0.8</li>
+ <li>gcc-4.1.2: libstdc++.so.6.0.8</li>
+ <li>gcc-4.2.0: libstdc++.so.6.0.9</li>
+ </ul>
+ <p></p>
+ </li>
+
+ <li>Symbol versioning on the libstdc++.so binary.
+
+ <p>mapfile: libstdc++/config/linker-map.gnu</p>
+ <p>It is versioned with the following labels and version
+ definitions, where the version definition is the maximum for a
+ particular release. Note, only symbol which are newly introduced
+ will use the maximum version definition. Thus, for release series
+ with the same label, but incremented version definitions, the later
+ release has both versions. (An example of this would be the
+ gcc-3.2.1 release, which has GLIBCPP_3.2.1 for new symbols and
+ GLIBCPP_3.2 for symbols that were introduced in the gcc-3.2.0
+ release.) If a particular release is not listed, it has the same
+ version labels as the preceeding release.
+ </p>
+ <ul>
+ <li>gcc-3.0.0: (Error, not versioned)</li>
+ <li>gcc-3.0.1: (Error, not versioned)</li>
+ <li>gcc-3.0.2: (Error, not versioned)</li>
+ <li>gcc-3.0.3: (Error, not versioned)</li>
+ <li>gcc-3.0.4: (Error, not versioned)</li>
+ <li>gcc-3.1.0: GLIBCPP_3.1, CXXABI_1</li>
+ <li>gcc-3.1.1: GLIBCPP_3.1, CXXABI_1</li>
+ <li>gcc-3.2.0: GLIBCPP_3.2, CXXABI_1.2</li>
+ <li>gcc-3.2.1: GLIBCPP_3.2.1, CXXABI_1.2</li>
+ <li>gcc-3.2.2: GLIBCPP_3.2.2, CXXABI_1.2</li>
+ <li>gcc-3.2.3: GLIBCPP_3.2.2, CXXABI_1.2</li>
+ <li>gcc-3.3.0: GLIBCPP_3.2.2, CXXABI_1.2.1</li>
+ <li>gcc-3.3.1: GLIBCPP_3.2.3, CXXABI_1.2.1</li>
+ <li>gcc-3.3.2: GLIBCPP_3.2.3, CXXABI_1.2.1</li>
+ <li>gcc-3.3.3: GLIBCPP_3.2.3, CXXABI_1.2.1</li>
+ <li>gcc-3.4.0: GLIBCXX_3.4, CXXABI_1.3</li>
+ <li>gcc-3.4.1: GLIBCXX_3.4.1, CXXABI_1.3</li>
+ <li>gcc-3.4.2: GLIBCXX_3.4.2</li>
+ <li>gcc-3.4.3: GLIBCXX_3.4.3</li>
+ <li>gcc-4.0.0: GLIBCXX_3.4.4, CXXABI_1.3.1</li>
+ <li>gcc-4.0.1: GLIBCXX_3.4.5</li>
+ <li>gcc-4.0.2: GLIBCXX_3.4.6</li>
+ <li>gcc-4.0.3: GLIBCXX_3.4.7</li>
+ <li>gcc-4.1.1: GLIBCXX_3.4.8</li>
+ <li>gcc-4.2.0: GLIBCXX_3.4.9</li>
+ </ul>
+ <p></p>
+ </li>
+
+ <li>
+ <p>Incremental bumping of a compiler pre-defined macro,
+ __GXX_ABI_VERSION. This macro is defined as the version of the
+ compiler v3 ABI, with g++ 3.0.x being version 100. This macro will
+ be automatically defined whenever g++ is used (the curious can
+ test this by invoking g++ with the '-v' flag.)
+ </p>
+
+ <p>
+ This macro was defined in the file "lang-specs.h" in the gcc/cp directory.
+ Later versions defined it in "c-common.c" in the gcc directory, and from
+ G++ 3.4 it is defined in c-cppbuiltin.c and its value determined by the
+ '-fabi-version' command line option.
+ </p>
+
+ <p>
+ It is versioned as follows, where 'n' is given by '-fabi-version=n':
+ </p>
+ <ul>
+ <li>gcc-3.0.x: 100</li>
+ <li>gcc-3.1.x: 100 (Error, should be 101)</li>
+ <li>gcc-3.2.x: 102</li>
+ <li>gcc-3.3.x: 102</li>
+ <li>gcc-3.4.x, gcc-4.0.x, gcc-4.1.x, gcc-4.2.x: 102 (when n=1)</li>
+ <li>gcc-3.4.x, gcc-4.0.x, gcc-4.1.x, gcc-4.2.x: 1000 + n (when n&gt;1)</li>
+ <li>gcc-3.4.x, gcc-4.0.x, gcc-4.1.x, gcc-4.2.x: 999999 (when n=0)</li>
+ </ul>
+ <p></p>
+ </li>
+
+ <li>
+ <p>Changes to the default compiler option for
+ <code>-fabi-version</code>.
+ </p>
+ <p>
+ It is versioned as follows:
+ </p>
+ <ul>
+ <li>gcc-3.0.x: (Error, not versioned) </li>
+ <li>gcc-3.1.x: (Error, not versioned) </li>
+ <li>gcc-3.2.x: <code>-fabi-version=1</code></li>
+ <li>gcc-3.3.x: <code>-fabi-version=1</code></li>
+ <li>gcc-3.4.x, gcc-4.0.x, gcc-4.1.x, gcc-4.2.x: <code>-fabi-version=2</code></li>
+ </ul>
+ <p></p>
+ </li>
+
+ <li>
+ <p>Incremental bumping of a library pre-defined macro. For releases
+ before 3.4.0, the macro is __GLIBCPP__. For later releases, it's
+ __GLIBCXX__. (The libstdc++ project generously changed from CPP to
+ CXX throughout its source to allow the "C" pre-processor the CPP
+ macro namespace.) These macros are defined as the date the library
+ was released, in compressed ISO date format, as an unsigned long.
+ </p>
+
+ <p>
+ This macro is defined in the file "c++config" in the
+ "libstdc++/include/bits" directory. (Up to gcc-4.1.0, it was
+ changed every night by an automated script. Since gcc-4.1.0, it is
+ the same value as gcc/DATESTAMP.)
+ </p>
+ <p>
+ It is versioned as follows:
+ </p>
+ <ul>
+ <li>gcc-3.0.0: 20010615</li>
+ <li>gcc-3.0.1: 20010819</li>
+ <li>gcc-3.0.2: 20011023</li>
+ <li>gcc-3.0.3: 20011220</li>
+ <li>gcc-3.0.4: 20020220</li>
+ <li>gcc-3.1.0: 20020514</li>
+ <li>gcc-3.1.1: 20020725</li>
+ <li>gcc-3.2.0: 20020814</li>
+ <li>gcc-3.2.1: 20021119</li>
+ <li>gcc-3.2.2: 20030205</li>
+ <li>gcc-3.2.3: 20030422</li>
+ <li>gcc-3.3.0: 20030513</li>
+ <li>gcc-3.3.1: 20030804</li>
+ <li>gcc-3.3.2: 20031016</li>
+ <li>gcc-3.3.3: 20040214</li>
+ <li>gcc-3.4.0: 20040419</li>
+ <li>gcc-3.4.1: 20040701</li>
+ <li>gcc-3.4.2: 20040906</li>
+ <li>gcc-3.4.3: 20041105</li>
+ <li>gcc-3.4.4: 20050519</li>
+ <li>gcc-3.4.5: 20051201</li>
+ <li>gcc-3.4.6: 20060306</li>
+ <li>gcc-4.0.0: 20050421</li>
+ <li>gcc-4.0.1: 20050707</li>
+ <li>gcc-4.0.2: 20050921</li>
+ <li>gcc-4.0.3: 20060309</li>
+ <li>gcc-4.1.0: 20060228</li>
+ <li>gcc-4.1.1: 20060524</li>
+ <li>gcc-4.1.2: 20070214</li>
+ <li>gcc-4.2.0: 20070514</li>
+ </ul>
+ <p></p>
+ </li>
+
+ <li>
+ <p>
+ Incremental bumping of a library pre-defined macro,
+ _GLIBCPP_VERSION. This macro is defined as the released version of
+ the library, as a string literal. This is only implemented in
+ gcc-3.1.0 releases and higher, and is deprecated in 3.4 (where it
+ is called _GLIBCXX_VERSION).
+ </p>
+
+ <p>
+ This macro is defined in the file "c++config" in the
+ "libstdc++/include/bits" directory and is generated
+ automatically by autoconf as part of the configure-time generation
+ of config.h.
+ </p>
+
+ <p>
+ It is versioned as follows:
+ </p>
+ <ul>
+ <li>gcc-3.0.0: "3.0.0"</li>
+ <li>gcc-3.0.1: "3.0.0" (Error, should be "3.0.1")</li>
+ <li>gcc-3.0.2: "3.0.0" (Error, should be "3.0.2")</li>
+ <li>gcc-3.0.3: "3.0.0" (Error, should be "3.0.3")</li>
+ <li>gcc-3.0.4: "3.0.0" (Error, should be "3.0.4")</li>
+ <li>gcc-3.1.0: "3.1.0"</li>
+ <li>gcc-3.1.1: "3.1.1"</li>
+ <li>gcc-3.2.0: "3.2"</li>
+ <li>gcc-3.2.1: "3.2.1"</li>
+ <li>gcc-3.2.2: "3.2.2"</li>
+ <li>gcc-3.2.3: "3.2.3"</li>
+ <li>gcc-3.3.0: "3.3"</li>
+ <li>gcc-3.3.1: "3.3.1"</li>
+ <li>gcc-3.3.2: "3.3.2"</li>
+ <li>gcc-3.3.3: "3.3.3"</li>
+ <li>gcc-3.4.x: "version-unused"</li>
+ <li>gcc-4.0.x: "version-unused"</li>
+ <li>gcc-4.1.x: "version-unused"</li>
+ <li>gcc-4.2.x: "version-unused"</li>
+ </ul>
+ <p></p>
+ </li>
+
+ <li>
+ <p>
+ Matching each specific C++ compiler release to a specific set of
+ C++ include files. This is only implemented in gcc-3.1.1 releases
+ and higher.
+ </p>
+ <p>
+ All C++ includes are installed in include/c++, then nest in a
+ directory hierarchy corresponding to the C++ compiler's released
+ version. This version corresponds to the variable "gcc_version" in
+ "libstdc++/acinclude.m4," and more details can be found in that
+ file's macro GLIBCXX_CONFIGURE (GLIBCPP_CONFIGURE before gcc-3.4.0).
+ </p>
+ <p>
+ C++ includes are versioned as follows:
+ </p>
+ <ul>
+ <li>gcc-3.0.0: include/g++-v3</li>
+ <li>gcc-3.0.1: include/g++-v3</li>
+ <li>gcc-3.0.2: include/g++-v3</li>
+ <li>gcc-3.0.3: include/g++-v3</li>
+ <li>gcc-3.0.4: include/g++-v3</li>
+ <li>gcc-3.1.0: include/g++-v3</li>
+ <li>gcc-3.1.1: include/c++/3.1.1</li>
+ <li>gcc-3.2.0: include/c++/3.2</li>
+ <li>gcc-3.2.1: include/c++/3.2.1</li>
+ <li>gcc-3.2.2: include/c++/3.2.2</li>
+ <li>gcc-3.2.3: include/c++/3.2.3</li>
+ <li>gcc-3.3.0: include/c++/3.3</li>
+ <li>gcc-3.3.1: include/c++/3.3.1</li>
+ <li>gcc-3.3.2: include/c++/3.3.2</li>
+ <li>gcc-3.3.3: include/c++/3.3.3</li>
+ <li>gcc-3.4.0: include/c++/3.4.0</li>
+ <li>gcc-3.4.1: include/c++/3.4.1</li>
+ <li>gcc-3.4.2: include/c++/3.4.2</li>
+ <li>gcc-3.4.3: include/c++/3.4.3</li>
+ <li>gcc-3.4.4: include/c++/3.4.4</li>
+ <li>gcc-3.4.5: include/c++/3.4.5</li>
+ <li>gcc-3.4.6: include/c++/3.4.6</li>
+ <li>gcc-4.0.0: include/c++/4.0.0</li>
+ <li>gcc-4.0.1: include/c++/4.0.1</li>
+ <li>gcc-4.0.2: include/c++/4.0.2</li>
+ <li>gcc-4.0.3: include/c++/4.0.3</li>
+ <li>gcc-4.1.0: include/c++/4.1.0</li>
+ <li>gcc-4.1.1: include/c++/4.1.1</li>
+ <li>gcc-4.1.2: include/c++/4.1.2</li>
+ <li>gcc-4.2.0: include/c++/4.2.0</li>
+ </ul>
+ <p></p>
+ </li>
+ </ul>
+<p>
+ Taken together, these techniques can accurately specify interface
+ and implementation changes in the GNU C++ tools themselves. Used
+ properly, they allow both the GNU C++ tools implementation, and
+ programs using them, an evolving yet controlled development that
+ maintains backward compatibility.
+</p>
+
+
+
+<h5 class="left">
+ <a name="requirements"> Minimum requirements for a versioned ABI </a>
+</h5>
+<p>
+ Minimum environment that supports a versioned ABI: A supported
+ dynamic linker, a GNU linker of sufficient vintage to understand
+ demangled C++ name globbing (ld), a shared executable compiled with
+ g++, and shared libraries (libgcc_s, libstdc++) compiled by a
+ compiler (g++) with a compatible ABI. Phew.
+</p>
+
+<p>
+ On top of all that, an additional constraint: libstdc++ did not
+ attempt to version symbols (or age gracefully, really) until version
+ 3.1.0.
+</p>
+
+<p>
+ Most modern Linux and BSD versions, particularly ones using
+ gcc-3.1.x tools and more recent vintages, will meet the requirements above.
+</p>
+
+
+<h5 class="left">
+ <a name="config"> What configure options impact symbol versioning? </a>
+</h5>
+<p>
+ It turns out that most of the configure options that change default
+ behavior will impact the mangled names of exported symbols, and thus
+ impact versioning and compatibility.
+</p>
+
+<p>
+ For more information on configure options, including ABI impacts, see:
+ http://gcc.gnu.org/onlinedocs/libstdc++/configopts.html
+</p>
+
+<p>
+ There is one flag that explicitly deals with symbol versioning:
+ --enable-symvers.
+</p>
+
+<p>
+ In particular, libstdc++/acinclude.m4 has a macro called
+ GLIBCXX_ENABLE_SYMVERS that defaults to yes (or the argument passed
+ in via --enable-symvers=foo). At that point, the macro attempts to
+ make sure that all the requirement for symbol versioning are in
+ place. For more information, please consult acinclude.m4.
+</p>
+
+
+<h5 class="left">
+ <a name="active"> How to tell if symbol versioning is, indeed, active? </a>
+</h5>
+<p>
+ When the GNU C++ library is being built with symbol versioning on,
+ you should see the following at configure time for libstdc++:
+</p>
+
+
+<code> checking versioning on shared library symbols... gnu</code>
+
+<p>
+ If you don't see this line in the configure output, or if this line
+ appears but the last word is 'no', then you are out of luck.
+</p>
+
+<p>
+ If the compiler is pre-installed, a quick way to test is to compile
+ the following (or any) simple C++ file and link it to the shared
+ libstdc++ library:
+</p>
+
+<pre>
+#include &lt;iostream&gt;
+
+int main()
+{ std::cout &lt;&lt; "hello" &lt;&lt; std::endl; return 0; }
+
+%g++ hello.cc -o hello.out
+
+%ldd hello.out
+ libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x00764000)
+ libm.so.6 =&gt; /lib/tls/libm.so.6 (0x004a8000)
+ libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40016000)
+ libc.so.6 =&gt; /lib/tls/libc.so.6 (0x0036d000)
+ /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
+
+%nm hello.out
+</pre>
+
+<p>
+If you see symbols in the resulting output with "GLIBCXX_3" as part
+of the name, then the executable is versioned. Here's an example:
+</p>
+
+ <code> U _ZNSt8ios_base4InitC1Ev@@GLIBCXX_3.4 </code>
+
+<h3 class="left">
+ <a name="ABI_allowed">Library allowed ABI changes</a>
+</h3>
+<p>
+The following will cause the library minor version number to
+increase, say from "libstdc++.so.3.0.4" to "libstdc++.so.3.0.5".
+</p>
+<ul>
+ <li>adding an exported global or static data member</li>
+ <li>adding an exported function, static or non-virtual member function</li>
+ <li>adding an exported symbol or symbols by additional instantiations</li>
+</ul>
+<p>
+</p>
+<p>
+Other allowed changes are possible.
+</p>
+
+
+<h3 class="left">
+ <a name="ABI_disallowed">Library disallowed ABI changes</a>
+</h3>
+
+<p>
+The following non-exhaustive list will cause the library major version
+number to increase, say from "libstdc++.so.3.0.4" to
+"libstdc++.so.4.0.0".
+</p>
+<ul>
+ <li>changes in the gcc/g++ compiler ABI</li>
+<li>changing size of an exported symbol</li>
+<li>changing alignment of an exported symbol</li>
+<li>changing the layout of an exported symbol</li>
+<li>changing mangling on an exported symbol</li>
+<li>deleting an exported symbol</li>
+<li>changing the inheritance properties of a type by adding or removing
+ base classes</li>
+<li>
+ changing the size, alignment, or layout of types
+ specified in the C++ standard. These may not necessarily be
+ instantiated or otherwise exported in the library binary, and
+ include all the required locale facets, as well as things like
+ std::basic_streambuf, et al.
+</li>
+
+<li> adding an explicit copy constructor or destructor to a
+class that would otherwise have implicit versions. This will change
+the way the compiler deals with this class in by-value return
+statements or parameters: instead of being passing instances of this
+class in registers, the compiler will be forced to use memory. See <a
+href="http://www.codesourcery.com/cxx-abi/abi.html#calls"> this part</a>
+ of the C++ ABI documentation for further details.
+ </li>
+
+</ul>
+
+<h3 class="left">
+ <a name="implementation">Library implementation strategy</a> </h3>
+
+<ul>
+ <li>Separation of interface and implementation
+<p>This is accomplished by two techniques that separate the API from
+the ABI: forcing undefined references to link against a library binary
+for definitions.
+</p>
+
+ <dl>
+ <dt>Include files have declarations, source files have defines</dt>
+
+ <dd> For non-templatized types, such as much of <code>class
+ locale</code>, the appropriate standard C++ include, say
+ <code>locale</code>, can contain full declarations, while various
+ source files (say <code> locale.cc, locale_init.cc,
+ localename.cc</code>) contain definitions.</dd>
+
+ <dt>Extern template on required types</dt>
+
+ <dd>For parts of the standard that have an explicit list of required
+ instantiations, the GNU extension syntax <code> extern template
+ </code> can be used to control where template definitions
+ reside. By marking required instantiations as <code> extern
+ template </code> in include files, and providing explicit
+ instantiations in the appropriate instantiation files, non-inlined
+ template functions can be versioned. This technique is mostly used
+ on parts of the standard that require <code> char</code> and <code>
+ wchar_t</code> instantiations, and includes <code>
+ basic_string</code>, the locale facets, and the types in <code>
+ iostreams</code>.</dd>
+
+ </dl>
+ <p> In addition, these techniques have the additional benefit that
+ they reduce binary size, which can increase runtime performance.
+ </p>
+ </li>
+
+ <li>Namespaces linking symbol definitions to export mapfiles
+
+<p>All symbols in the shared library binary are processed by a linker
+script at build time that either allows or disallows external
+linkage. Because of this, some symbols, regardless of normal C/C++
+linkage, are not visible. Symbols that are internal have several
+appealing characteristics: by not exporting the symbols, there are no
+relocations when the shared library is started and thus this makes for
+faster runtime loading performance by the underlying dynamic loading
+mechanism. In addition, they have the possibility of changing without
+impacting ABI compatibility.
+</p>
+
+<p>The following namespaces are transformed by the mapfile:</p>
+
+<dl>
+<dt><code>namespace std</code></dt>
+<dd> Defaults to exporting all symbols in label
+<code>GLIBCXX</code> that do not begin with an underscore, ie
+<code>__test_func</code> would not be exported by default. Select
+exceptional symbols are allowed to be visible.</dd>
+
+<dt><code>namespace __gnu_cxx</code></dt>
+<dd> Defaults to not exporting any symbols in label
+<code>GLIBCXX</code>, select items are allowed to be visible.</dd>
+
+<dt><code>namespace __gnu_internal</code></dt>
+<dd> Defaults to not exported, no items are allowed to be visible.</dd>
+
+<dt><code>namespace __cxxabiv1</code>, aliased to <code> namespace abi</code></dt>
+<dd> Defaults to not exporting any symbols in label
+<code>CXXABI</code>, select items are allowed to be visible.</dd>
+</dl>
+<p>
+</p>
+</li>
+
+ <li>Freezing the API
+ <p>Disallowed changes, as above, are not made on a stable release
+branch. Enforcement tends to be less strict with GNU extensions that
+standard includes.</p>
+</li>
+</ul>
+
+<h3 class="left">
+ <a name="ABI_testing">Testing ABI changes</a>
+</h3>
+
+<p>
+Testing for GNU C++ ABI changes is composed of two distinct areas:
+testing the C++ compiler (g++) for compiler changes, and testing the
+C++ library (libstdc++) for library changes.
+</p>
+
+<p>
+Testing the C++ compiler ABI can be done various ways.
+</p>
+
+<p>
+One.
+Intel ABI checker. More information can be obtained
+<a href="http://developer.intel.com/software/products/opensource/">here.</a>
+</p>
+
+<p>
+Two.
+The second is yet unreleased, but has been announced on the gcc
+mailing list. It is yet unspecified if these tools will be freely
+available, and able to be included in a GNU project. Please contact
+Mark Mitchell (mark@codesourcery.com) for more details, and current
+status.
+</p>
+
+<p>
+Three.
+Involves using the vlad.consistency test framework. This has also been
+discussed on the gcc mailing lists.
+</p>
+
+<p>
+Testing the C++ library ABI can also be done various ways.
+</p>
+
+<p>
+One.
+(Brendan Kehoe, Jeff Law suggestion to run 'make check-c++' two ways,
+one with a new compiler and an old library, and the other with an old
+compiler and a new library, and look for testsuite regressions)
+</p>
+
+<p>
+Details on how to set this kind of test up can be found here:
+http://gcc.gnu.org/ml/gcc/2002-08/msg00142.html
+</p>
+
+<p>
+Two.
+Use the 'make check-abi' rule in the libstdc++ Makefile.
+</p>
+
+<p>
+This is a proactive check the library ABI. Currently, exported symbol
+names that are either weak or defined are checked against a last known
+good baseline. Currently, this baseline is keyed off of 3.4.0
+binaries, as this was the last time the .so number was incremented. In
+addition, all exported names are demangled, and the exported objects
+are checked to make sure they are the same size as the same object in
+the baseline.
+
+Notice that each baseline is relative to a <strong>default</strong>
+configured library and compiler: in particular, if options such as
+--enable-clocale, or --with-cpu, in case of multilibs, are used at
+configure time, the check may fail, either because of substantive
+differences or because of limitations of the current checking
+machinery.
+</p>
+
+<p>
+This dataset is insufficient, yet a start. Also needed is a
+comprehensive check for all user-visible types part of the standard
+library for sizeof() and alignof() changes.
+</p>
+
+<p>
+Verifying compatible layouts of objects is not even attempted. It
+should be possible to use sizeof, alignof, and offsetof to compute
+offsets for each structure and type in the standard library, saving to
+another datafile. Then, compute this in a similar way for new
+binaries, and look for differences.
+</p>
+
+<p>
+Another approach might be to use the -fdump-class-hierarchy flag to
+get information. However, currently this approach gives insufficient
+data for use in library testing, as class data members, their offsets,
+and other detailed data is not displayed with this flag.
+(See g++/7470 on how this was used to find bugs.)
+</p>
+
+<p>
+Perhaps there are other C++ ABI checkers. If so, please notify
+us. We'd like to know about them!
+</p>
+
+<h3 class="left">
+ <a name="ABI_multi_testing">Testing Multi-ABI binaries</a>
+</h3>
+
+<p>
+A "C" application, dynamically linked to two shared libraries, liba,
+libb. The dependent library liba is C++ shared library compiled with
+gcc-3.3.x, and uses io, exceptions, locale, etc. The dependent library
+libb is a C++ shared library compiled with gcc-3.4.x, and also uses io,
+exceptions, locale, etc.
+</p>
+
+<p> As above, libone is constructed as follows: </p>
+<pre>
+%$bld/H-x86-gcc-3.4.0/bin/g++ -fPIC -DPIC -c a.cc
+
+%$bld/H-x86-gcc-3.4.0/bin/g++ -shared -Wl,-soname -Wl,libone.so.1 -Wl,-O1 -Wl,-z,defs a.o -o libone.so.1.0.0
+
+%ln -s libone.so.1.0.0 libone.so
+
+%$bld/H-x86-gcc-3.4.0/bin/g++ -c a.cc
+
+%ar cru libone.a a.o
+</pre>
+
+<p> And, libtwo is constructed as follows: </p>
+
+<pre>
+%$bld/H-x86-gcc-3.3.3/bin/g++ -fPIC -DPIC -c b.cc
+
+%$bld/H-x86-gcc-3.3.3/bin/g++ -shared -Wl,-soname -Wl,libtwo.so.1 -Wl,-O1 -Wl,-z,defs b.o -o libtwo.so.1.0.0
+
+%ln -s libtwo.so.1.0.0 libtwo.so
+
+%$bld/H-x86-gcc-3.3.3/bin/g++ -c b.cc
+
+%ar cru libtwo.a b.o
+</pre>
+
+<p> ...with the resulting libraries looking like </p>
+<pre>
+%ldd libone.so.1.0.0
+ libstdc++.so.6 =&gt; /usr/lib/libstdc++.so.6 (0x40016000)
+ libm.so.6 =&gt; /lib/tls/libm.so.6 (0x400fa000)
+ libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x4011c000)
+ libc.so.6 =&gt; /lib/tls/libc.so.6 (0x40125000)
+ /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
+
+%ldd libtwo.so.1.0.0
+ libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x40027000)
+ libm.so.6 =&gt; /lib/tls/libm.so.6 (0x400e1000)
+ libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40103000)
+ libc.so.6 =&gt; /lib/tls/libc.so.6 (0x4010c000)
+ /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
+
+</pre>
+
+<p> Then, the "C" compiler is used to compile a source file that uses
+functions from each library.</p>
+<pre>
+gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.6
+</pre>
+
+<p>
+Which gives the expected:
+</p>
+<pre>
+%ldd a.out
+ libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x00764000)
+ libstdc++.so.6 =&gt; /usr/lib/libstdc++.so.6 (0x40015000)
+ libc.so.6 =&gt; /lib/tls/libc.so.6 (0x0036d000)
+ libm.so.6 =&gt; /lib/tls/libm.so.6 (0x004a8000)
+ libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x400e5000)
+ /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
+</pre>
+
+<p>
+This resulting binary, when executed, will be able to safely use code
+from both liba, and the dependent libstdc++.so.6, and libb, with the
+dependent libstdc++.so.5.
+</p>
+
+
+<h3 class="left">
+ <a name="Outstanding Issues">Outstanding Issues</a>
+</h3>
+
+<p> Some features in the C++ language make versioning especially
+difficult. In particular, compiler generated constructs such as
+implicit instantiations for templates, typeinfo information, and
+virtual tables all may cause ABI leakage across shared library
+boundaries. Because of this, mixing C++ ABI's is not recommended at
+this time.
+</p>
+
+<p>For more background on this issue, see these bugzilla entries:</p>
+
+<p>
+<a href="http://gcc.gnu.org/PR24660">24660: versioning weak symbols in libstdc++</a>
+</p>
+
+<p>
+<a href="http://gcc.gnu.org/PR19664">19664: libstdc++ headers should have pop/push of the visibility around the declarations</a>
+</p>
+
+<h3 class="left">
+ <a name="references">Bibliography / Further Reading</a>
+</h3>
+
+<p>
+ABIcheck, a vague idea of checking ABI compatibility
+<br />
+<a href="http://abicheck.sourceforge.net/">http://abicheck.sourceforge.net/</a>
+</p>
+
+<p>
+C++ ABI reference
+<br />
+<a href="http://www.codesourcery.com/cxx-abi/">http://www.codesourcery.com/cxx-abi/</a>
+</p>
+
+<p>
+Intel ABI documentation, "Intel® Compilers for Linux* -Compatibility with the GNU Compilers"
+<br />
+<a href="http://developer.intel.com/software/products/compilers/techtopics/LinuxCompilersCompatibility.htm">http://developer.intel.com/software/products/compilers/techtopics/LinuxCompilersCompatibility.htm</a>
+</p>
+
+<p>
+Sun Solaris 2.9 docs
+<br />
+Linker and Libraries Guide (document 816-1386)
+<br />
+C++ Migration Guide (document 816-2459)
+<br />
+<a href="http://docs.sun.com/db/prod/solaris.9">http://docs.sun.com/db/prod/solaris.9</a>
+<br />
+<a href="http://docs.sun.com/?p=/doc/816-1386&amp;a=load">http://docs.sun.com/?p=/doc/816-1386&amp;a=load</a>
+</p>
+
+<p>
+Ulrich Drepper, "ELF Symbol Versioning"
+<br />
+<a href="http://people.redhat.com/drepper/symbol-versioning">http://people.redhat.com/drepper/symbol-versioning</a>
+</p>
+
+<p>
+C++ ABI for the ARM Architecture
+<br />
+<a href="http://www.arm.com/miscPDFs/8033.pdf">http://www.arm.com/miscPDFs/8033.pdf</a>
+</p>
+
+<p>
+Benjamin Kosnik, ISO C++ J16/06-0046
+<br />
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html">Dynamic Shared Objects: Survey and Issues</a>
+</p>
+
+<p>
+Benjamin Kosnik, ISO C++ J16/06-0083
+<br />
+<a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html">Versioning With Namespaces</a>
+</p>
+
+</body>
+</html>
+
diff --git a/libstdc++-v3/docs/html/17_intro/api.html b/libstdc++-v3/docs/html/17_intro/api.html
new file mode 100644
index 00000000000..50c8604405a
--- /dev/null
+++ b/libstdc++-v3/docs/html/17_intro/api.html
@@ -0,0 +1,596 @@
+<?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 name="AUTHOR" content="bkoz@gcc.gnu.org (Benjamin Kosnik), Felix Natter" />
+ <meta name="KEYWORDS" content="C++, libstdc++, API, deprecate backward" />
+ <meta name="DESCRIPTION" content="API evolution and deprecation history" />
+ <meta name="GENERATOR" content="emacs and ten fingers" />
+ <title>API Evolution and Deprecation History</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="Copyright" href="17_intro/license.html" type="text/html" />
+</head>
+<body>
+
+<h1 class="centered"><a name="top">API Evolution and Deprecation History</a></h1>
+
+<p class="fineprint"><em>
+ The latest version of this document is always available at
+ <a href="http://gcc.gnu.org/onlinedocs/libstdc++/17_intro/api.html">
+ http://gcc.gnu.org/onlinedocs/libstdc++/17_intro/abi.html</a>.
+</em></p>
+
+<p><em>
+ To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++ homepage</a>.
+</em></p>
+
+<!-- ####################################################### -->
+<hr />
+<h3 class="left">
+ <a name="C++ API v1">First.</a>
+</h3>
+
+<p>2.72</p>
+<p> The first generation GNU C++ library was called libg++. It had a
+working relationship with at least two kinds of dinosaur. Sadly, the
+details were not pried away from the estate.
+</p>
+
+<p>
+
+</p>
+
+<p>Known Issues include many of the limitations of its immediate ancestor.</p>
+
+<h5>No <code>ios_base</code></h5>
+
+<p> At least some older implementations don't have <code>std::ios_base</code>, so you should use <code>std::ios::badbit</code>, <code>std::ios::failbit</code> and <code>std::ios::eofbit</code> and <code>std::ios::goodbit</code>.
+</p>
+
+<h5>No <code>cout</code> in <code>ostream.h</code>, no <code>cin</code> in <code>istream.h</code</h5>
+
+<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
+ <code>cout</code>, <code>cin</code> and so on. ISO C++ specifies that one needs to include
+ <tt>&lt;iostream&gt;</tt>
+ explicitly to get the required definitions.
+ </p>
+<p> Some include adjustment may be required.</p>
+
+
+<p>This project is no longer maintained or supported, and the sources
+archived. The code is considered replaced and rewritten.
+</p>
+
+<hr />
+<h3 class="left">
+ <a name="C++ API v1">Second.</a>
+</h3>
+<p> The second generation GNU C++ library was called libstdc++, or
+libstdc++-v2. It was a separate GNU project, although reliably paired
+with GCC. It spans the time between libg++ and pre-ISO C++.
+</p>
+
+<p>egcs 1.x</p>
+<p>2.95</p>
+<p>2.96</p>
+
+<p>Portability Notes</p>
+<p>Implementation Limitations</p>
+
+<h5>Namespace <code>std::</code> not supported.</h5>
+
+<p>
+ Some care is required to support C++ compiler and or library
+ implementation that do not have the standard library in
+ <code>namespace std</code>.
+ </p>
+<p>
+ The following sections list some possible solutions to support compilers
+ that cannot ignore <code>std::</code>-qualified names.
+ </p>
+
+<p> First, see if the compiler has a flag for this. Namespace
+ back-portability-issues are generally not a problem for g++
+ compilers that do not have libstdc++ in <code>std::</code>, as
+ the compilers use <code>-fno-honor-std</code> (ignore
+ <code>std::</code>, <code>:: = std::</code>) by default. That
+ is, the responsibility for enabling or disabling
+ <code>std::</code> is on the user; the maintainer does not have
+ to care about it. This probably applies to some other compilers
+ as well.
+ </p>
+
+<p>Second, experiment with a variety of pre-processor tricks.</p>
+
+<p> By defining <code>std</code> as a macro, fully-qualified namespace calls become global. Volia.
+
+<pre class="programlisting">
+#ifdef WICKEDLY_OLD_COMPILER
+# define std
+#endif
+</pre>
+(thanks to Juergen Heinzl who posted this solution on gnu.gcc.help)
+
+<p>Define a macro <code>NAMESPACE_STD</code>, which is defined to
+either &quot;&quot; or &quot;std&quot; based on a compile-type
+test. On GNU systems, this can be done with autotools by means of an
+autoconf test (see below) for <code>HAVE_NAMESPACE_STD</code>, then
+using that to set a value for the <code>NAMESPACE_STD</code> macro.
+At that point, one is able to use <code>NAMESPACE_STD::string</code>,
+which will evaluate to <code>std::string</code> or
+<code>::string</code> (ie, in the global namespace on systems that do
+not put <code>string</code> in <code>std::</code>). </p>
+
+<p>
+<pre>
+dnl @synopsis AC_CXX_HAVE_STD_NAMESPACE
+dnl
+dnl If the compiler supports the std namespace, define
+dnl HAVE_STD_NAMESPACE.
+dnl
+dnl @category Cxx
+dnl @author Todd Veldhuizen
+dnl @author Luc Maisonobe <luc@spaceroots.org>
+dnl @version 2004-02-04
+dnl @license AllPermissive
+
+AC_DEFUN([AC_CXX_HAVE_STD_NAMESPACE],
+[AC_CACHE_CHECK(whether the compiler supports the std namespace,
+ac_cv_cxx_have_std_namespace,
+[AC_LANG_SAVE
+ AC_LANG_CPLUSPLUS
+ AC_TRY_COMPILE([#include <iostream>
+ std::istream& is = std::cin;
+ ],[return 0;],
+ ac_cv_cxx_have_std_namespace=yes, ac_cv_cxx_have_std_namespace=no)
+ AC_LANG_RESTORE
+])
+if test "$ac_cv_cxx_have_std_namespace" = yes; then
+ AC_DEFINE(HAVE_STD_NAMESPACE,,[define if the compiler supports the std namespace])
+fi
+])
+</pre>
+
+<h5>Illegal iterator usage.</h5>
+<p>
+ The following illustrate implementation-allowed illegal iterator
+ use, and then correct use. <div class="itemizedlist"><ul
+ type="disc"> <li><p>you cannot do
+ <code>ostream::operator&lt;&lt;(iterator)</code> to print the
+ address of the iterator =&gt; use <code>operator&lt;&lt;
+ &amp;*iterator</code> instead ?
+ </p></li>
+<li><p>you cannot clear an iterator's reference
+ (<code>iterator = 0</code>) =&gt; use
+ <code>iterator = iterator_type();</code> ?
+ </p></li>
+<li><p>
+<code>if (iterator)</code> won't work any
+ more =&gt; use <code>if (iterator != iterator_type())</code>
+ ?</p></li>
+</ul>
+
+<h5><code>isspace</code> from <tt>&lt;cctype&gt;</tt> is a macro
+</h5>
+
+<p> Glibc 2.0.x and 2.1.x define <tt>&lt;ctype.h&gt;</tt>
+functionality as macros (isspace, isalpha etc.).
+</p>
+
+<p>
+This implementations of libstdc++, however, keep these functions as
+macros, and so it is not back-portable to use fully qualified
+names. For example:
+</p>
+
+<pre>
+#include &lt;cctype&gt;
+int main() { std::isspace('X'); }
+</pre>
+
+<p>Results in something like this:
+</p>
+
+<pre>
+std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int) _ISspace ) ;
+</pre>
+
+
+<p> A solution is to modify a header-file so that the compiler tells
+<tt>&lt;ctype.h&gt;</tt> to define functions instead of macros:
+</p>
+
+<pre>
+// This keeps isalnum, et al from being propagated as macros.
+#if __linux__
+# define __NO_CTYPE 1
+#endif
+</pre>
+
+<p>Then, include &lt;ctype.h&gt;
+</p>
+
+<p>
+Another problem arises if you put a <code>using namespace std;</code>
+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
+<code>std::</code> (<code>&lt;cctype&gt;</code>).
+</p>
+
+<h5>No <code>vector::at</code>, <code>deque::at</code>, <code>string::at</code></h5>
+
+<p>
+ One solution is to add an autoconf-test for this:
+</p>
+<pre>
+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>
+
+<p>
+If you are using other (non-GNU) compilers it might be a good idea
+to check for <code>string::at</code> separately.
+</p>
+
+<h5>No <code>std::char_traits&lt;char&gt;::eof</code></h5>
+
+<p>
+Use some kind of autoconf test, plus this:
+</p>
+<pre>
+#ifdef HAVE_CHAR_TRAITS
+#define CPP_EOF std::char_traits&lt;char&gt;::eof()
+#else
+#define CPP_EOF EOF
+#endif
+</pre>
+
+<h5>No <code>string::clear</code></h5>
+
+<p>
+ There are two functions for deleting the contents of a string:
+ <code>clear</code> and <code>erase</code> (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>
+ Unfortunately, ut <code>clear</code> is not
+ implemented in this version, so you should use
+ <code>erase</code> (which is probably faster than
+ <code>operator=(charT*)</code>).
+</p>
+
+<h5>Removal of <code>ostream::form</code> and
+<code>istream::scan</code> extensions.</h5>
+
+<p> These are no longer supported. Please use
+ <a href="#sec-stringstream" title="Using stringstreams">
+ stringstreams</a> instead.
+</p>
+
+<h5>No <code>basic_stringbuf</code>, <code>basic_stringstream<code></h5>
+
+<p>
+ Libstdc++ provides the new
+ <code>i/ostringstream</code>-classes, (<tt>&lt;sstream&gt;</tt>), but for compatibility
+ with older implementations you still have to use
+ <code>i/ostrstream</code> (<tt>&lt;strstream&gt;</tt>):
+ <pre >
+ #ifdef HAVE_SSTREAM
+ #include &lt;sstream&gt;
+ #else
+ #include &lt;strstream&gt;
+ #endif
+ </pre>
+ <div class="itemizedlist"><ul type="disc">
+<li><p> <code>strstream</code> is considered to be
+ deprecated
+ </p></li>
+<li><p> <code>strstream</code> is limited to
+ <code>char</code>
+ </p></li>
+<li><p> with <code>ostringstream</code> you don't
+ have to take care of terminating the string or freeing its
+ memory
+ </p></li>
+<li><p> <code>istringstream</code> can be re-filled
+ (clear(); str(input);)
+ </p></li>
+</ul></div>
+<p>
+ You can then use output-stringstreams like this:
+ <pre >
+ #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:
+</p>
+
+<pre>
+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>
+
+<p> One (the only?) restriction is that an istrstream cannot be re-filled:
+</p>
+
+<pre >
+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>
+
+<p>
+If you don't care about speed, you can put these conversions in
+ a template-function:
+</p>
+<pre >
+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>
+
+<p> Another example of using stringstreams is in <a href="../21_strings/howto.html" target="_top">this howto</a>.
+</p>
+
+<p> There is additional information in the libstdc++-v2 info files, in
+particular &quot;info iostream&quot;.
+</p>
+
+<h5>Little or no wide character support</h5>
+
+<h5>No templatized iostreams</h5>
+
+<h5>Thread safety issues.</h5>
+
+<p>This project is no longer maintained or supported, and the sources
+archived. The code is considered replaced and rewritten.
+</p>
+
+
+<hr />
+<h3 class="left">
+ <a name="C++ API v1">Third.</a>
+</h3>
+<p> The third generation GNU C++ library is called libstdc++, or
+libstdc++-v3.
+</p>
+
+ <p>The subset commonly known as the Standard Template Library
+ (chapters 23 through 25, mostly) is adapted from the final release
+ of the SGI STL, with extensive changes.
+ </p>
+
+ <p>A more formal description of the V3 goals can be found in the
+ official <a href="../17_intro/DESIGN">design document</a>.
+ </p>
+
+
+<p>Portability Notes</p>
+
+<h5>Pre-ISO headers moved to backwards</h5>
+<p> The pre-ISO C++ headers (iostream.h etc.) are available, but inclusion
+ generates a warning that you are using deprecated headers.
+</p>
+
+ <p>This compatibility layer is constructed by including the
+ standard C++ headers, and injecting any items in
+ <code>std::</code> into the global namespace.
+ </p>
+ <p>For those of you new to ISO C++ (welcome, time travelers!), no,
+ that isn't a typo. Yes, 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> Some include adjustment may be required.</p>
+
+<h5>Extension headers hash_map, hash_set moved to ext</h5>
+
+<p> Header files <code>hash_map</code> and <code>hash_set</code>
+moved to <code>ext/hash_map</code> and <code>ext/hash_set</code>,
+respectively. At the same time, all types in these files are enclosed
+in <code>namespace __gnu_cxx</code>.
+</p>
+
+
+<h5>
+No <code>ios::nocreate/ios::noreplace</code>.
+</h5>
+
+<p> The existence of <code>ios::nocreate</code> being used for
+input-streams has been confirmed, most probably because the author
+thought it would be more correct to specify nocreate explicitly. So
+it can be left out for input-streams.
+</p>
+
+<p>For output streams, &quot;nocreate&quot; is probably the default,
+unless you specify <code>std::ios::trunc</code> ? 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 <code>app</code>, <code>ate</code>
+and <code>trunc</code> (except for <code>app</code> ?).
+</p>
+
+
+<h5>
+No <code>stream::attach(int fd)</code>.
+</h5>
+
+<p>
+ Phil Edwards writes: It was considered and rejected for the ISO
+ standard. 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
+ <code>std::streambuf</code> (or
+ <code>std::basic_streambuf&lt;..&gt;</code>) which opens a file
+ given a descriptor, and then pass an instance of this to the
+ stream-constructor.
+ </p>
+
+<p>
+ An extension is available that implements this.
+ <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>
+
+<p>
+ For another example of this, refer to
+ <a href="http://www.josuttis.com/cppcode/fdstream.html" target="_top">fdstream example</a>
+ by Nicolai Josuttis.
+</p>
+
+<p><a href="http://gcc.gnu.org/bugzilla/buglist.cgi?cmdtype=runnamed&namedcmd=libstdc%2B%2B">Known Issues</a></p>
+
+<h5>
+container iterator types are not necessarily container value_type*
+</h5>
+
+<p>API History, User Visible Changes</p>
+
+<p>3.0.0</p>
+
+
+<p>3.1.0</p>
+<p>3.2.0</p>
+<p>3.3.0</p>
+
+
+<p>3.4.0</p>
+
+Macro guard for libstdc++ changed, from _GLIBCPP_ to _GLIBCXX_, to
+accomodate a request from the C Pre Processor maintainer.
+
+<p>4.0.0</p>
+<p>4.1.0</p>
+
+<cassert> how has to be explicitly included for <code>std::assert</code> calls.
+
+<p>4.2.0</p>
+
+<p>4.3.0</p>
+
+Header streamlining.
+
+Backward include edit.
+
+PCH files built but not installed.
+
+Namespace pb_ds moved to __gnu_pb_ds.
+
+C++OX features appear.
+
+<hr />
+<h3 class="left">
+ <a name="C++ API v1">Fourth, and future</a>
+</h3>
+
+<hr />
+<h3 class="left">
+ <a name="Deprecation">Deprecation and Backwards Compatibility</a>
+</h3>
+
+<hr />
+<h3 class="left">
+ <a name="Links">Links</a>
+</h3>
+
+<p>
+<a href="http://www.kegel.com/gcc/gcc4.html">Migrating to gcc-4.1</a>, by Dan Kegel.
+</p>
+
+<p>
+<a href="http://lists.debian.org/debian-gcc/2006/03/msg00405.html">Building the whole Debian archive with GCC 4.1: a summary</a>, by Martin Michlmayr
+</p>
+
+<p>
+<a href="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html">Migration guide for GCC-3.2</a>
+</p>
+
+</body>
+</html>
+
diff --git a/libstdc++-v3/docs/html/17_intro/c++0x_status.html b/libstdc++-v3/docs/html/17_intro/c++0x_status.html
new file mode 100644
index 00000000000..5627d6fe178
--- /dev/null
+++ b/libstdc++-v3/docs/html/17_intro/c++0x_status.html
@@ -0,0 +1,2280 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "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" />
+ <link rev="made" href="mailto:gcc@gcc.gnu.org" />
+ <link rel="shortcut icon" href="http://gcc.gnu.org/favicon.ico" />
+
+ <title>
+ Status of C++0x features in GCC
+ - GNU Project - Free Software Foundation (FSF)
+ </title>
+
+</head>
+
+<body>
+
+<h1 align="center">
+ Status of C++0x features in GCC
+</h1>
+
+<p>
+This table is based on the table of contents of ISO/IEC
+Doc No: N2461=07-0331 Date: 2007-10-22
+Working Draft, Standard for Programming Language C++
+</p>
+
+<p>
+In this implementation <code>-std=gnu++0x</code> or
+<code>-std=c++0x</code> flags must be used to enable language and
+library features. The pre-defined symbol
+<code>__GXX_EXPERIMENTAL_CXX0X__</code> is used to check for the
+presence of the required flag.
+</p>
+
+<p>
+This page describes the C++0x support in mainline GCC SVN, not in any
+particular release.
+</p>
+
+<table border="1">
+ <thead>
+ <tr>
+ <td><span style="font-weight: bold;">Section</span></td>
+ <td><span style="font-weight: bold;">Description</span></td>
+ <td><span style="font-weight: bold;">Done</span></td>
+ <td><span style="font-weight: bold;">Broken</span></td>
+ <td><span style="font-weight: bold;">Missing</span></td>
+ <td><span style="font-weight: bold;">Comments</span></td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><b>20</b></td>
+ <td colspan="5"><b>General Utilities</b></td>
+ </tr>
+ <tr>
+ <td>20.2</td>
+ <td>Utility Components</td>
+ <td></td>
+ <td></td>
+ <td>incomplete</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.2.1</td>
+ <td>Operators</td>
+ <td></td>
+ <td></td>
+ <td>partial</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.2.2</td>
+ <td>forward/move helpers</td>
+ <td></td>
+ <td></td>
+ <td>partial</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.2.3</td>
+ <td>Pairs</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+
+ <tr>
+ <td>20.3</td>
+ <td>Header <code>&lt;tuple&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.3.1</td>
+ <td>Class template <code>tuple</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.3.1.1</td>
+ <td>Construction</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.3.1.2</td>
+ <td>Tuple creation functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.3.1.3</td>
+ <td>Tuple helper classes</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.3.1.4</td>
+ <td>Element access</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.3.1.5</td>
+ <td>Relational operators</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+
+ <tr>
+ <td>20.4</td>
+ <td colspan="5">Metaprogramming and type traits</td>
+ </tr>
+ <tr>
+ <td>20.4.1</td>
+ <td>Requirements</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.2</td>
+ <td>Header <code>&lt;type_traits&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.3</td>
+ <td>Helper classes</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.4</td>
+ <td>General Requirements</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.5</td>
+ <td>Unary Type Traits</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.5.1</td>
+ <td>Primary Type Categories</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.5.2</td>
+ <td>Composite type traits</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.5.3</td>
+ <td>Type properties</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.6</td>
+ <td>Relationships between types</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.7</td>
+ <td>Transformations between types</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.7.1</td>
+ <td>Const-volatile modifications</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.7.2</td>
+ <td>Reference modifications</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.7.3</td>
+ <td>Array modifications</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.7.4</td>
+ <td>Pointer modifications</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.8</td>
+ <td>Other transformations</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.4.9</td>
+ <td>Implementation requirements</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5 </td>
+ <td>Function Objects</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5</td>
+ <td>Additions to header <code>&lt;functional&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.1</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.2</td>
+ <td>Requirements</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.3</td>
+ <td>Base</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.4</td>
+ <td>Function return types</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.5</td>
+ <td>Class template <code>reference_wrapper</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.5.1</td>
+ <td><code>reference_wrapper</code> construct/copy/destroy</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.5.2</td>
+ <td><code>reference_wrapper</code> assignment</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.5.3</td>
+ <td><code>reference_wrapper</code> access</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.5.4</td>
+ <td><code>reference_wrapper</code> invocation</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.5.5</td>
+ <td><code>reference_wrapper</code> helper functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.14</td>
+ <td>Function template <code>mem_fn</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.11</td>
+ <td>Template function bind</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+
+ <tr>
+ <td>20.5.11.1</td>
+ <td>Function object binders</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.11.1.1</td>
+ <td>Class template <code>is_bind_expression</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.11.1.2</td>
+ <td>Class template <code>is_placeholder</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.11.1.3</td>
+ <td>Function template <code>bind</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.11.1.4</td>
+ <td>Placeholders</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.15</td>
+ <td>Polymorphic function wrappers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.15.1</td>
+ <td>Class <code>bad_function_call<code></code></code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.15.1.1</td>
+ <td><code>bad_function_call</code> constructor</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.15.2</td>
+ <td>Class template <code>function</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.15.2.1</td>
+ <td><code>function</code> construct/copy/destroy</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.15.2.2</td>
+ <td><code>function</code> modifiers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.15.2.3</td>
+ <td><code>function</code> capacity</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.15.2.4</td>
+ <td><code>function</code> invocation</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.15.2.5</td>
+ <td><code>function</code> target access</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.15.2.7</td>
+ <td>null pointer comparison operators</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.15.2.8</td>
+ <td>specialized algorithms</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.5.16</td>
+ <td>Class template <code>hash</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6</td>
+ <td>Additions to header <code>&lt;memory&gt;</code> synopsis</td>
+ <td></td>
+ <td></td>
+ <td>partial</td>
+ <td>missing <code>unique_ptr</code></td>
+ </tr>
+ <tr>
+ <td>20.6.5</td>
+ <td>Class template <code>unique_ptr</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6</td>
+ <td>Smart pointers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.1</td>
+ <td>Class <code>bad_weak_ptr</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.2</td>
+ <td>Class template <code>shared_ptr</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td><a href="tr1.html#1">1</a></td>
+ </tr>
+ <tr>
+ <td>20.6.6.2.1</td>
+ <td><code>shared_ptr</code> constructors</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.2.2</td>
+ <td><code>shared_ptr</code> destructor</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.2.3</td>
+ <td><code>shared_ptr</code> assignment</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.2.4</td>
+ <td><code>shared_ptr</code> modifiers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.2.5</td>
+ <td><code>shared_ptr</code> observers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.2.6</td>
+ <td><code>shared_ptr</code> comparison</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.2.7</td>
+ <td><code>shared_ptr</code> I/O</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.2.8</td>
+ <td><code>shared_ptr</code> specialized algorithms</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.2.9</td>
+ <td><code>shared_ptr</code> casts</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.2.10</td>
+ <td><code>get_deleter</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.3</td>
+ <td>Class template <code>weak_ptr</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.3.1</td>
+ <td><code>weak_ptr</code> constructors</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.3.2</td>
+ <td><code>weak_ptr</code> destructor</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.3.3</td>
+ <td><code>weak_ptr</code> assignment</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.3.4</td>
+ <td><code>weak_ptr</code> modifiers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.3.5</td>
+ <td><code>weak_ptr</code> observers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.3.6</td>
+ <td><code>weak_ptr</code> comparison</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.3.7</td>
+ <td><code>weak_ptr</code> specialized algorithms</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>20.6.6.4</td>
+ <td>Class template <code>enable_shared_from_this</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+
+
+
+ <tr>
+ <td><b>23</b></td>
+ <td colspan="5"><b>Containers</b></td>
+ </tr>
+ <tr>
+ <td>23.2.1</td>
+ <td>Header <code>&lt;array&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.2.1</td>
+ <td>Class template array</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.2.1.1</td>
+ <td><code>array</code> constructors, copy, and assignment</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.2.1.2</td>
+ <td><code>array</code> specialized algorithms</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.2.1.3</td>
+ <td><code>array </code>size</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.2.1.4</td>
+ <td><code>array </code>data</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.2.1.5</td>
+ <td>Zero sized <code>array</code>s</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.2.1.6</td>
+ <td>Tuple interface to class template <code>array</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+
+ <tr>
+ <td>23.4</td>
+ <td>Unordered associative containers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.1</td>
+ <td>Class template <code>unordered_map</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.1.1</td>
+ <td><code>unordered_map</code> constructors</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.1.2</td>
+ <td><code>unordered_map</code> element access</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.1.3</td>
+ <td><code>unordered_map</code> swap</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.2</td>
+ <td>Class template <code>unordered_multimap</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.2.1</td>
+ <td><code>unordered_multimap</code> constructors</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.2.2</td>
+ <td><code>unordered_multimap</code> swap</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.3</td>
+ <td>Class template <code>unordered_set</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.3.1</td>
+ <td><code>unordered_set</code> constructors</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.3.2</td>
+ <td><code>unordered_set</code> swap</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.4</td>
+ <td>Class template <code>unordered_multiset<code></code></code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.4.1</td>
+ <td><code>unordered_multiset</code> constructors</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>23.4.4.2</td>
+ <td><code>unordered_multiset</code> swap</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+
+ <tr>
+ <td><b>26</b></td>
+ <td colspan="5"><b>Numerics</b></td>
+ </tr>
+ <tr>
+ <td>26.4</td>
+ <td>Random number generation</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.1</td>
+ <td>Requirements</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.2</td>
+ <td>Header <code>&lt;random&gt;</code> synopsis</td>
+ <td></td>
+ <td></td>
+ <td>partial</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.3</td>
+ <td>Random number engine class templates</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.3.1</td>
+ <td>Class template <code>linear_congruential_engine</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.3.2</td>
+ <td>Class template <code>mersenne_twister_engine</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.3.3</td>
+ <td>Class template <code>subtract_with_carry_engine</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.4</td>
+ <td>Random number engine adaptor class templates</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+
+ <tr>
+ <td>26.4.4.1</td>
+ <td>Class template <code>discard_block_engine</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.4.2</td>
+ <td>Class template <code>independent_bits_engine</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.4.3</td>
+ <td>Class template <code>shuffle_order_engine</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.4.4</td>
+ <td>Class template <code>xor_combine_engine</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>operator()() per N2079</td>
+ </tr>
+ <tr>
+ <td>26.4.5</td>
+ <td>Engines and engine adaptors with predefined parameters</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.6</td>
+ <td>Class <code>random_device</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.7</td>
+ <td>Utilities</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.7.1</td>
+ <td>Class <code>seed_seq</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.7.2</td>
+ <td>Function template <code>generate_cannonical</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8</td>
+ <td>Random number generation class templates</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.1</td>
+ <td>Uniform distributions</td>
+ <td></td>
+ <td></td>
+ <td>partial</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.1</td>
+ <td>Class template <code>uniform_int_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.1</td>
+ <td>Class template <code>uniform_real_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.2</td>
+ <td>Bernoulli distributions</td>
+ <td></td>
+ <td></td>
+ <td>partial</td>
+ <td></td>
+ </tr>
+
+ <tr>
+ <td>26.4.8.2.1</td>
+ <td>Class <code>bernoulli_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.2.2</td>
+ <td>Class template <code>binomial_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.2.3</td>
+ <td>Class template <code>geometric_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.2.4</td>
+ <td>Class template <code>negative_binomial_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.3</td>
+ <td>Poisson distributions</td>
+ <td></td>
+ <td></td>
+ <td>partial</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.3.1</td>
+ <td>Class template <code>poisson_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.3.2</td>
+ <td>Class template <code>exponential_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.3.3</td>
+ <td>Class template <code>gamma_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.3.4</td>
+ <td>Class template <code>weibull_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.3.5</td>
+ <td>Class template <code>extreme_value_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.4</td>
+ <td>Normal distributions</td>
+ <td></td>
+ <td></td>
+ <td>partial</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.4.1</td>
+ <td>Class template <code>normal_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.4.2</td>
+ <td>Class template <code>lognormal_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.4.3</td>
+ <td>Class template <code>chi_squared_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.4.4</td>
+ <td>Class template <code>cauchy_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.4.5</td>
+ <td>Class template <code>fisher_f_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.4.6</td>
+ <td>Class template <code>student_t_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.5</td>
+ <td>Sampling distributions</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.5.1</td>
+ <td>Class template <code>discrete_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.5.1</td>
+ <td>Class template <code>piecewise_constant_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>26.4.8.5.1</td>
+ <td>Class template <code>general_pdf_distribution</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+
+ <tr>
+ <td><b>28</b></td>
+ <td colspan="5"><b>Regular expressions</b></td>
+ </tr>
+ <tr>
+ <td>28.1</td>
+ <td>Definitions</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.2</td>
+ <td>Requirements</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.3</td>
+ <td>Regular expressions summary</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.4</td>
+ <td>Header <code>&lt;regex&gt;</code> synopsis</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.5</td>
+ <td>Namespace <code>tr1::regex_constants</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.5.1</td>
+ <td>Bitmask Type <code>syntax_option_type</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.5.2</td>
+ <td>Bitmask Type <code>regex_constants::match_flag_type</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.5.3</td>
+ <td>Implementation defined <code>error_type</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.6</td>
+ <td>Class <code>regex_error</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.7</td>
+ <td>Class template <code>regex_traits</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.8</td>
+ <td>Class template <code>basic_regex</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.8.1</td>
+ <td><code>basic_regex</code> constants</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.8.2</td>
+ <td><code>basic_regex</code> constructors</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.8.3</td>
+ <td><code>basic_regex</code> assign</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.8.4</td>
+ <td><code>basic_regex</code> constant operations</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.8.5</td>
+ <td><code>basic_regex</code> locale</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.8.6</td>
+ <td><code>basic_regex</code> swap</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.8.7</td>
+ <td><code>basic_regex</code> non-member functions</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.8.7.1</td>
+ <td><code>basic_regex</code> non-member swap</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.9</td>
+ <td>Class template <code>sub_match</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.9.1</td>
+ <td><code>sub_match</code> members</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.9.2</td>
+ <td><code>sub_match</code> non-member operators</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.10</td>
+ <td>Class template <code>match_results</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.10.1</td>
+ <td><code>match_results</code> constructors</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.10.2</td>
+ <td><code>match_results</code> size</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.10.3</td>
+ <td><code>match_results</code> element access</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.10.4</td>
+ <td><code>match_results</code> formatting</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.10.5</td>
+ <td><code>match_results</code> allocator</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.10.6</td>
+ <td><code>match_results</code> swap</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.11</td>
+ <td>Regular expression algorithms</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.11.1</td>
+ <td>exceptions</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.11.2</td>
+ <td><code>regex_match</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.11.3</td>
+ <td><code>regex_search</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.11.4</td>
+ <td><code>regex_replace</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.12</td>
+ <td>Regular expression Iterators</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.12.1</td>
+ <td>Class template <code>regex_iterator</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.12.1.1</td>
+ <td><code>regex_iterator</code> constructors</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.12.1.2</td>
+ <td><code>regex_iterator</code> comparisons</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.12.1.3</td>
+ <td><code>regex_iterator</code> dereference</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.12.1.4</td>
+ <td><code>regex_iterator</code> increment</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.12.2</td>
+ <td>Class template <code>regex_token_iterator</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.12.2.1</td>
+ <td><code>regex_token_iterator</code> constructors</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.12.2.2</td>
+ <td><code>regex_token_iterator</code> comparisons</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.12.2.3</td>
+ <td><code>regex_token_iterator</code> dereference</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.12.2.4</td>
+ <td><code>regex_token_iterator</code> increment</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>28.13</td>
+ <td>Modified ECMAScript regular expression grammar</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><b>C</b></td>
+ <td colspan="5"><b>C compatibility</b></td>
+ </tr>
+ <tr>
+ <td>C2.1</td>
+ <td>Additions to header <code>&lt;complex&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.1.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.1.2</td>
+ <td>Function <code>acos</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.1.3</td>
+ <td>Function <code>asin</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.1.4</td>
+ <td>Function <code>atan</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.1.5</td>
+ <td>Function <code>acosh</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.1.6</td>
+ <td>Function <code>asinh</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.1.7</td>
+ <td>Function <code>atanh</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.1.8</td>
+ <td>Function <code>fabs</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.1.9</td>
+ <td>Additional Overloads</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.2</td>
+ <td>Header <code>&lt;ccomplex&gt;</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td>DR 551</td>
+ </tr>
+ <tr>
+ <td>C2.3</td>
+ <td>Header <code>&lt;complex.h&gt;</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td>DR 551</td>
+ </tr>
+ <tr>
+ <td>C2.4</td>
+ <td>Additions to header <code>&lt;cctype&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.4.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.4.2</td>
+ <td>Function <code>isblank</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.5</td>
+ <td>Additions to header <code>&lt;ctype.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.6</td>
+ <td>Header <code>&lt;cfenv&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.6.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.6.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.7</td>
+ <td>Header <code>&lt;fenv.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.8</td>
+ <td>Additions to header <code>&lt;cfloat&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.9</td>
+ <td>Additions to header <code>&lt;float.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.10</td>
+ <td>Additions to header <code>&lt;ios&gt;</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.10.1</td>
+ <td>Synopsis</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.10.2</td>
+ <td>Function <code>hexfloat</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.11</td>
+ <td>Header <code>&lt;cinttypes&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.11.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>DR 557</td>
+ </tr>
+ <tr>
+ <td>C2.11.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.12</td>
+ <td>Header <code>&lt;inttypes.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.13</td>
+ <td>Additions to header <code>&lt;climits&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.14</td>
+ <td>Additions to header <code>&lt;limits.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.15</td>
+ <td>Additions to header <code>&lt;locale&gt;</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.16</td>
+ <td>Additions to header <code>&lt;cmath&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.16.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.16.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.16.3</td>
+ <td>Function template definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.16.4</td>
+ <td>Additional overloads</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>DR 568; DR 550</td>
+ </tr>
+ <tr>
+ <td>C2.17</td>
+ <td>Additions to header <code>&lt;math.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.18</td>
+ <td>Additions to header <code>&lt;cstdarg&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.19</td>
+ <td>Additions to header <code>&lt;stdarg.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.20</td>
+ <td>The header <code>&lt;cstdbool&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.21</td>
+ <td>The header <code>&lt;stdbool.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.22</td>
+ <td>The header <code>&lt;cstdint&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.22.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.22.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.23</td>
+ <td>The header <code>&lt;stdint.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.24</td>
+ <td>Additions to header <code>&lt;cstdio&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.24.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.24.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.24.3</td>
+ <td>Additional format specifiers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>C library responsibility</td>
+ </tr>
+ <tr>
+ <td>C2.24.4</td>
+ <td>Additions to header <code>&lt;stdio.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.25</td>
+ <td>Additions to header <code>&lt;cstdlib&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.25.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.25.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.25.3</td>
+ <td>Function <code>abs</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.25.4</td>
+ <td>Function <code>div</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.26</td>
+ <td>Additions to header <code>&lt;stdlib.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.27</td>
+ <td>Header <code>&lt;ctgmath&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>DR 551</td>
+ </tr>
+ <tr>
+ <td>C2.28</td>
+ <td>Header <code>&lt;tgmath.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>DR 551</td>
+ </tr>
+ <tr>
+ <td>C2.29</td>
+ <td>Additions to header <code>&lt;ctime&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>C library responsibility</td>
+ </tr>
+ <tr>
+ <td>C2.30</td>
+ <td>Additions to header <code>&lt;cwchar&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.30.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.30.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.30.3</td>
+ <td>Additional wide format specifiers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>C library responsibility</td>
+ </tr>
+ <tr>
+ <td>C2.31</td>
+ <td>Additions to header <code>&lt;wchar.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.32</td>
+ <td>Additions to header <code>&lt;cwctype&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.32.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.32.2</td>
+ <td>Function <code>iswblank</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>C2.33</td>
+ <td>Additions to header <code>&lt;wctype.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><b>D</b></td>
+ <td colspan="5"><b>Compatibility Features</b></td>
+ </tr>
+ <tr>
+ <td>D.6</td>
+ <td>Old iostream members</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>D.8</td>
+ <td>Binders</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td><a href="http://gcc.gnu.org/PR33911">33911</a></td>
+ </tr>
+ <tr>
+ <td>D.9</td>
+ <td>Class template <code>auto_ptr</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td><a href="http://gcc.gnu.org/PR33911">33911</a></td>
+ </tr>
+
+ </tbody>
+</table>
+
+<h3>Footnotes</h3>
+
+<ol>
+
+ <li>
+ <a name="1"/>
+ The shared_ptr implementation uses some code from the
+ <a href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">Boost
+ shared_ptr</a> library.
+ </li>
+
+</ol>
+
+<p>
+Please send FSF &amp; GNU inquiries &amp; questions to
+<a href="mailto:gnu@gnu.org">gnu@gnu.org</a>.
+There are also <a href="http://www.gnu.org/home.html#ContactInfo">other ways
+to contact</a> the FSF.
+</p>
+
+<p>
+These pages are maintained by
+<a href="http://gcc.gnu.org/about.html">the GCC team</a>.
+</p>
+
+<address>
+For questions related to the use of GCC, please consult these web
+pages and the <a href="http://gcc.gnu.org/onlinedocs/">GCC manuals</a>. If
+that fails, the <a href="mailto:gcc-help@gcc.gnu.org">gcc-help@gcc.gnu.org</a>
+mailing list might help.<br />
+Please send comments on these web pages and the development of GCC to our
+developer mailing list at <a href="mailto:gcc@gnu.org">gcc@gnu.org</a>
+or <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a>. All of our lists
+have <a href="http://gcc.gnu.org/lists.html">public archives</a>.
+</address>
+
+<p>
+Copyright (C) Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110, USA.
+</p>
+<p>
+Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.
+</p>
+
+<table width="100%" border="0">
+<tr>
+ <td>
+ <!-- IGNORE DIFF -->Last modified 2007-10-30
+ </td>
+ <td align="right" valign="bottom">
+ <a href="http://validator.w3.org/check/referer">
+ <img src="http://www.w3.org/Icons/valid-xhtml10"
+ alt="Valid XHTML 1.0" border="0" width="88" height="31" />
+ </a>
+ </td>
+</tr>
+</table>
+
+</body>
+</html>
diff --git a/libstdc++-v3/docs/html/17_intro/CHECKLIST b/libstdc++-v3/docs/html/17_intro/c++1998_status.html
index ad02b0d8731..7865e649982 100644
--- a/libstdc++-v3/docs/html/17_intro/CHECKLIST
+++ b/libstdc++-v3/docs/html/17_intro/c++1998_status.html
@@ -1,3 +1,4 @@
+<pre>
Completion Checklist for the Standard C++ Library
Updated: 2003-04-25
@@ -6000,3 +6001,4 @@ M int pcount() const;
M char* str();
};
+</pre> \ No newline at end of file
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/configury.html b/libstdc++-v3/docs/html/17_intro/configury.html
index 4b676f0405e..1c9acf2e137 100644
--- a/libstdc++-v3/docs/html/17_intro/configury.html
+++ b/libstdc++-v3/docs/html/17_intro/configury.html
@@ -9,7 +9,7 @@
<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>
+ <title>libstdc++ 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" />
@@ -26,7 +26,7 @@ Canadian cross build.</code></p>
<hr />
-<h2>Notes on libstdc++-v3 configury</h2>
+<h2>Notes on libstdc++ configury</h2>
<blockquote>
No problem is insoluble in all conceivable circumstances.<br />
-- The Cosmic AC,
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
index 631e58fe0b9..828959c841c 100644
--- a/libstdc++-v3/docs/html/17_intro/howto.html
+++ b/libstdc++-v3/docs/html/17_intro/howto.html
@@ -6,11 +6,11 @@
<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="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards), Benjamin Kosnik, Felix Natter" />
<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>
+ <title>libstdc++ 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" />
@@ -34,33 +34,175 @@
<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>
+ <li><a href="#2.1">Header Files</a></li>
+ <li><a href="#5">Implementation specific behavior</a></li>
+ <li><a href="#6">Macros</a></li>
+ <li><a href="#3">Multithreading</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
+<h2><a name="2.1">Header Files</a></h2>
+ <p>The C++ standard 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
+ only rule is that when one <code>#include</code>'s 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.
+ available, no matter how.
</p>
+<p>C++98/03 include files:
+</p>
+<pre>
+C++ Library Headers
+algorithm ios new stack
+bitset iosfwd numeric stdexcept
+complex iostream ostream streambuf
+ istream queue string
+deque iterator
+exception limits typeinfo
+fstream list set
+functional locale map
+iomanip memory sstream
+
+C++ Headers for C Library Facilities
+cassert cfloat cmath cstddef
+ccomplex csetjmp cstdio ctime
+cctype ciso646 csignal
+cerrno climits cstdarg cstdlib cwchar
+ clocale cstring cwctype
+</pre>
+
+<p>C++0x include files:
+</p>
+<pre>
+C++ Library Headers
+algorithm ios new stack
+array iosfwd numeric stdexcept
+bitset iostream ostream streambuf
+complex istream queue string
+deque iterator random system_error
+exception limits regex tuple
+fstream list set type_traits
+functional locale map typeinfo
+iomanip memory sstream
+
+C++ Headers for C Library Facilities
+cassert cfloat cmath cstddef ctgmath
+ccomplex cinttypes csetjmp cstdio ctime
+cctype ciso646 csignal cstdint cuchar
+cerrno climits cstdarg cstdlib cwchar
+cfenv clocale cstdbool cstring cwctype
+</pre>
+
+<p>In addition, TR1 includes as:
+</p>
+<pre>
+C++ Library Headers
+tr1/array, tr1/complex, tr1/functional, tr1/memory, tr1/random,
+tr1/regex, tr1/tuple, tr1/type_traits, tr1/unordered_map,
+tr1/unordered_set, tr1/utility
+
+C++ Headers for C Library Facilities
+tr1/cmath, tr1/ccomplex, tr1/cfenv, tr1/cfloat, tr1/cinttypes,
+tr1/climits, tr1/cstdarg, tr1/cstdbool, tr1/cstdint, tr1/cstdio,
+tr1/cstdlib, tr1/ctgmath, tr1/ctime, tr1/cwchar, tr1/cwctype
+
+C++ Compatibility Headers for C Library Facilities
+tr1/complex.h, tr1/ctype.h, tr1/float.h, tr1/limits.h, tr1/math.h,
+tr1/stdarg.h, tr1/stdbool.h, tr1/stdint.h, tr1/stdio.h, tr1/stdlib.h,
+tr1/tgmath.h, tr1/wchar.h, tr1/wctype.h
+</pre>
+
+<hr />
+<h2><a name="2.2">Headers and <code>namespace std::</code></a></h2>
+<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 <code>std::</code> (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 <code>std::</code>
+ (and macros will be converted to inline-functions).
+ </p>
+
+<p>FIXME: this is no longer accurate.</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>
+
+<hr />
+<h2><a name="2.5">Namespace <code>std::</code></a></h2>
+
+<p>
+ One standard requirement is that the library components are defined
+ in <code>namespace std::</code>. Thus, in order to use these types or
+ functions, one must do one of two things:
+</p>
+
+ <div class="itemizedlist"><ul type="disc"> <li><p>put a kind of
+<span class="emphasis"><i>using-declaration</i></span> in your source
+(either <code>using namespace std;</code> or i.e. <code>using
+std::string;</code>) This approach works well for individual source files, but
+should not be used in a global context, like header files.
+ </p></li> <li><p>use a <span class="emphasis"><i>fully
+qualified name</i></span> for each library symbol
+(i.e. <code>std::string</code>, <code>std::cout</code>) Always can be
+used, and usually enhanced, by strategic use of typedefs. (In the
+cases where the qualified verbage becomes unweidly.)
+ </p></li>
+</ul>
+
+<hr />
+<h2><a name="2.6">Using namespace composition</code></a></h2>
+
+<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, <code>std::string</code> gets imported into
+ namespace Gtk::. The result is that you don't have to use
+ <code>std::string</code> in this header, but still
+ <code>std::string</code> does not get imported into
+ the global namespace (::) unless the user does
+ <code>using namespace Gtk;</code> (which is not recommended
+ practice for Gtk--, so it is not a problem). Additionally, the
+ <code>using</code>-declarations are wrapped in macros that
+ are set based on autoconf-tests to either &quot;&quot; or i.e. <code>using
+ std::string;</code> (depending on whether the system has
+ libstdc++ in <code>std::</code> 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>)
+</p>
+
<hr />
<h2><a name="3">The Standard C++ library and multithreading</a></h2>
<p>This section discusses issues surrounding the proper compilation
@@ -119,7 +261,7 @@
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
+ <p>The libstdc++ 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
@@ -162,21 +304,7 @@
</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>
+<h2><a name="5">Behavior specific to libstdc++</a></h2>
<p>The ISO standard defines the following phrase:
</p>
<blockquote><dl>
@@ -209,7 +337,7 @@
<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
+ sections, libstdc++ 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 />
@@ -289,74 +417,100 @@
</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>.
+<h2><a name="6">Macros for libstdc++</a></h2>
+
+ <p>All pre-processor switches and configurations are all gathered
+ in the file <code>c++config.h</code>, which is generated during
+ the libstdc++ configuration and build process, and included by
+ files part of the public libstdc++ API. Most of these macros
+ should not be used by consumers of libstdc++, and are reserved
+ for internal implementation use. <strong>These macros cannot be
+ redefined</strong>. However, a select handful of these macro
+ control libstdc++ extensions and extra features, or provide
+ versioning information for the API, and are able to be used.
</p>
+
+ <p>All library macros begin with <code>_GLIBCXX_</code> (except for
+ versions 3.1.x to 3.3.x, which use <code>_GLIBCPP_</code>).
+ </p>
+
+ <p>Below is the macro which users may check for library version
+ information. </p>
+
+ <dl>
+ <dt><code>__GLIBCXX__</code></dt> <dd>The current version of
+ libstdc++ in compressed ISO date format, form of an unsigned
+ long. For details on the value of this particular macro for a
+ particular release, please consult this <a href="abi.html">
+ document</a>.</dd> </dl>
+
+ <p>Below are the macros which users may change with #define/#undef or
+ with -D/-U compiler flags. The default state of the symbol is
+ listed.</p>
+
+ <p>&quot;Configurable&quot; (or &quot;Not configurable&quot;) means
+ that the symbol is initially chosen (or not) based on
+ --enable/--disable options at library build and configure time
+ (documented <a href="../configopts.html">here</a>), with the
+ various --enable/--disable choices being translated to
+ #define/#undef).
+ </p>
+
+ <p> &quot;ABI&quot; means that changing from the default value may
+ mean changing the ABI of compiled code. In other words, these
+ choices control code which has already been compiled (i.e., in a
+ binary such as 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.
+ Experimenting with different values with the expectation of
+ consistent linkage requires changing the config headers before
+ building/installing the library.
+ </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>Defined by default. Not configurable. ABI-changing. Turning this off
+ removes older ARM-style iostreams code, and other anachronisms
+ from the API. This macro is dependent on the version of the
+ standard being tracked, and as a result may give different results for
+ <code>-std=c++98</code> and <code>-std=c++0x</code>. This may
+ be useful in updating old C++ code which no longer meet the
+ requirements of the language, or for checking current code
+ against new language standards. </dd>
+
+ <dt><code>_GLIBCXX_FORCE_NEW</code></dt> <dd>Undefined by
+ default. When defined, memory allocation and allocators controlled
+ by libstdc++ call operator new/delete without caching and
+ pooling. Configurable via
+ <code>--enable-libstdcxx-allocator</code>. ABI-changing.</a>
</dd>
+
+
+ <dt><code>_GLIBCXX_CONCEPT_CHECKS</code></dt> <dd>Undefined by
+ default. Configurable via <code>--enable-concept-checks</code>.
+ 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
+ <dd>Undefined by default. When defined, compiles
+ user code using the <a href="../ext/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
+ <dd>Undefined by default. When defined while
+ compiling with the <a href="../ext/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>_GLIBCXX_PARALLEL</code></dt>
+ <dd>Undefined by default. When defined, compiles
+ user code using the <a href="../ext/parallel_mode.html">libstdc++ parallel
+ mode</a>.
+ </dd>
+
<!--
<dt><code></code></dt>
<dd>
diff --git a/libstdc++-v3/docs/html/17_intro/license.html b/libstdc++-v3/docs/html/17_intro/license.html
index 8dc0ebd711c..294a00892d3 100644
--- a/libstdc++-v3/docs/html/17_intro/license.html
+++ b/libstdc++-v3/docs/html/17_intro/license.html
@@ -32,7 +32,7 @@
<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
+ <a href="COPYING" type="text/plain">GNU General Public License</a>, with the so-called
&quot;runtime exception,&quot; as follows (or see any header or
implementation file):
</p>
@@ -85,7 +85,7 @@
<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>.
+ the <a href="COPYING.DOC" type="text/plain">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.
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
index c280990c901..2a561a9abc3 100644
--- a/libstdc++-v3/docs/html/17_intro/porting.html
+++ b/libstdc++-v3/docs/html/17_intro/porting.html
@@ -1,8 +1,8 @@
<html lang="en">
<head>
-<title>Porting libstdc++-v3</title>
+<title>Porting libstdc++</title>
<meta http-equiv="Content-Type" content="text/html">
-<meta name="description" content="Porting libstdc++-v3">
+<meta name="description" content="Porting libstdc++">
<meta name="generator" content="makeinfo 4.6">
<!--
Copyright &copy; 2000, 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
@@ -35,7 +35,7 @@ texts being (a) (see below), and with the Back-Cover Texts being (b)
--></style>
</head>
<body>
-<h1 class="settitle">Porting libstdc++-v3</h1>
+<h1 class="settitle">Porting libstdc++</h1>
<div class="node">
<p><hr>
Node:&nbsp;<a name="Top">Top</a>,
@@ -44,14 +44,14 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<br>
</div>
-<h2 class="unnumbered">Porting libstdc++-v3</h2>
+<h2 class="unnumbered">Porting libstdc++</h2>
-<p>This document explains how to port libstdc++-v3 (the GNU C++ library) to
+<p>This document explains how to port libstdc++ (the GNU C++ library) to
a new target.
- <p>In order to make the GNU C++ library (libstdc++-v3) work with a new
+ <p>In order to make the GNU C++ library (libstdc++) 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
+header files. Unless this is done, libstdc++ will use generic
settings which may not be correct for your target; even if they are
correct, they will likely be inefficient.
@@ -115,7 +115,7 @@ OS portion of the triplet (the default), then nothing needs to be changed.
<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
+ <p>Several libstdc++ 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
@@ -130,7 +130,7 @@ need to define. You will need to add them to the
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
+ <p>At this time, there are a few libstdc++-specific macros which may be
defined:
<p><code>_GLIBCXX_USE_C99_CHECK</code> may be defined to 1 to check C99
@@ -233,7 +233,7 @@ character classification, analogous to that provided by the C libraries
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
+some very basic information about character classification. The libstdc++
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
@@ -530,7 +530,7 @@ 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
+ <p>Some parts of the libstdc++ 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,
@@ -542,7 +542,7 @@ 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
+ <p>The libstdc++ 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>.
@@ -974,7 +974,7 @@ 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_Top" href="#Top">Porting libstdc++</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>
diff --git a/libstdc++-v3/docs/html/17_intro/tr1_status.html b/libstdc++-v3/docs/html/17_intro/tr1_status.html
new file mode 100644
index 00000000000..3d3d673cf89
--- /dev/null
+++ b/libstdc++-v3/docs/html/17_intro/tr1_status.html
@@ -0,0 +1,2322 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "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" />
+ <link rev="made" href="mailto:gcc@gcc.gnu.org" />
+ <link rel="shortcut icon" href="http://gcc.gnu.org/favicon.ico" />
+
+ <title>
+ Status of TR1 features in GCC
+ - GNU Project - Free Software Foundation (FSF)
+ </title>
+
+</head>
+
+<body>
+
+<h1 align="center">
+ Status of TR1 features in GCC
+</h1>
+
+<p>
+This table is based on the table of contents of ISO/IEC DTR 19768
+Doc No: N1836=05-0096 Date: 2005-06-24
+Draft Technical Report on C++ Library Extensions
+</p>
+
+<p>
+In this implementation the header names are prefixed by
+<code>tr1/</code>, for instance <code>&lt;tr1/functional&gt;</code>,
+<code>&lt;tr1/memory&gt;</code>, and so on.
+</p>
+
+<p>
+This page describes the TR1 support in mainline GCC SVN, not in any particular
+release.
+</p>
+
+<table border="1">
+ <thead>
+ <tr>
+ <td><span style="font-weight: bold;">Section</span></td>
+ <td><span style="font-weight: bold;">Description</span></td>
+ <td><span style="font-weight: bold;">Done</span></td>
+ <td><span style="font-weight: bold;">Broken</span></td>
+ <td><span style="font-weight: bold;">Missing</span></td>
+ <td><span style="font-weight: bold;">Comments</span></td>
+ </tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td><b>2</b></td>
+ <td colspan="5"><b>General Utilities</b></td>
+ </tr>
+ <tr>
+ <td>2.1</td>
+ <td>Reference wrappers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.1.1</td>
+ <td>Additions to header <code>&lt;functional&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.1.2</td>
+ <td>Class template <code>reference_wrapper</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.1.2.1</td>
+ <td><code>reference_wrapper</code> construct/copy/destroy</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.1.2.2</td>
+ <td><code>reference_wrapper</code> assignment</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.1.2.3</td>
+ <td><code>reference_wrapper</code> access</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.1.2.4</td>
+ <td><code>reference_wrapper</code> invocation</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.1.2.5</td>
+ <td><code>reference_wrapper</code> helper functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2</td>
+ <td>Smart pointers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.1</td>
+ <td>Additions to header <code>&lt;memory&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.2</td>
+ <td>Class <code>bad_weak_ptr</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.3</td>
+ <td>Class template <code>shared_ptr</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td><a href="tr1.html#1">1</a></td>
+ </tr>
+ <tr>
+ <td>2.2.3.1</td>
+ <td><code>shared_ptr</code> constructors</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.3.2</td>
+ <td><code>shared_ptr</code> destructor</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.3.3</td>
+ <td><code>shared_ptr</code> assignment</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.3.4</td>
+ <td><code>shared_ptr</code> modifiers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.3.5</td>
+ <td><code>shared_ptr</code> observers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.3.6</td>
+ <td><code>shared_ptr</code> comparison</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.3.7</td>
+ <td><code>shared_ptr</code> I/O</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.3.8</td>
+ <td><code>shared_ptr</code> specialized algorithms</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.3.9</td>
+ <td><code>shared_ptr</code> casts</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.3.10</td>
+ <td><code>get_deleter</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.4</td>
+ <td>Class template <code>weak_ptr</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.4.1</td>
+ <td><code>weak_ptr</code> constructors</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.4.2</td>
+ <td><code>weak_ptr</code> destructor</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.4.3</td>
+ <td><code>weak_ptr</code> assignment</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.4.4</td>
+ <td><code>weak_ptr</code> modifiers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.4.5</td>
+ <td><code>weak_ptr</code> observers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.4.6</td>
+ <td><code>weak_ptr</code> comparison</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.4.7</td>
+ <td><code>weak_ptr</code> specialized algorithms</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>2.2.5</td>
+ <td>Class template <code>enable_shared_from_this</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><b>3</b></td>
+ <td colspan="5"><b>Function objects</b></td>
+ </tr>
+ <tr>
+ <td>3.1</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.2</td>
+ <td>Additions to <code>&lt;functional&gt; synopsis</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.3</td>
+ <td>Requirements</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.4</td>
+ <td>Function return types</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.5</td>
+ <td>Function template <code>mem_fn</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.6</td>
+ <td>Function object binders</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.6.1</td>
+ <td>Class template <code>is_bind_expression</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.6.2</td>
+ <td>Class template <code>is_placeholder</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.6.3</td>
+ <td>Function template <code>bind</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.6.4</td>
+ <td>Placeholders</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.7</td>
+ <td>Polymorphic function wrappers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.7.1</td>
+ <td>Class <code>bad_function_call<code></code></code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.7.1.1</td>
+ <td><code>bad_function_call</code> constructor</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.7.2</td>
+ <td>Class template <code>function</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.7.2.1</td>
+ <td><code>function</code> construct/copy/destroy</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.7.2.2</td>
+ <td><code>function</code> modifiers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.7.2.3</td>
+ <td><code>function</code> capacity</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.7.2.4</td>
+ <td><code>function</code> invocation</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.7.2.5</td>
+ <td><code>function</code> target access</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.7.2.6</td>
+ <td>undefined operators</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.7.2.7</td>
+ <td>null pointer comparison operators</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>3.7.2.8</td>
+ <td>specialized algorithms</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><b>4</b></td>
+ <td colspan="5"><b>Metaprogramming and type traits</b></td>
+ </tr>
+ <tr>
+ <td>4.1</td>
+ <td>Requirements</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.2</td>
+ <td>Header <code>&lt;type_traits&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.3</td>
+ <td>Helper classes</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.4</td>
+ <td>General Requirements</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.5</td>
+ <td>Unary Type Traits</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.5.1</td>
+ <td>Primary Type Categories</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.5.2</td>
+ <td>Composite type traits</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.5.3</td>
+ <td>Type properties</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.6</td>
+ <td>Relationships between types</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.7</td>
+ <td>Transformations between types</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.7.1</td>
+ <td>Const-volatile modifications</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.7.2</td>
+ <td>Reference modifications</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.7.3</td>
+ <td>Array modifications</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.7.4</td>
+ <td>Pointer modifications</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.8</td>
+ <td>Other transformations</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>4.9</td>
+ <td>Implementation requirements</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><b>5</b></td>
+ <td colspan="5"><b>Numerical facilities</b></td>
+ </tr>
+ <tr>
+ <td>5.1</td>
+ <td>Random number generation</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.1</td>
+ <td>Requirements</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.2</td>
+ <td>Header <code>&lt;random&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.3</td>
+ <td>Class template <code>variate_generator</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.4</td>
+ <td>Random number engine class templates</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.4.1</td>
+ <td>Class template <code>linear_congruential</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.4.2</td>
+ <td>Class template <code>mersenne_twister</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.4.3</td>
+ <td>Class template <code>subtract_with_carry</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.4.4</td>
+ <td>Class template <code>subtract_with_carry_01</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.4.5</td>
+ <td>Class template <code>discard_block</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.4.6</td>
+ <td>Class template <code>xor_combine</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>operator()() per N2079</td>
+ </tr>
+ <tr>
+ <td>5.1.5</td>
+ <td>Engines with predefined parameters</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.6</td>
+ <td>Class <code>random_device</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.7</td>
+ <td>Random distribution class templates</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.7.1</td>
+ <td>Class template <code>uniform_int</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.7.2</td>
+ <td>Class <code>bernoulli_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.7.3</td>
+ <td>Class template <code>geometric_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.7.4</td>
+ <td>Class template <code>poisson_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.7.5</td>
+ <td>Class template <code>binomial_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.7.6</td>
+ <td>Class template <code>uniform_real</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.7.7</td>
+ <td>Class template <code>exponential_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.7.8</td>
+ <td>Class template <code>normal_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.1.7.9</td>
+ <td>Class template <code>gamma_distribution</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2</td>
+ <td>Mathematical special functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1</td>
+ <td>Additions to header <code>&lt;cmath&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.1</td>
+ <td>associated Laguerre polynomials</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.2</td>
+ <td>associated Legendre functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.3</td>
+ <td>beta function</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.4</td>
+ <td>(complete) elliptic integral of the first kind</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.5</td>
+ <td>(complete) elliptic integral of the second kind</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.6</td>
+ <td>(complete) elliptic integral of the third kind</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.7</td>
+ <td>confluent hypergeometric functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.8</td>
+ <td>regular modified cylindrical Bessel functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.9</td>
+ <td>cylindrical Bessel functions (of the first kind)</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.10</td>
+ <td>irregular modified cylindrical Bessel functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.11</td>
+ <td>cylindrical Neumann functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.12</td>
+ <td>(incomplete) elliptic integral of the first kind</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.13</td>
+ <td>(incomplete) elliptic integral of the second kind</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.14</td>
+ <td>(incomplete) elliptic integral of the third kind</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.15</td>
+ <td>exponential integral</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.16</td>
+ <td>Hermite polynomials</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.17</td>
+ <td>hypergeometric functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.18</td>
+ <td>Laguerre polynomials</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.19</td>
+ <td>Legendre polynomials</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.20</td>
+ <td>Riemann zeta function</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.21</td>
+ <td>spherical Bessel functions (of the first kind)</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.22</td>
+ <td>spherical associated Legendre functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.1.23</td>
+ <td>spherical Neumann functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>5.2.2</td>
+ <td>Additions to header <code>&lt;math.h&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><b>6</b></td>
+ <td colspan="5"><b>Containers</b></td>
+ </tr>
+ <tr>
+ <td>6.1</td>
+ <td>Tuple types</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.1.1</td>
+ <td>Header <code>&lt;tuple&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.1.2</td>
+ <td>Additions to header <code>&lt;utility&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.1.3</td>
+ <td>Class template <code>tuple</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.1.3.1</td>
+ <td>Construction</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.1.3.2</td>
+ <td>Tuple creation functions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.1.3.3</td>
+ <td>Tuple helper classes</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.1.3.4</td>
+ <td>Element access</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.1.3.5</td>
+ <td>Relational operators</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.1.4</td>
+ <td>Pairs</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.2</td>
+ <td>Fixed size array</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.2.1</td>
+ <td>Header <code>&lt;array&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.2.2</td>
+ <td>Class template <code>array</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.2.2.1</td>
+ <td><code>array</code> constructors, copy, and assignment</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.2.2.2</td>
+ <td><code>array</code> specialized algorithms</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.2.2.3</td>
+ <td><code>array</code> size</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.2.2.4</td>
+ <td>Zero sized <code>array</code>s</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.2.2.5</td>
+ <td>Tuple interface to class template <code>array</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3</td>
+ <td>Unordered associative containers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.1</td>
+ <td>Unordered associative container requirements</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.1.1</td>
+ <td>Exception safety guarantees</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.2</td>
+ <td>Additions to header <code>&lt;functional&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.3</td>
+ <td>Class template <code>hash</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4</td>
+ <td>Unordered associative container classes</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.1</td>
+ <td>Header <code>&lt;unordered_set&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.2</td>
+ <td>Header <code>&lt;unordered_map&gt;</code> synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.3</td>
+ <td>Class template <code>unordered_set</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.3.1</td>
+ <td><code>unordered_set</code> constructors</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.3.2</td>
+ <td><code>unordered_set</code> swap</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.4</td>
+ <td>Class template <code>unordered_map</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.4.1</td>
+ <td><code>unordered_map</code> constructors</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.4.2</td>
+ <td><code>unordered_map</code> element access</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.4.3</td>
+ <td><code>unordered_map</code> swap</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.5</td>
+ <td>Class template <code>unordered_multiset<code></code></code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.5.1</td>
+ <td><code>unordered_multiset</code> constructors</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.5.2</td>
+ <td><code>unordered_multiset</code> swap</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.6</td>
+ <td>Class template <code>unordered_multimap</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.6.1</td>
+ <td><code>unordered_multimap</code> constructors</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>6.3.4.6.2</td>
+ <td><code>unordered_multimap</code> swap</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><b>7</b></td>
+ <td colspan="5"><b>Regular expressions</b></td>
+ </tr>
+ <tr>
+ <td>7.1</td>
+ <td>Definitions</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.2</td>
+ <td>Requirements</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.3</td>
+ <td>Regular expressions summary</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.4</td>
+ <td>Header <code>&lt;regex&gt;</code> synopsis</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.5</td>
+ <td>Namespace <code>tr1::regex_constants</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.5.1</td>
+ <td>Bitmask Type <code>syntax_option_type</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.5.2</td>
+ <td>Bitmask Type <code>regex_constants::match_flag_type</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.5.3</td>
+ <td>Implementation defined <code>error_type</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.6</td>
+ <td>Class <code>regex_error</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.7</td>
+ <td>Class template <code>regex_traits</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.8</td>
+ <td>Class template <code>basic_regex</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.8.1</td>
+ <td><code>basic_regex</code> constants</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.8.2</td>
+ <td><code>basic_regex</code> constructors</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.8.3</td>
+ <td><code>basic_regex</code> assign</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.8.4</td>
+ <td><code>basic_regex</code> constant operations</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.8.5</td>
+ <td><code>basic_regex</code> locale</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.8.6</td>
+ <td><code>basic_regex</code> swap</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.8.7</td>
+ <td><code>basic_regex</code> non-member functions</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.8.7.1</td>
+ <td><code>basic_regex</code> non-member swap</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.9</td>
+ <td>Class template <code>sub_match</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.9.1</td>
+ <td><code>sub_match</code> members</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.9.2</td>
+ <td><code>sub_match</code> non-member operators</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.10</td>
+ <td>Class template <code>match_results</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.10.1</td>
+ <td><code>match_results</code> constructors</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.10.2</td>
+ <td><code>match_results</code> size</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.10.3</td>
+ <td><code>match_results</code> element access</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.10.4</td>
+ <td><code>match_results</code> formatting</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.10.5</td>
+ <td><code>match_results</code> allocator</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.10.6</td>
+ <td><code>match_results</code> swap</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.11</td>
+ <td>Regular expression algorithms</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.11.1</td>
+ <td>exceptions</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.11.2</td>
+ <td><code>regex_match</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.11.3</td>
+ <td><code>regex_search</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.11.4</td>
+ <td><code>regex_replace</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.12</td>
+ <td>Regular expression Iterators</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.12.1</td>
+ <td>Class template <code>regex_iterator</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.12.1.1</td>
+ <td><code>regex_iterator</code> constructors</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.12.1.2</td>
+ <td><code>regex_iterator</code> comparisons</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.12.1.3</td>
+ <td><code>regex_iterator</code> dereference</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.12.1.4</td>
+ <td><code>regex_iterator</code> increment</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.12.2</td>
+ <td>Class template <code>regex_token_iterator</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.12.2.1</td>
+ <td><code>regex_token_iterator</code> constructors</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.12.2.2</td>
+ <td><code>regex_token_iterator</code> comparisons</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.12.2.3</td>
+ <td><code>regex_token_iterator</code> dereference</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.12.2.4</td>
+ <td><code>regex_token_iterator</code> increment</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>7.13</td>
+ <td>Modified ECMAScript regular expression grammar</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><b>8</b></td>
+ <td colspan="5"><b>C compatibility</b></td>
+ </tr>
+ <tr>
+ <td>8.1</td>
+ <td>Additions to header <code>&lt;complex&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.1.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.1.2</td>
+ <td>Function <code>acos</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.1.3</td>
+ <td>Function <code>asin</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.1.4</td>
+ <td>Function <code>atan</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.1.5</td>
+ <td>Function <code>acosh</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.1.6</td>
+ <td>Function <code>asinh</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.1.7</td>
+ <td>Function <code>atanh</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.1.8</td>
+ <td>Function <code>fabs</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.1.9</td>
+ <td>Additional Overloads</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.2</td>
+ <td>Header <code>&lt;ccomplex&gt;</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td>DR 551</td>
+ </tr>
+ <tr>
+ <td>8.3</td>
+ <td>Header <code>&lt;complex.h&gt;</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td>DR 551</td>
+ </tr>
+ <tr>
+ <td>8.4</td>
+ <td>Additions to header <code>&lt;cctype&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.4.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.4.2</td>
+ <td>Function <code>isblank</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.5</td>
+ <td>Additions to header <code>&lt;ctype.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.6</td>
+ <td>Header <code>&lt;cfenv&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.6.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.6.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.7</td>
+ <td>Header <code>&lt;fenv.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.8</td>
+ <td>Additions to header <code>&lt;cfloat&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.9</td>
+ <td>Additions to header <code>&lt;float.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.10</td>
+ <td>Additions to header <code>&lt;ios&gt;</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.10.1</td>
+ <td>Synopsis</td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.10.2</td>
+ <td>Function <code>hexfloat</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.11</td>
+ <td>Header <code>&lt;cinttypes&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.11.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>DR 557</td>
+ </tr>
+ <tr>
+ <td>8.11.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.12</td>
+ <td>Header <code>&lt;inttypes.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.13</td>
+ <td>Additions to header <code>&lt;climits&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.14</td>
+ <td>Additions to header <code>&lt;limits.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.15</td>
+ <td>Additions to header <code>&lt;locale&gt;</code></td>
+ <td></td>
+ <td></td>
+ <td>missing</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.16</td>
+ <td>Additions to header <code>&lt;cmath&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.16.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.16.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.16.3</td>
+ <td>Function template definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.16.4</td>
+ <td>Additional overloads</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>DR 568; DR 550</td>
+ </tr>
+ <tr>
+ <td>8.17</td>
+ <td>Additions to header <code>&lt;math.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.18</td>
+ <td>Additions to header <code>&lt;cstdarg&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.19</td>
+ <td>Additions to header <code>&lt;stdarg.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.20</td>
+ <td>The header <code>&lt;cstdbool&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.21</td>
+ <td>The header <code>&lt;stdbool.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.22</td>
+ <td>The header <code>&lt;cstdint&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.22.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.22.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.23</td>
+ <td>The header <code>&lt;stdint.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.24</td>
+ <td>Additions to header <code>&lt;cstdio&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.24.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.24.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.24.3</td>
+ <td>Additional format specifiers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>C library responsibility</td>
+ </tr>
+ <tr>
+ <td>8.24.4</td>
+ <td>Additions to header <code>&lt;stdio.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.25</td>
+ <td>Additions to header <code>&lt;cstdlib&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.25.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.25.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.25.3</td>
+ <td>Function <code>abs</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.25.4</td>
+ <td>Function <code>div</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.26</td>
+ <td>Additions to header <code>&lt;stdlib.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.27</td>
+ <td>Header <code>&lt;ctgmath&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>DR 551</td>
+ </tr>
+ <tr>
+ <td>8.28</td>
+ <td>Header <code>&lt;tgmath.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>DR 551</td>
+ </tr>
+ <tr>
+ <td>8.29</td>
+ <td>Additions to header <code>&lt;ctime&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>C library responsibility</td>
+ </tr>
+ <tr>
+ <td>8.30</td>
+ <td>Additions to header <code>&lt;cwchar&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.30.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.30.2</td>
+ <td>Definitions</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.30.3</td>
+ <td>Additional wide format specifiers</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td>C library responsibility</td>
+ </tr>
+ <tr>
+ <td>8.31</td>
+ <td>Additions to header <code>&lt;wchar.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.32</td>
+ <td>Additions to header <code>&lt;cwctype&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.32.1</td>
+ <td>Synopsis</td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.32.2</td>
+ <td>Function <code>iswblank</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>8.33</td>
+ <td>Additions to header <code>&lt;wctype.h&gt;</code></td>
+ <td>done</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h3>Footnotes</h3>
+
+<ol>
+
+ <li>
+ <a name="1"/>
+ The shared_ptr implementation uses some code from the
+ <a href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">Boost
+ shared_ptr</a> library.
+ </li>
+
+</ol>
+
+<p>
+Please send FSF &amp; GNU inquiries &amp; questions to
+<a href="mailto:gnu@gnu.org">gnu@gnu.org</a>.
+There are also <a href="http://www.gnu.org/home.html#ContactInfo">other ways
+to contact</a> the FSF.
+</p>
+
+<p>
+These pages are maintained by
+<a href="http://gcc.gnu.org/about.html">the GCC team</a>.
+</p>
+
+<address>
+For questions related to the use of GCC, please consult these web
+pages and the <a href="http://gcc.gnu.org/onlinedocs/">GCC manuals</a>. If
+that fails, the <a href="mailto:gcc-help@gcc.gnu.org">gcc-help@gcc.gnu.org</a>
+mailing list might help.<br />
+Please send comments on these web pages and the development of GCC to our
+developer mailing list at <a href="mailto:gcc@gnu.org">gcc@gnu.org</a>
+or <a href="mailto:gcc@gcc.gnu.org">gcc@gcc.gnu.org</a>. All of our lists
+have <a href="http://gcc.gnu.org/lists.html">public archives</a>.
+</address>
+
+<p>
+Copyright (C) Free Software Foundation, Inc.,
+51 Franklin St, Fifth Floor, Boston, MA 02110, USA.
+</p>
+<p>
+Verbatim copying and distribution of this entire article is
+permitted in any medium, provided this notice is preserved.
+</p>
+
+<table width="100%" border="0">
+<tr>
+ <td>
+ <!-- IGNORE DIFF -->Last modified 2006-10-01
+ </td>
+ <td align="right" valign="bottom">
+ <a href="http://validator.w3.org/check/referer">
+ <img src="http://www.w3.org/Icons/valid-xhtml10"
+ alt="Valid XHTML 1.0" border="0" width="88" height="31" />
+ </a>
+ </td>
+</tr>
+</table>
+
+</body>
+</html>
OpenPOWER on IntegriCloud