diff options
Diffstat (limited to 'libstdc++-v3/docs/html/17_intro')
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/BUGS | 28 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/HEADER_POLICY | 164 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/PROBLEMS | 8 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/RELEASE-NOTES | 83 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/abi.html | 991 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/api.html | 596 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/c++0x_status.html | 2280 | ||||
| -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.diff | 382 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/configury.html | 4 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/headers_cc.txt | 83 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/howto.html | 334 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/license.html | 4 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/porting-howto.html | 744 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/porting.html | 26 | ||||
| -rw-r--r-- | libstdc++-v3/docs/html/17_intro/tr1_status.html | 2322 |
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>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 <iostream> + +int main() +{ std::cout << "hello" << std::endl; return 0; } + +%g++ hello.cc -o hello.out + +%ldd hello.out + libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x00764000) + libm.so.6 => /lib/tls/libm.so.6 (0x004a8000) + libgcc_s.so.1 => /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40016000) + libc.so.6 => /lib/tls/libc.so.6 (0x0036d000) + /lib/ld-linux.so.2 => /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 => /usr/lib/libstdc++.so.6 (0x40016000) + libm.so.6 => /lib/tls/libm.so.6 (0x400fa000) + libgcc_s.so.1 => /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x4011c000) + libc.so.6 => /lib/tls/libc.so.6 (0x40125000) + /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x00355000) + +%ldd libtwo.so.1.0.0 + libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x40027000) + libm.so.6 => /lib/tls/libm.so.6 (0x400e1000) + libgcc_s.so.1 => /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40103000) + libc.so.6 => /lib/tls/libc.so.6 (0x4010c000) + /lib/ld-linux.so.2 => /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 => /usr/lib/libstdc++.so.5 (0x00764000) + libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x40015000) + libc.so.6 => /lib/tls/libc.so.6 (0x0036d000) + libm.so.6 => /lib/tls/libm.so.6 (0x004a8000) + libgcc_s.so.1 => /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x400e5000) + /lib/ld-linux.so.2 => /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&a=load">http://docs.sun.com/?p=/doc/816-1386&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><fstream.h></tt>, + <tt><ostream.h></tt> + and <tt><istream.h></tt> + used to define + <code>cout</code>, <code>cin</code> and so on. ISO C++ specifies that one needs to include + <tt><iostream></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 "" or "std" 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<<(iterator)</code> to print the + address of the iterator => use <code>operator<< + &*iterator</code> instead ? + </p></li> +<li><p>you cannot clear an iterator's reference + (<code>iterator = 0</code>) => use + <code>iterator = iterator_type();</code> ? + </p></li> +<li><p> +<code>if (iterator)</code> won't work any + more => use <code>if (iterator != iterator_type())</code> + ?</p></li> +</ul> + +<h5><code>isspace</code> from <tt><cctype></tt> is a macro +</h5> + +<p> Glibc 2.0.x and 2.1.x define <tt><ctype.h></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 <cctype> +int main() { std::isspace('X'); } +</pre> + +<p>Results in something like this: +</p> + +<pre> +std:: (__ctype_b[(int) ( ( 'X' ) )] & (unsigned short int) _ISspace ) ; +</pre> + + +<p> A solution is to modify a header-file so that the compiler tells +<tt><ctype.h></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 <ctype.h> +</p> + +<p> +Another problem arises if you put a <code>using namespace std;</code> +declaration at the top, and include <tt><ctype.h></tt>. This +will result in ambiguities between the definitions in the global +namespace (<tt><ctype.h></tt>) and the definitions in namespace +<code>std::</code> (<code><cctype></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 <vector> +#include <deque> +#include <string> + +using namespace std; +], +[ +deque<int> test_deque(3); +test_deque.at(2); +vector<int> test_vector(2); +test_vector.at(1); +string test_string("test_string"); +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<char>::eof</code></h5> + +<p> +Use some kind of autoconf test, plus this: +</p> +<pre> +#ifdef HAVE_CHAR_TRAITS +#define CPP_EOF std::char_traits<char>::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->size(), 0); } + </pre> + <pre class="programlisting"> + basic_string& + erase(size_type __pos = 0, size_type __n = npos) + { + return this->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><sstream></tt>), but for compatibility + with older implementations you still have to use + <code>i/ostrstream</code> (<tt><strstream></tt>): + <pre > + #ifdef HAVE_SSTREAM + #include <sstream> + #else + #include <strstream> + #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 << "Name=" << m_name << ", number=" << m_number << std::endl; + ... + #ifndef HAVE_SSTREAM + oss << 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 >> i; +</pre> + +<p> One (the only?) restriction is that an istrstream cannot be re-filled: +</p> + +<pre > +std::istringstream iss(numerator); +iss >> m_num; +// this is not possible with istrstream +iss.clear(); +iss.str(denominator); +iss >> m_den; + </pre> + +<p> +If you don't care about speed, you can put these conversions in + a template-function: +</p> +<pre > +template <class X> +void fromString(const string& input, X& any) +{ +#ifdef HAVE_SSTREAM +std::istringstream iss(input); +#else +std::istrstream iss(input.c_str()); +#endif +X temp; +iss >> 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 "info iostream". +</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, "nocreate" 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<..></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><ext/stdio_filebuf.h></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><tuple></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><type_traits></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><functional></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><memory></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><array></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><random></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><regex></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><complex></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><ccomplex></code></td> + <td></td> + <td></td> + <td>missing</td> + <td>DR 551</td> + </tr> + <tr> + <td>C2.3</td> + <td>Header <code><complex.h></code></td> + <td></td> + <td></td> + <td>missing</td> + <td>DR 551</td> + </tr> + <tr> + <td>C2.4</td> + <td>Additions to header <code><cctype></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><ctype.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.6</td> + <td>Header <code><cfenv></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><fenv.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.8</td> + <td>Additions to header <code><cfloat></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.9</td> + <td>Additions to header <code><float.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.10</td> + <td>Additions to header <code><ios></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><cinttypes></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><inttypes.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.13</td> + <td>Additions to header <code><climits></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.14</td> + <td>Additions to header <code><limits.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.15</td> + <td>Additions to header <code><locale></code></td> + <td></td> + <td></td> + <td>missing</td> + <td></td> + </tr> + <tr> + <td>C2.16</td> + <td>Additions to header <code><cmath></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><math.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.18</td> + <td>Additions to header <code><cstdarg></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.19</td> + <td>Additions to header <code><stdarg.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.20</td> + <td>The header <code><cstdbool></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.21</td> + <td>The header <code><stdbool.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.22</td> + <td>The header <code><cstdint></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><stdint.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.24</td> + <td>Additions to header <code><cstdio></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><stdio.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.25</td> + <td>Additions to header <code><cstdlib></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><stdlib.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.27</td> + <td>Header <code><ctgmath></code></td> + <td>done</td> + <td></td> + <td></td> + <td>DR 551</td> + </tr> + <tr> + <td>C2.28</td> + <td>Header <code><tgmath.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td>DR 551</td> + </tr> + <tr> + <td>C2.29</td> + <td>Additions to header <code><ctime></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><cwchar></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><wchar.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>C2.32</td> + <td>Additions to header <code><cwctype></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><wctype.h></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 & GNU inquiries & 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><foo></code> vs <code><foo.h></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 "files" 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><math.h></tt>, you + should use <tt><cmath></tt>. In some cases this has + the advantage that the C++-header is more standardized than + the C-header (i.e. <tt><ctime></tt> (almost) + corresponds to either <tt><time.h></tt> or <tt><sys/time.h></tt>). + + The standard specifies that if you include the C-style header + (<tt><math.h></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><cmath></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 ("shadow") 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 "" or i.e. <code>using + std::string;</code> (depending on whether the system has + libstdc++ in <code>std::</code> or not). (ideas from + <tt><<a href="mailto:llewelly@dbritsch.dsl.xmission.com">llewelly@dbritsch.dsl.xmission.com</a>></tt>, Karl Nelson + <tt><<a href="mailto:kenelson@ece.ucdavis.edu">kenelson@ece.ucdavis.edu</a>></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><foo></code> vs <code><foo.h></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. "Configurable" - (or "Not configurable") 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>"Configurable" (or "Not configurable") 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> "ABI" 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 "runtime exception," 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 <link>-tags to have content - (so that these links work), - replace "user-space" by "global namespace" - 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"> - <fstream> 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 - <cctype>)</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<char>::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 "portable among ISO - 14882-implementations". On the other hand, if I say "backportable" or - "conservative", I am talking about "compiles with older - libstdc++-implementations". - </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> => 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>) => 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>) => 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 "" or i.e. <b>using - std::string;</b> (depending on whether the system has - libstdc++ in <b>std::</b> or not). (ideas from - <tt><<a href="mailto:llewelly@dbritsch.dsl.xmission.com">llewelly@dbritsch.dsl.xmission.com</a>></tt>, Karl Nelson - <tt><<a href="mailto:kenelson@ece.ucdavis.edu">kenelson@ece.ucdavis.edu</a>></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 "hack" 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 "" or "std" - based on an autoconf-test. Then you should be able to use - <b>NS_STD::string</b>, which will evaluate to - <b>::string</b> ("string in the global namespace") 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 "explicitly". So you can simply - leave it out for input-streams. - </p> -<p> - For output streams, "nocreate" 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><<a href="mailto:pedwards@disaster.jaj.com">pedwards@disaster.jaj.com</a>></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<..></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><ext/stdio_filebuf.h></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><math.h></tt>, you - should use <tt><cmath></tt>. In some cases this has - the advantage that the C++-header is more standardized than - the C-header (i.e. <tt><ctime></tt> (almost) - corresponds to either <tt><time.h></tt> or <tt><sys/time.h></tt>). - - The standard specifies that if you include the C-style header - (<tt><math.h></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><cmath></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 ("shadow") 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><fstream></tt> does - not define <b>std::cout</b>, - <b>std::cin</b> etc.</h3></div></div> -<p> - In earlier versions of the standard, - <tt><fstream.h></tt>, - <tt><ostream.h></tt> - and <tt><istream.h></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><iostream></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<<(iterator)</b> to - print the address of the iterator => use - <b>operator<< &*iterator</b> instead ? - </p></li> -<li><p>you cannot clear an iterator's reference - (<b>iterator = 0</b>) => use - <b>iterator = iterator_type();</b> ? - </p></li> -<li><p> -<b>if (iterator)</b> won't work any - more => 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><cctype></tt>)</h2></div></div> -<p> - Glibc 2.0.x and 2.1.x define the - <tt><ctype.h></tt> - -functionality as macros (isspace, isalpha etc.). Libstdc++-v3 - "shadows" 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 <cctype> - int main() { std::isspace('X'); } - </pre> - will result in something like this (unless using g++-v3): - <pre class="programlisting"> - std:: (__ctype_b[(int) ( ( 'X' ) )] & (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 "wrapper" 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><ctype.h></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 <ctype.h> ] - </pre> -<p> - Another problem arises if you put a <b>using namespace - std;</b> declaration at the top, and include <tt><ctype.h></tt>. This will result in - ambiguities between the definitions in the global namespace - (<tt><ctype.h></tt>) and the - definitions in namespace <b>std::</b> - (<b><cctype></b>). - </p> -<p> - The solution to this problem was posted to the libstdc++-v3 - mailing-list: - Benjamin Kosnik <tt><<a href="mailto:bkoz@redhat.com">bkoz@redhat.com</a>></tt> writes: - ‘ - --enable-cshadow-headers is currently broken. As a result, shadow - headers are not being searched.... - ’ - This is now outdated, but gcc 3.0 still does not have fully - compliant "shadow headers". - </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 <vector> - #include <deque> - #include <string> - - using namespace std; - ], - [ - deque<int> test_deque(3); - test_deque.at(2); - vector<int> test_vector(2); - test_vector.at(1); - string test_string("test_string"); - 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<char>::eof()</h2></div></div> -<p> - <pre class="programlisting"> - #ifdef HAVE_CHAR_TRAITS - #define CPP_EOF std::char_traits<char>::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->size(), 0); } - </pre> - <pre class="programlisting"> - basic_string& - erase(size_type __pos = 0, size_type __n = npos) - { - return this->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><sstream></tt>), but for compatibility - with older implementations you still have to use - <b>i/ostrstream</b> (<tt><strstream></tt>): - <pre class="programlisting"> - #ifdef HAVE_SSTREAM - #include <sstream> - #else - #include <strstream> - #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 << "Name=" << m_name << ", number=" << m_number << std::endl; - ... - #ifndef HAVE_SSTREAM - oss << 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 >> i; - </pre> - One (the only?) restriction is that an istrstream cannot be re-filled: - <pre class="programlisting"> - std::istringstream iss(numerator); - iss >> m_num; - // this is not possible with istrstream - iss.clear(); - iss.str(denominator); - iss >> m_den; - </pre> - If you don't care about speed, you can put these conversions in - a template-function: - <pre class="programlisting"> - template <class X> - void fromString(const string& input, X& any) - { - #ifdef HAVE_SSTREAM - std::istringstream iss(input); - #else - std::istrstream iss(input.c_str()); - #endif - X temp; - iss >> 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 - "info iostream", 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 © 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: <a name="Top">Top</a>, @@ -44,14 +44,14 @@ Up: <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><ctype.h></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><tr1/functional></code>, +<code><tr1/memory></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><functional></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><memory></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><functional> 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><type_traits></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><random></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><cmath></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><math.h></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><tuple></code> synopsis</td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>6.1.2</td> + <td>Additions to header <code><utility></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><array></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><functional></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><unordered_set></code> synopsis</td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>6.3.4.2</td> + <td>Header <code><unordered_map></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><regex></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><complex></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><ccomplex></code></td> + <td></td> + <td></td> + <td>missing</td> + <td>DR 551</td> + </tr> + <tr> + <td>8.3</td> + <td>Header <code><complex.h></code></td> + <td></td> + <td></td> + <td>missing</td> + <td>DR 551</td> + </tr> + <tr> + <td>8.4</td> + <td>Additions to header <code><cctype></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><ctype.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.6</td> + <td>Header <code><cfenv></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><fenv.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.8</td> + <td>Additions to header <code><cfloat></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.9</td> + <td>Additions to header <code><float.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.10</td> + <td>Additions to header <code><ios></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><cinttypes></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><inttypes.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.13</td> + <td>Additions to header <code><climits></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.14</td> + <td>Additions to header <code><limits.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.15</td> + <td>Additions to header <code><locale></code></td> + <td></td> + <td></td> + <td>missing</td> + <td></td> + </tr> + <tr> + <td>8.16</td> + <td>Additions to header <code><cmath></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><math.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.18</td> + <td>Additions to header <code><cstdarg></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.19</td> + <td>Additions to header <code><stdarg.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.20</td> + <td>The header <code><cstdbool></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.21</td> + <td>The header <code><stdbool.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.22</td> + <td>The header <code><cstdint></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><stdint.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.24</td> + <td>Additions to header <code><cstdio></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><stdio.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.25</td> + <td>Additions to header <code><cstdlib></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><stdlib.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.27</td> + <td>Header <code><ctgmath></code></td> + <td>done</td> + <td></td> + <td></td> + <td>DR 551</td> + </tr> + <tr> + <td>8.28</td> + <td>Header <code><tgmath.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td>DR 551</td> + </tr> + <tr> + <td>8.29</td> + <td>Additions to header <code><ctime></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><cwchar></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><wchar.h></code></td> + <td>done</td> + <td></td> + <td></td> + <td></td> + </tr> + <tr> + <td>8.32</td> + <td>Additions to header <code><cwctype></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><wctype.h></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 & GNU inquiries & 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> |

