Commit 09d6794b by Benjamin Kosnik Committed by Benjamin Kosnik

class.txml: Adjust biblio markup.

2010-02-22  Benjamin Kosnik  <bkoz@redhat.com>

	* doc/xml/class.txml: Adjust biblio markup.
	* doc/xml/manual/allocator.xml: Same.
	* doc/xml/manual/ctype.xml: Same.
	* doc/xml/manual/codecvt.xml: Same.
	* doc/xml/manual/backwards_compatibility.xml: Same.
	* doc/xml/manual/abi.xml: Same.
	* doc/xml/manual/shared_ptr.xml: Same.
	* doc/xml/manual/profile_mode.xml: Same.
	* doc/xml/manual/using_exceptions.xml: Same.
	* doc/xml/manual/locale.xml: Same.
	* doc/xml/manual/appendix_contributing.xml: Same.
	* doc/xml/manual/messages.xml: Same.
	* doc/Makefile.am (DBLATEX_FLAGS): Adjust.
	* doc/Makefile.in: Regenerate.

From-SVN: r156980
parent a98c2819
2010-02-22 Benjamin Kosnik <bkoz@redhat.com>
* doc/xml/class.txml: Adjust biblio markup.
* doc/xml/manual/allocator.xml: Same.
* doc/xml/manual/ctype.xml: Same.
* doc/xml/manual/codecvt.xml: Same.
* doc/xml/manual/backwards_compatibility.xml: Same.
* doc/xml/manual/abi.xml: Same.
* doc/xml/manual/shared_ptr.xml: Same.
* doc/xml/manual/profile_mode.xml: Same.
* doc/xml/manual/using_exceptions.xml: Same.
* doc/xml/manual/locale.xml: Same.
* doc/xml/manual/appendix_contributing.xml: Same.
* doc/xml/manual/messages.xml: Same.
* doc/Makefile.am (DBLATEX_FLAGS): Adjust.
* doc/Makefile.in: Regenerate.
2010-02-22 François Dumont <francois.cppdevs@free.fr> 2010-02-22 François Dumont <francois.cppdevs@free.fr>
* doc/xml/manual/profile_mode.xml: Minor updates and fixes. * doc/xml/manual/profile_mode.xml: Minor updates and fixes.
......
...@@ -228,7 +228,7 @@ doc-pdf-prince: $(xml_sources) ${glibcxx_builddir}/doc/pdf ...@@ -228,7 +228,7 @@ doc-pdf-prince: $(xml_sources) ${glibcxx_builddir}/doc/pdf
# PDF 5 # PDF 5
# dblatex # dblatex
DBLATEX_FLAGS = --verbose --pdf -o pdf/spine.pdf DBLATEX_FLAGS = --dump --verbose --pdf -o pdf/manual.pdf
doc-pdf-dblatex: $(xml_sources) ${glibcxx_builddir}/doc/pdf doc-pdf-dblatex: $(xml_sources) ${glibcxx_builddir}/doc/pdf
@echo "Generating pdf dblatex files..." @echo "Generating pdf dblatex files..."
dblatex $(DBLATEX_FLAGS) ${top_srcdir}/doc/xml/spine.xml dblatex $(DBLATEX_FLAGS) ${top_srcdir}/doc/xml/spine.xml
......
...@@ -377,7 +377,7 @@ PRINCE_FLAGS = --log prince.log -o pdf/spine.pdf ...@@ -377,7 +377,7 @@ PRINCE_FLAGS = --log prince.log -o pdf/spine.pdf
# PDF 5 # PDF 5
# dblatex # dblatex
DBLATEX_FLAGS = --verbose --pdf -o pdf/spine.pdf DBLATEX_FLAGS = --dump --verbose --pdf -o pdf/manual.pdf
# By adding these files here, automake will remove them for 'make clean' # By adding these files here, automake will remove them for 'make clean'
CLEANFILES = *.log CLEANFILES = *.log
......
...@@ -114,8 +114,13 @@ ...@@ -114,8 +114,13 @@
<abbrev> <abbrev>
</abbrev> </abbrev>
<title> <biblioid class="uri">
</title> <ulink url="http://about:blank">
<citetitle>
The Title
</citetitle>
</ulink>
</biblioid>
<editor> <editor>
<firstname></firstname> <firstname></firstname>
...@@ -138,11 +143,6 @@ ...@@ -138,11 +143,6 @@
</publishername> </publishername>
</publisher> </publisher>
<biblioid>
<ulink url="">
</ulink>
</biblioid>
</biblioentry> </biblioentry>
--> -->
......
<sect1 id="appendix.porting.abi" xreflabel="abi"> <sect1 id="appendix.porting.abi" xreflabel="abi">
<?dbhtml filename="abi.html"?> <?dbhtml filename="abi.html"?>
<sect1info> <sect1info>
<keywordset> <keywordset>
<keyword> <keyword>
...@@ -38,14 +38,14 @@ ...@@ -38,14 +38,14 @@
perhaps also dependent on features in the C++ Standard Library. perhaps also dependent on features in the C++ Standard Library.
</para> </para>
<para> <para>
The C++ Standard Library has many include files, types defined in The C++ Standard Library has many include files, types defined in
those include files, specific named functions, and other those include files, specific named functions, and other
behavior. The text of these behaviors, as written in source include behavior. The text of these behaviors, as written in source include
files, is called the Application Programing Interface, or API. files, is called the Application Programing Interface, or API.
</para> </para>
<para> <para>
Furthermore, C++ source that is compiled into object files is Furthermore, C++ source that is compiled into object files is
transformed by the compiler: it arranges objects with specific transformed by the compiler: it arranges objects with specific
alignment and in a particular layout, mangling names according to a alignment and in a particular layout, mangling names according to a
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
for Code Generation Conventions</ulink>. for Code Generation Conventions</ulink>.
</para> </para>
<para> <para>
The configure options used when building a specific libstdc++ The configure options used when building a specific libstdc++
version may also impact the resulting library ABI. The available version may also impact the resulting library ABI. The available
configure options, and their impact on the library ABI, are configure options, and their impact on the library ABI, are
...@@ -114,7 +114,7 @@ given compiler ABI. In a nutshell: ...@@ -114,7 +114,7 @@ given compiler ABI. In a nutshell:
C++ toolchain. With each release, various details have been changed so C++ toolchain. With each release, various details have been changed so
as to give distinct versions to the C++ interface. as to give distinct versions to the C++ interface.
</para> </para>
<sect3 id="abi.versioning.goals"> <sect3 id="abi.versioning.goals">
<title>Goals</title> <title>Goals</title>
...@@ -183,9 +183,9 @@ compatible. ...@@ -183,9 +183,9 @@ compatible.
hppa-linux this is either libgcc_s.so.1 (when configuring hppa-linux this is either libgcc_s.so.1 (when configuring
<code>--with-sjlj-exceptions</code>) or libgcc_s.so.2. For all <code>--with-sjlj-exceptions</code>) or libgcc_s.so.2. For all
others, this is libgcc_s.so.1. </para> others, this is libgcc_s.so.1. </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</listitem> </listitem>
<listitem><para>Symbol versioning on the libgcc_s.so binary.</para> <listitem><para>Symbol versioning on the libgcc_s.so binary.</para>
...@@ -336,7 +336,7 @@ compatible. ...@@ -336,7 +336,7 @@ compatible.
<listitem><para>gcc-4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</para></listitem> <listitem><para>gcc-4.5.0: GLIBCXX_3.4.14, CXXABI_1.3.4</para></listitem>
</itemizedlist> </itemizedlist>
</listitem> </listitem>
<listitem> <listitem>
<para>Incremental bumping of a compiler pre-defined macro, <para>Incremental bumping of a compiler pre-defined macro,
__GXX_ABI_VERSION. This macro is defined as the version of the __GXX_ABI_VERSION. This macro is defined as the version of the
...@@ -344,7 +344,7 @@ compatible. ...@@ -344,7 +344,7 @@ compatible.
be automatically defined whenever g++ is used (the curious can be automatically defined whenever g++ is used (the curious can
test this by invoking g++ with the '-v' flag.) test this by invoking g++ with the '-v' flag.)
</para> </para>
<para> <para>
This macro was defined in the file "lang-specs.h" in the gcc/cp directory. 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 Later versions defined it in "c-common.c" in the gcc directory, and from
...@@ -652,11 +652,11 @@ int main() ...@@ -652,11 +652,11 @@ int main()
%g++ hello.cc -o hello.out %g++ hello.cc -o hello.out
%ldd hello.out %ldd hello.out
libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x00764000) libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x00764000)
libm.so.6 =&gt; /lib/tls/libm.so.6 (0x004a8000) libm.so.6 =&gt; /lib/tls/libm.so.6 (0x004a8000)
libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40016000) libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40016000)
libc.so.6 =&gt; /lib/tls/libc.so.6 (0x0036d000) libc.so.6 =&gt; /lib/tls/libc.so.6 (0x0036d000)
/lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000) /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
%nm hello.out %nm hello.out
</programlisting> </programlisting>
...@@ -722,7 +722,7 @@ class that would otherwise have implicit versions. This will change ...@@ -722,7 +722,7 @@ class that would otherwise have implicit versions. This will change
the way the compiler deals with this class in by-value return the way the compiler deals with this class in by-value return
statements or parameters: instead of being passing instances of this statements or parameters: instead of being passing instances of this
class in registers, the compiler will be forced to use memory. See <ulink url="http://www.codesourcery.com/cxx-abi/abi.html#calls"> this part</ulink> class in registers, the compiler will be forced to use memory. See <ulink url="http://www.codesourcery.com/cxx-abi/abi.html#calls"> this part</ulink>
of the C++ ABI documentation for further details. of the C++ ABI documentation for further details.
</para></listitem> </para></listitem>
</orderedlist> </orderedlist>
...@@ -748,7 +748,7 @@ class in registers, the compiler will be forced to use memory. See <ulink url="h ...@@ -748,7 +748,7 @@ class in registers, the compiler will be forced to use memory. See <ulink url="h
<variablelist> <variablelist>
<varlistentry> <varlistentry>
<term>Include files have declarations, source files have defines</term> <term>Include files have declarations, source files have defines</term>
<listitem> <listitem>
<para> <para>
For non-templatized types, such as much of <code>class For non-templatized types, such as much of <code>class
...@@ -759,7 +759,7 @@ class in registers, the compiler will be forced to use memory. See <ulink url="h ...@@ -759,7 +759,7 @@ class in registers, the compiler will be forced to use memory. See <ulink url="h
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term>Extern template on required types</term> <term>Extern template on required types</term>
...@@ -782,7 +782,7 @@ class in registers, the compiler will be forced to use memory. See <ulink url="h ...@@ -782,7 +782,7 @@ class in registers, the compiler will be forced to use memory. See <ulink url="h
</variablelist> </variablelist>
<para> <para>
In addition, these techniques have the additional benefit that they In addition, these techniques have the additional benefit that they
reduce binary size, which can increase runtime performance. reduce binary size, which can increase runtime performance.
</para> </para>
...@@ -865,7 +865,7 @@ standard includes.</para> ...@@ -865,7 +865,7 @@ standard includes.</para>
</para> </para>
<para> <para>
One. Intel ABI checker. One. Intel ABI checker.
</para> </para>
<para> <para>
...@@ -888,8 +888,8 @@ Testing the C++ library ABI can also be done various ways. ...@@ -888,8 +888,8 @@ Testing the C++ library ABI can also be done various ways.
</para> </para>
<para> <para>
One. One.
(Brendan Kehoe, Jeff Law suggestion to run 'make check-c++' two ways, (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 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) compiler and a new library, and look for testsuite regressions)
</para> </para>
...@@ -900,8 +900,8 @@ http://gcc.gnu.org/ml/gcc/2002-08/msg00142.html ...@@ -900,8 +900,8 @@ http://gcc.gnu.org/ml/gcc/2002-08/msg00142.html
</para> </para>
<para> <para>
Two. Two.
Use the 'make check-abi' rule in the libstdc++ Makefile. Use the 'make check-abi' rule in the libstdc++ Makefile.
</para> </para>
<para> <para>
...@@ -924,7 +924,7 @@ machinery. ...@@ -924,7 +924,7 @@ machinery.
<para> <para>
This dataset is insufficient, yet a start. Also needed is a This dataset is insufficient, yet a start. Also needed is a
comprehensive check for all user-visible types part of the standard comprehensive check for all user-visible types part of the standard
library for sizeof() and alignof() changes. library for sizeof() and alignof() changes.
</para> </para>
<para> <para>
...@@ -969,7 +969,7 @@ exceptions, locale, etc. ...@@ -969,7 +969,7 @@ exceptions, locale, etc.
%$bld/H-x86-gcc-3.4.0/bin/g++ -c a.cc %$bld/H-x86-gcc-3.4.0/bin/g++ -c a.cc
%ar cru libone.a a.o %ar cru libone.a a.o
</programlisting> </programlisting>
<para> And, libtwo is constructed as follows: </para> <para> And, libtwo is constructed as follows: </para>
...@@ -983,7 +983,7 @@ exceptions, locale, etc. ...@@ -983,7 +983,7 @@ exceptions, locale, etc.
%$bld/H-x86-gcc-3.3.3/bin/g++ -c b.cc %$bld/H-x86-gcc-3.3.3/bin/g++ -c b.cc
%ar cru libtwo.a b.o %ar cru libtwo.a b.o
</programlisting> </programlisting>
<para> ...with the resulting libraries looking like </para> <para> ...with the resulting libraries looking like </para>
...@@ -991,22 +991,22 @@ exceptions, locale, etc. ...@@ -991,22 +991,22 @@ exceptions, locale, etc.
<screen> <screen>
<computeroutput> <computeroutput>
%ldd libone.so.1.0.0 %ldd libone.so.1.0.0
libstdc++.so.6 =&gt; /usr/lib/libstdc++.so.6 (0x40016000) libstdc++.so.6 =&gt; /usr/lib/libstdc++.so.6 (0x40016000)
libm.so.6 =&gt; /lib/tls/libm.so.6 (0x400fa000) libm.so.6 =&gt; /lib/tls/libm.so.6 (0x400fa000)
libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x4011c000) libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x4011c000)
libc.so.6 =&gt; /lib/tls/libc.so.6 (0x40125000) libc.so.6 =&gt; /lib/tls/libc.so.6 (0x40125000)
/lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000) /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
%ldd libtwo.so.1.0.0 %ldd libtwo.so.1.0.0
libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x40027000) libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x40027000)
libm.so.6 =&gt; /lib/tls/libm.so.6 (0x400e1000) libm.so.6 =&gt; /lib/tls/libm.so.6 (0x400e1000)
libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40103000) libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x40103000)
libc.so.6 =&gt; /lib/tls/libc.so.6 (0x4010c000) libc.so.6 =&gt; /lib/tls/libc.so.6 (0x4010c000)
/lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000) /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
</computeroutput> </computeroutput>
</screen> </screen>
<para> <para>
Then, the "C" compiler is used to compile a source file that uses Then, the "C" compiler is used to compile a source file that uses
functions from each library. functions from each library.
</para> </para>
...@@ -1021,12 +1021,12 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so. ...@@ -1021,12 +1021,12 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
<screen> <screen>
<computeroutput> <computeroutput>
%ldd a.out %ldd a.out
libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x00764000) libstdc++.so.5 =&gt; /usr/lib/libstdc++.so.5 (0x00764000)
libstdc++.so.6 =&gt; /usr/lib/libstdc++.so.6 (0x40015000) libstdc++.so.6 =&gt; /usr/lib/libstdc++.so.6 (0x40015000)
libc.so.6 =&gt; /lib/tls/libc.so.6 (0x0036d000) libc.so.6 =&gt; /lib/tls/libc.so.6 (0x0036d000)
libm.so.6 =&gt; /lib/tls/libm.so.6 (0x004a8000) libm.so.6 =&gt; /lib/tls/libm.so.6 (0x004a8000)
libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x400e5000) libgcc_s.so.1 =&gt; /mnt/hd/bld/gcc/gcc/libgcc_s.so.1 (0x400e5000)
/lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000) /lib/ld-linux.so.2 =&gt; /lib/ld-linux.so.2 (0x00355000)
</computeroutput> </computeroutput>
</screen> </screen>
...@@ -1041,7 +1041,7 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so. ...@@ -1041,7 +1041,7 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
<sect2 id="abi.issues"> <sect2 id="abi.issues">
<title>Outstanding Issues</title> <title>Outstanding Issues</title>
<para> <para>
Some features in the C++ language make versioning especially Some features in the C++ language make versioning especially
difficult. In particular, compiler generated constructs such as difficult. In particular, compiler generated constructs such as
implicit instantiations for templates, typeinfo information, and implicit instantiations for templates, typeinfo information, and
...@@ -1068,151 +1068,136 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so. ...@@ -1068,151 +1068,136 @@ gcc test.c -g -O2 -L. -lone -ltwo /usr/lib/libstdc++.so.5 /usr/lib/libstdc++.so.
<title>Bibliography</title> <title>Bibliography</title>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
ABIcheck, a vague idea of checking ABI compatibility
</title>
<biblioid>
<ulink url="http://abicheck.sourceforge.net/"> <ulink url="http://abicheck.sourceforge.net/">
<citetitle>
ABIcheck, a vague idea of checking ABI compatibility
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
C++ ABI Reference
</title>
<biblioid>
<ulink url="http://www.codesourcery.com/public/cxx-abi/"> <ulink url="http://www.codesourcery.com/public/cxx-abi/">
<citetitle>
C++ ABI Reference
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
Intel® Compilers for Linux* -Compatibility with the GNU Compilers
</title>
<biblioid>
<ulink url="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm"> <ulink url="http://www.intel.com/cd/software/products/asmo-na/eng/284736.htm">
<citetitle>
Intel Compilers for Linux Compatibility with the GNU Compilers
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
Sun Solaris 2.9 : Linker and Libraries Guide (document 816-1386)
</title>
<biblioid>
<ulink url="http://docs.sun.com/app/docs/doc/817-1984"> <ulink url="http://docs.sun.com/app/docs/doc/817-1984">
<citetitle>
Sun Solaris 2.9 : Linker and Libraries Guide (document 816-1386)
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
Sun Solaris 2.9 : C++ Migration Guide (document 816-2459)
</title>
<biblioid>
<ulink url="http://docs.sun.com/app/docs/doc/819-5266"> <ulink url="http://docs.sun.com/app/docs/doc/819-5266">
<citetitle>
Sun Solaris 2.9 : C++ Migration Guide (document 816-2459)
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
How to Write Shared Libraries <ulink url="http://people.redhat.com/drepper/dsohowto.pdf">
</title> <citetitle>
How to Write Shared Libraries
</citetitle>
</ulink>
</biblioid>
<author> <author>
<firstname>Ulrich</firstname> <firstname>Ulrich</firstname>
<surname>Drepper</surname> <surname>Drepper</surname>
</author> </author>
</biblioentry>
<biblioid>
<ulink url="http://people.redhat.com/drepper/dsohowto.pdf">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
C++ ABI for the ARM Architecture
</title>
<biblioid>
<ulink url="http://www.arm.com/miscPDFs/8033.pdf"> <ulink url="http://www.arm.com/miscPDFs/8033.pdf">
<citetitle>
C++ ABI for the ARM Architecture
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
Dynamic Shared Objects: Survey and Issues <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html">
</title> <citetitle>
Dynamic Shared Objects: Survey and Issues
</citetitle>
</ulink>
</biblioid>
<subtitle> <subtitle>
ISO C++ J16/06-0046 ISO C++ J16/06-0046
</subtitle> </subtitle>
<author> <author>
<firstname>Benjamin</firstname> <firstname>Benjamin</firstname>
<surname>Kosnik</surname> <surname>Kosnik</surname>
</author> </author>
</biblioentry>
<biblioid>
<ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1976.html">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
Versioning With Namespaces <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html">
</title> <citetitle>
Versioning With Namespaces
</citetitle>
</ulink>
</biblioid>
<subtitle> <subtitle>
ISO C++ J16/06-0083 ISO C++ J16/06-0083
</subtitle> </subtitle>
<author> <author>
<firstname>Benjamin</firstname> <firstname>Benjamin</firstname>
<surname>Kosnik</surname> <surname>Kosnik</surname>
</author> </author>
</biblioentry>
<biblioid>
<ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2013.html">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
Binary Compatibility of Shared Libraries Implemented in C++ on GNU/Linux Systems <ulink url="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf">
</title> <citetitle>
Binary Compatibility of Shared Libraries Implemented in C++
on GNU/Linux Systems
</citetitle>
</ulink>
</biblioid>
<subtitle> <subtitle>
SYRCoSE 2009 SYRCoSE 2009
</subtitle> </subtitle>
<author> <author>
<firstname>Pavel</firstname> <firstname>Pavel</firstname>
<surname>Shved</surname> <surname>Shved</surname>
</author> </author>
<author> <author>
<firstname>Denis</firstname> <firstname>Denis</firstname>
<surname>Silakov</surname> <surname>Silakov</surname>
</author> </author>
</biblioentry>
<biblioid>
<ulink url="http://syrcose.ispras.ru/2009/files/SYRCoSE2009-CfP.pdf">
</ulink>
</biblioid>
</biblioentry>
</bibliography> </bibliography>
</sect1> </sect1>
<sect1 id="manual.util.memory.allocator" xreflabel="Allocator"> <sect1 id="manual.util.memory.allocator" xreflabel="Allocator">
<?dbhtml filename="allocator.html"?> <?dbhtml filename="allocator.html"?>
<sect1info> <sect1info>
<keywordset> <keywordset>
<keyword> <keyword>
...@@ -51,9 +51,9 @@ ...@@ -51,9 +51,9 @@
<listitem> <listitem>
<para> <para>
The interface of the <classname>allocator&lt;T&gt;</classname> class is The interface of the <classname>allocator&lt;T&gt;</classname> class is
extremely simple. It has about 20 public declarations (nested extremely simple. It has about 20 public declarations (nested
typedefs, member functions, etc), but the two which concern us most typedefs, member functions, etc), but the two which concern us most
are: are:
</para> </para>
<programlisting> <programlisting>
T* allocate (size_type n, const void* hint = 0); T* allocate (size_type n, const void* hint = 0);
...@@ -65,14 +65,14 @@ ...@@ -65,14 +65,14 @@
functions is a <emphasis>count</emphasis> of the number of functions is a <emphasis>count</emphasis> of the number of
<type>T</type>'s to allocate space for, <emphasis>not their <type>T</type>'s to allocate space for, <emphasis>not their
total size</emphasis>. total size</emphasis>.
(This is a simplification; the real signatures use nested typedefs.) (This is a simplification; the real signatures use nested typedefs.)
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
The storage is obtained by calling <function>::operator The storage is obtained by calling <function>::operator
new</function>, but it is unspecified when or how new</function>, but it is unspecified when or how
often this function is called. The use of the often this function is called. The use of the
<varname>hint</varname> is unspecified, but intended as an <varname>hint</varname> is unspecified, but intended as an
aid to locality if an implementation so aid to locality if an implementation so
desires. <constant>[20.4.1.1]/6</constant> desires. <constant>[20.4.1.1]/6</constant>
...@@ -80,7 +80,7 @@ ...@@ -80,7 +80,7 @@
</listitem> </listitem>
</itemizedlist> </itemizedlist>
<para> <para>
Complete details can be found in the C++ standard, look in Complete details can be found in the C++ standard, look in
<constant>[20.4 Memory]</constant>. <constant>[20.4 Memory]</constant>.
</para> </para>
...@@ -106,7 +106,7 @@ ...@@ -106,7 +106,7 @@
<function>std::malloc</function> and <function>free</function>. <function>std::malloc</function> and <function>free</function>.
</para> </para>
<para> <para>
Another approach is to use intelligence within the allocator Another approach is to use intelligence within the allocator
class to cache allocations. This extra machinery can take a variety class to cache allocations. This extra machinery can take a variety
of forms: a bitmap index, an index into an exponentially increasing of forms: a bitmap index, an index into an exponentially increasing
...@@ -148,17 +148,17 @@ ...@@ -148,17 +148,17 @@
The only allocator interface that The only allocator interface that
is supported is the standard C++ interface. As such, all STL is supported is the standard C++ interface. As such, all STL
containers have been adjusted, and all external allocators have containers have been adjusted, and all external allocators have
been modified to support this change. been modified to support this change.
</para> </para>
<para> <para>
The class <classname>allocator</classname> just has typedef, The class <classname>allocator</classname> just has typedef,
constructor, and rebind members. It inherits from one of the constructor, and rebind members. It inherits from one of the
high-speed extension allocators, covered below. Thus, all high-speed extension allocators, covered below. Thus, all
allocation and deallocation depends on the base class. allocation and deallocation depends on the base class.
</para> </para>
<para> <para>
The base class that <classname>allocator</classname> is derived from The base class that <classname>allocator</classname> is derived from
may not be user-configurable. may not be user-configurable.
</para> </para>
...@@ -168,14 +168,14 @@ ...@@ -168,14 +168,14 @@
<sect3> <sect3>
<title>Selecting Default Allocation Policy</title> <title>Selecting Default Allocation Policy</title>
<para> <para>
It's difficult to pick an allocation strategy that will provide It's difficult to pick an allocation strategy that will provide
maximum utility, without excessively penalizing some behavior. In maximum utility, without excessively penalizing some behavior. In
fact, it's difficult just deciding which typical actions to measure fact, it's difficult just deciding which typical actions to measure
for speed. for speed.
</para> </para>
<para> <para>
Three synthetic benchmarks have been created that provide data Three synthetic benchmarks have been created that provide data
that is used to compare different C++ allocators. These tests are: that is used to compare different C++ allocators. These tests are:
</para> </para>
...@@ -183,12 +183,12 @@ ...@@ -183,12 +183,12 @@
<orderedlist> <orderedlist>
<listitem> <listitem>
<para> <para>
Insertion. Insertion.
</para> </para>
<para> <para>
Over multiple iterations, various STL container Over multiple iterations, various STL container
objects have elements inserted to some maximum amount. A variety objects have elements inserted to some maximum amount. A variety
of allocators are tested. of allocators are tested.
Test source for <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/sequence.cc?view=markup">sequence</ulink> Test source for <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/sequence.cc?view=markup">sequence</ulink>
and <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/associative.cc?view=markup">associative</ulink> and <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert/associative.cc?view=markup">associative</ulink>
containers. containers.
...@@ -203,8 +203,8 @@ ...@@ -203,8 +203,8 @@
<para> <para>
This test shows the ability of the allocator to reclaim memory This test shows the ability of the allocator to reclaim memory
on a per-thread basis, as well as measuring thread contention on a per-thread basis, as well as measuring thread contention
for memory resources. for memory resources.
Test source Test source
<ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert_erase/associative.cc?view=markup">here</ulink>. <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc%2B%2B-v3/testsuite/performance/23_containers/insert_erase/associative.cc?view=markup">here</ulink>.
</para> </para>
</listitem> </listitem>
...@@ -216,7 +216,7 @@ ...@@ -216,7 +216,7 @@
<para> <para>
Test source for Test source for
<ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?view=markup">sequence</ulink> <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/sequence.cc?view=markup">sequence</ulink>
and and
<ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?view=markup">associative</ulink> <ulink url="http://gcc.gnu.org/viewcvs/trunk/libstdc++-v3/testsuite/performance/23_containers/producer_consumer/associative.cc?view=markup">associative</ulink>
containers. containers.
</para> </para>
...@@ -234,7 +234,7 @@ ...@@ -234,7 +234,7 @@
<sect3> <sect3>
<title>Disabling Memory Caching</title> <title>Disabling Memory Caching</title>
<para> <para>
In use, <classname>allocator</classname> may allocate and In use, <classname>allocator</classname> may allocate and
deallocate using implementation-specified strategies and deallocate using implementation-specified strategies and
heuristics. Because of this, every call to an allocator object's heuristics. Because of this, every call to an allocator object's
...@@ -244,17 +244,17 @@ ...@@ -244,17 +244,17 @@
function. function.
</para> </para>
<para> <para>
This can be confusing. This can be confusing.
</para> </para>
<para> <para>
In particular, this can make debugging memory errors more In particular, this can make debugging memory errors more
difficult, especially when using third party tools like valgrind or difficult, especially when using third party tools like valgrind or
debug versions of <function>new</function>. debug versions of <function>new</function>.
</para> </para>
<para> <para>
There are various ways to solve this problem. One would be to use There are various ways to solve this problem. One would be to use
a custom allocator that just called operators a custom allocator that just called operators
<function>new</function> and <function>delete</function> <function>new</function> and <function>delete</function>
...@@ -308,16 +308,16 @@ ...@@ -308,16 +308,16 @@
<sect2 id="allocator.custom"> <sect2 id="allocator.custom">
<title>Custom Allocators</title> <title>Custom Allocators</title>
<para> <para>
Writing a portable C++ allocator would dictate that the interface Writing a portable C++ allocator would dictate that the interface
would look much like the one specified for would look much like the one specified for
<classname>allocator</classname>. Additional member functions, but <classname>allocator</classname>. Additional member functions, but
not subtractions, would be permissible. not subtractions, would be permissible.
</para> </para>
<para> <para>
Probably the best place to start would be to copy one of the Probably the best place to start would be to copy one of the
extension allocators: say a simple one like extension allocators: say a simple one like
<classname>new_allocator</classname>. <classname>new_allocator</classname>.
</para> </para>
...@@ -326,7 +326,7 @@ ...@@ -326,7 +326,7 @@
<sect2 id="allocator.ext"> <sect2 id="allocator.ext">
<title>Extension Allocators</title> <title>Extension Allocators</title>
<para> <para>
Several other allocators are provided as part of this Several other allocators are provided as part of this
implementation. The location of the extension allocators and their implementation. The location of the extension allocators and their
names have changed, but in all cases, functionality is names have changed, but in all cases, functionality is
...@@ -382,7 +382,7 @@ ...@@ -382,7 +382,7 @@
<para> <para>
<classname>debug_allocator</classname> <classname>debug_allocator</classname>
</para> </para>
<para> <para>
A wrapper around an arbitrary allocator A. It passes on A wrapper around an arbitrary allocator A. It passes on
slightly increased size requests to A, and uses the extra slightly increased size requests to A, and uses the extra
memory to store size information. When a pointer is passed memory to store size information. When a pointer is passed
...@@ -395,17 +395,17 @@ ...@@ -395,17 +395,17 @@
<para> <para>
<classname>throw_allocator</classname> <classname>throw_allocator</classname>
</para> </para>
<para> <para>
Includes memory tracking and marking abilities as well as hooks for Includes memory tracking and marking abilities as well as hooks for
throwing exceptions at configurable intervals (including random, throwing exceptions at configurable intervals (including random,
all, none). all, none).
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
<classname>__pool_alloc</classname> <classname>__pool_alloc</classname>
</para> </para>
<para> <para>
A high-performance, single pool allocator. The reusable A high-performance, single pool allocator. The reusable
memory is shared among identical instantiations of this type. memory is shared among identical instantiations of this type.
It calls through <function>::operator new</function> to It calls through <function>::operator new</function> to
...@@ -416,7 +416,7 @@ ...@@ -416,7 +416,7 @@
directly. directly.
</para> </para>
<para> <para>
Older versions of this class take a boolean template Older versions of this class take a boolean template
parameter, called <varname>thr</varname>, and an integer template parameter, called <varname>thr</varname>, and an integer template
parameter, called <varname>inst</varname>. parameter, called <varname>inst</varname>.
...@@ -484,7 +484,7 @@ ...@@ -484,7 +484,7 @@
<para> <para>
A high-performance allocator that uses a bit-map to keep track A high-performance allocator that uses a bit-map to keep track
of the used and unused memory locations. It has its own of the used and unused memory locations. It has its own
documentation, found <link documentation, found <link
linkend="manual.ext.allocator.bitmap">here</link>. linkend="manual.ext.allocator.bitmap">here</link>.
</para> </para>
</listitem> </listitem>
...@@ -497,65 +497,55 @@ ...@@ -497,65 +497,55 @@
<biblioentry> <biblioentry>
<title> <title>
ISO/IEC 14882:1998 Programming languages - C++ ISO/IEC 14882:1998 Programming languages - C++
</title> </title>
<abbrev> <abbrev>
isoc++_1998 isoc++_1998
</abbrev> </abbrev>
<pagenums>20.4 Memory</pagenums> <pagenums>20.4 Memory</pagenums>
</biblioentry> </biblioentry>
<biblioentry>
<title>The Standard Librarian: What Are Allocators Good
</title>
<abbrev>
austernm
</abbrev>
<biblioentry>
<biblioid class="uri">
<ulink url="http://www.drdobbs.com/cpp/184403759">
<citetitle>
The Standard Librarian: What Are Allocators Good For?
</citetitle>
</ulink>
</biblioid>
<author> <author>
<firstname>Matt</firstname> <firstname>Matt</firstname>
<surname>Austern</surname> <surname>Austern</surname>
</author> </author>
<publisher> <publisher>
<publishername> <publishername>
C/C++ Users Journal C/C++ Users Journal
</publishername> </publishername>
</publisher> </publisher>
</biblioentry>
<biblioid> <biblioentry>
<ulink url="http://www.cuj.com/documents/s=8000/cujcexp1812austern/"> <biblioid class="uri">
<ulink url="http://www.cs.umass.edu/~emery/hoard/">
<citetitle>
The Hoard Memory Allocator
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry>
<biblioentry>
<title>The Hoard Memory Allocator</title>
<abbrev>
emeryb
</abbrev>
<author> <author>
<firstname>Emery</firstname> <firstname>Emery</firstname>
<surname>Berger</surname> <surname>Berger</surname>
</author> </author>
</biblioentry>
<biblioid> <biblioentry>
<ulink url="http://www.cs.umass.edu/~emery/hoard/"> <biblioid class="uri">
<ulink url="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf">
<citetitle>
Reconsidering Custom Memory Allocation
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry>
<biblioentry>
<title>Reconsidering Custom Memory Allocation</title>
<abbrev>
bergerzorn
</abbrev>
<author> <author>
<firstname>Emery</firstname> <firstname>Emery</firstname>
<surname>Berger</surname> <surname>Berger</surname>
...@@ -568,26 +558,21 @@ ...@@ -568,26 +558,21 @@
<firstname>Kathryn</firstname> <firstname>Kathryn</firstname>
<surname>McKinley</surname> <surname>McKinley</surname>
</author> </author>
<copyright> <copyright>
<year>2002</year> <year>2002</year>
<holder>OOPSLA</holder> <holder>OOPSLA</holder>
</copyright> </copyright>
</biblioentry>
<biblioid>
<ulink url="http://www.cs.umass.edu/~emery/pubs/berger-oopsla2002.pdf">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title>Allocator Types</title> <biblioid class="uri">
<ulink url="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html">
<abbrev> <citetitle>
kreftlanger Allocator Types
</abbrev> </citetitle>
</ulink>
</biblioid>
<author> <author>
<firstname>Klaus</firstname> <firstname>Klaus</firstname>
<surname>Kreft</surname> <surname>Kreft</surname>
...@@ -596,26 +581,15 @@ ...@@ -596,26 +581,15 @@
<firstname>Angelika</firstname> <firstname>Angelika</firstname>
<surname>Langer</surname> <surname>Langer</surname>
</author> </author>
<publisher> <publisher>
<publishername> <publishername>
C/C++ Users Journal C/C++ Users Journal
</publishername> </publishername>
</publisher> </publisher>
</biblioentry>
<biblioid>
<ulink url="http://www.angelikalanger.com/Articles/C++Report/Allocators/Allocators.html">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title>The C++ Programming Language</title> <title>The C++ Programming Language</title>
<abbrev>
tcpl
</abbrev>
<author> <author>
<firstname>Bjarne</firstname> <firstname>Bjarne</firstname>
<surname>Stroustrup</surname> <surname>Stroustrup</surname>
...@@ -625,31 +599,20 @@ ...@@ -625,31 +599,20 @@
<holder></holder> <holder></holder>
</copyright> </copyright>
<pagenums>19.4 Allocators</pagenums> <pagenums>19.4 Allocators</pagenums>
<publisher> <publisher>
<publishername> <publishername>
Addison Wesley Addison Wesley
</publishername> </publishername>
</publisher> </publisher>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title>Yalloc: A Recycling C++ Allocator</title> <title>Yalloc: A Recycling C++ Allocator</title>
<abbrev>
yenf
</abbrev>
<author> <author>
<firstname>Felix</firstname> <firstname>Felix</firstname>
<surname>Yen</surname> <surname>Yen</surname>
</author> </author>
<copyright> </biblioentry>
<year></year>
<holder></holder>
</copyright>
</biblioentry>
</bibliography> </bibliography>
</sect1> </sect1>
...@@ -1085,7 +1085,7 @@ indicate a place that may require attention for multi-thread safety. ...@@ -1085,7 +1085,7 @@ indicate a place that may require attention for multi-thread safety.
</para> </para>
<table frame='all'> <table frame='all'>
<title>HTML to Doxygen markup comparison</title> <title>HTML to Doxygen Markup Comparison</title>
<tgroup cols='2' align='left' colsep='1' rowsep='1'> <tgroup cols='2' align='left' colsep='1' rowsep='1'>
<colspec colname='c1'></colspec> <colspec colname='c1'></colspec>
<colspec colname='c2'></colspec> <colspec colname='c2'></colspec>
...@@ -1318,15 +1318,16 @@ xmllint --noout --valid <filename>xml/index.xml</filename> ...@@ -1318,15 +1318,16 @@ xmllint --noout --valid <filename>xml/index.xml</filename>
<sect3 id="docbook.markup"> <sect3 id="docbook.markup">
<title>Markup By Example</title> <title>Markup By Example</title>
<para> <para>
Complete details on Docbook markup can be found in the DocBook Element Complete details on Docbook markup can be found in the DocBook
Reference, <ulink url="http://www.docbook.org/tdg/en/html/part2.html">online</ulink>. An Element Reference,
incomplete reference for HTML to Docbook conversion is detailed in the <ulink url="http://www.docbook.org/tdg/en/html/part2.html">online</ulink>.
table below. An incomplete reference for HTML to Docbook conversion is
</para> detailed in the table below.
</para>
<table frame='all'> <table frame='all'>
<title>HTML to Docbook XML markup comparison</title> <title>HTML to Docbook XML Markup Comparison</title>
<tgroup cols='2' align='left' colsep='1' rowsep='1'> <tgroup cols='2' align='left' colsep='1' rowsep='1'>
<colspec colname='c1'></colspec> <colspec colname='c1'></colspec>
<colspec colname='c2'></colspec> <colspec colname='c2'></colspec>
......
<sect1 id="manual.appendix.porting.backwards" xreflabel="backwards"> <sect1 id="manual.appendix.porting.backwards" xreflabel="backwards">
<?dbhtml filename="backwards.html"?> <?dbhtml filename="backwards.html"?>
<sect1info> <sect1info>
<keywordset> <keywordset>
<keyword> <keyword>
...@@ -37,7 +37,7 @@ Committee couldn't include everything, and so a lot of those ...@@ -37,7 +37,7 @@ Committee couldn't include everything, and so a lot of those
<quote>obvious</quote> classes didn't get included. <quote>obvious</quote> classes didn't get included.
</para> </para>
<para>Known Issues include many of the limitations of its immediate ancestor.</para> <para>Known Issues include many of the limitations of its immediate ancestor.</para>
<para>Portability notes and known implementation limitations are as follows.</para> <para>Portability notes and known implementation limitations are as follows.</para>
...@@ -75,14 +75,14 @@ considered replaced and rewritten. ...@@ -75,14 +75,14 @@ considered replaced and rewritten.
<sect2 id="backwards.second"> <sect2 id="backwards.second">
<title>Second</title> <title>Second</title>
<para> <para>
The second generation GNU C++ library was called libstdc++, or The second generation GNU C++ library was called libstdc++, or
libstdc++-v2. It spans the time between libg++ and pre-ISO C++ libstdc++-v2. It spans the time between libg++ and pre-ISO C++
standardization and is usually associated with the following GCC standardization and is usually associated with the following GCC
releases: egcs 1.x, gcc 2.95, and gcc 2.96. releases: egcs 1.x, gcc 2.95, and gcc 2.96.
</para> </para>
<para> <para>
The STL portions of this library are based on SGI/HP STL release 3.11. The STL portions of this library are based on SGI/HP STL release 3.11.
</para> </para>
...@@ -108,8 +108,8 @@ considered replaced and rewritten. ...@@ -108,8 +108,8 @@ considered replaced and rewritten.
The following sections list some possible solutions to support compilers The following sections list some possible solutions to support compilers
that cannot ignore <code>std::</code>-qualified names. that cannot ignore <code>std::</code>-qualified names.
</para> </para>
<para> <para>
First, see if the compiler has a flag for this. Namespace First, see if the compiler has a flag for this. Namespace
back-portability-issues are generally not a problem for g++ back-portability-issues are generally not a problem for g++
compilers that do not have libstdc++ in <code>std::</code>, as the compilers that do not have libstdc++ in <code>std::</code>, as the
...@@ -124,11 +124,11 @@ considered replaced and rewritten. ...@@ -124,11 +124,11 @@ considered replaced and rewritten.
Second, experiment with a variety of pre-processor tricks. Second, experiment with a variety of pre-processor tricks.
</para> </para>
<para> <para>
By defining <code>std</code> as a macro, fully-qualified namespace By defining <code>std</code> as a macro, fully-qualified namespace
calls become global. Volia. calls become global. Volia.
</para> </para>
<programlisting> <programlisting>
#ifdef WICKEDLY_OLD_COMPILER #ifdef WICKEDLY_OLD_COMPILER
# define std # define std
...@@ -169,8 +169,8 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [ ...@@ -169,8 +169,8 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
ac_cv_cxx_have_std_namespace, ac_cv_cxx_have_std_namespace,
[AC_LANG_SAVE [AC_LANG_SAVE
AC_LANG_CPLUSPLUS AC_LANG_CPLUSPLUS
AC_TRY_COMPILE([#include &lt;iostream&gt; AC_TRY_COMPILE([#include &lt;iostream&gt;
std::istream&amp; is = std::cin;],, std::istream&amp; is = std::cin;],,
ac_cv_cxx_have_std_namespace=yes, ac_cv_cxx_have_std_namespace=no) ac_cv_cxx_have_std_namespace=yes, ac_cv_cxx_have_std_namespace=no)
AC_LANG_RESTORE AC_LANG_RESTORE
]) ])
...@@ -188,7 +188,7 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [ ...@@ -188,7 +188,7 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
use, and then correct use. use, and then correct use.
</para> </para>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
you cannot do <code>ostream::operator&lt;&lt;(iterator)</code> you cannot do <code>ostream::operator&lt;&lt;(iterator)</code>
...@@ -205,7 +205,7 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [ ...@@ -205,7 +205,7 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
<listitem> <listitem>
<para> <para>
<code>if (iterator)</code> won't work any more =&gt; use <code>if (iterator)</code> won't work any more =&gt; use
<code>if (iterator != iterator_type())</code> <code>if (iterator != iterator_type())</code>
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
...@@ -215,7 +215,7 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [ ...@@ -215,7 +215,7 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
<title><code>isspace</code> from <filename class="headerfile">cctype</filename> is a macro <title><code>isspace</code> from <filename class="headerfile">cctype</filename> is a macro
</title> </title>
<para> <para>
Glibc 2.0.x and 2.1.x define <filename Glibc 2.0.x and 2.1.x define <filename
class="headerfile">ctype.h</filename> functionality as macros class="headerfile">ctype.h</filename> functionality as macros
(isspace, isalpha etc.). (isspace, isalpha etc.).
...@@ -227,27 +227,27 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [ ...@@ -227,27 +227,27 @@ AC_DEFUN([AC_CXX_NAMESPACE_STD], [
names. For example: names. For example:
</para> </para>
<programlisting> <programlisting>
#include &lt;cctype&gt; #include &lt;cctype&gt;
int main() { std::isspace('X'); } int main() { std::isspace('X'); }
</programlisting> </programlisting>
<para> <para>
Results in something like this: Results in something like this:
</para> </para>
<programlisting> <programlisting>
std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int) _ISspace ) ; std:: (__ctype_b[(int) ( ( 'X' ) )] &amp; (unsigned short int) _ISspace ) ;
</programlisting> </programlisting>
<para> <para>
A solution is to modify a header-file so that the compiler tells A solution is to modify a header-file so that the compiler tells
<filename class="headerfile">ctype.h</filename> to define functions <filename class="headerfile">ctype.h</filename> to define functions
instead of macros: instead of macros:
</para> </para>
<programlisting> <programlisting>
// This keeps isalnum, et al from being propagated as macros. // This keeps isalnum, et al from being propagated as macros.
#if __linux__ #if __linux__
# define __NO_CTYPE 1 # define __NO_CTYPE 1
#endif #endif
...@@ -282,7 +282,7 @@ AC_TRY_COMPILE( ...@@ -282,7 +282,7 @@ AC_TRY_COMPILE(
#include &lt;vector&gt; #include &lt;vector&gt;
#include &lt;deque&gt; #include &lt;deque&gt;
#include &lt;string&gt; #include &lt;string&gt;
using namespace std; using namespace std;
], ],
[ [
...@@ -310,7 +310,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)], ...@@ -310,7 +310,7 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
<para> <para>
Use some kind of autoconf test, plus this: Use some kind of autoconf test, plus this:
</para> </para>
<programlisting> <programlisting>
#ifdef HAVE_CHAR_TRAITS #ifdef HAVE_CHAR_TRAITS
...@@ -330,18 +330,18 @@ AC_DEFINE(HAVE_CONTAINER_AT)], ...@@ -330,18 +330,18 @@ AC_DEFINE(HAVE_CONTAINER_AT)],
<code>clear</code> and <code>erase</code> (the latter returns the <code>clear</code> and <code>erase</code> (the latter returns the
string). string).
</para> </para>
<programlisting> <programlisting>
void void
clear() { _M_mutate(0, this-&gt;size(), 0); } clear() { _M_mutate(0, this-&gt;size(), 0); }
</programlisting> </programlisting>
<programlisting> <programlisting>
basic_string&amp; basic_string&amp;
erase(size_type __pos = 0, size_type __n = npos) erase(size_type __pos = 0, size_type __n = npos)
{ {
return this-&gt;replace(_M_check(__pos), _M_fold(__pos, __n), return this-&gt;replace(_M_check(__pos), _M_fold(__pos, __n),
_M_data(), _M_data()); _M_data(), _M_data());
} }
</programlisting> </programlisting>
...@@ -358,7 +358,7 @@ erase(size_type __pos = 0, size_type __n = npos) ...@@ -358,7 +358,7 @@ erase(size_type __pos = 0, size_type __n = npos)
extensions extensions
</title> </title>
<para> <para>
These are no longer supported. Please use stringstreams instead. These are no longer supported. Please use stringstreams instead.
</para> </para>
</sect3> </sect3>
...@@ -377,25 +377,25 @@ erase(size_type __pos = 0, size_type __n = npos) ...@@ -377,25 +377,25 @@ erase(size_type __pos = 0, size_type __n = npos)
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
<code>strstream</code> is considered to be deprecated <code>strstream</code> is considered to be deprecated
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
<code>strstream</code> is limited to <code>char</code> <code>strstream</code> is limited to <code>char</code>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
with <code>ostringstream</code> you don't have to take care of with <code>ostringstream</code> you don't have to take care of
terminating the string or freeing its memory terminating the string or freeing its memory
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
<code>istringstream</code> can be re-filled (clear(); <code>istringstream</code> can be re-filled (clear();
str(input);) str(input);)
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
...@@ -403,7 +403,7 @@ erase(size_type __pos = 0, size_type __n = npos) ...@@ -403,7 +403,7 @@ erase(size_type __pos = 0, size_type __n = npos)
<para> <para>
You can then use output-stringstreams like this: You can then use output-stringstreams like this:
</para> </para>
<programlisting> <programlisting>
#ifdef HAVE_SSTREAM #ifdef HAVE_SSTREAM
# include &lt;sstream&gt; # include &lt;sstream&gt;
...@@ -436,7 +436,7 @@ m_label.set_text(oss.str()); ...@@ -436,7 +436,7 @@ m_label.set_text(oss.str());
<para> <para>
Input-stringstreams can be used similarly: Input-stringstreams can be used similarly:
</para> </para>
<programlisting> <programlisting>
std::string input; std::string input;
... ...
...@@ -447,12 +447,12 @@ std::istrstream iss(input.c_str()); ...@@ -447,12 +447,12 @@ std::istrstream iss(input.c_str());
#endif #endif
int i; int i;
iss &gt;&gt; i; iss &gt;&gt; i;
</programlisting> </programlisting>
<para> One (the only?) restriction is that an istrstream cannot be re-filled: <para> One (the only?) restriction is that an istrstream cannot be re-filled:
</para> </para>
<programlisting> <programlisting>
std::istringstream iss(numerator); std::istringstream iss(numerator);
iss &gt;&gt; m_num; iss &gt;&gt; m_num;
...@@ -461,11 +461,11 @@ iss.clear(); ...@@ -461,11 +461,11 @@ iss.clear();
iss.str(denominator); iss.str(denominator);
iss &gt;&gt; m_den; iss &gt;&gt; m_den;
</programlisting> </programlisting>
<para> <para>
If you don't care about speed, you can put these conversions in If you don't care about speed, you can put these conversions in
a template-function: a template-function:
</para> </para>
<programlisting> <programlisting>
template &lt;class X&gt; template &lt;class X&gt;
void fromString(const string&amp; input, X&amp; any) void fromString(const string&amp; input, X&amp; any)
...@@ -483,7 +483,7 @@ any = temp; ...@@ -483,7 +483,7 @@ any = temp;
} }
</programlisting> </programlisting>
<para> <para>
Another example of using stringstreams is in <link Another example of using stringstreams is in <link
linkend="strings.string.shrink">this howto</link>. linkend="strings.string.shrink">this howto</link>.
</para> </para>
...@@ -559,7 +559,7 @@ particular <quote>info iostream</quote>. ...@@ -559,7 +559,7 @@ particular <quote>info iostream</quote>.
</para> </para>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
Our threading expert Loren gives a breakdown of <ulink Our threading expert Loren gives a breakdown of <ulink
url="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html">the url="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html">the
...@@ -567,17 +567,17 @@ particular <quote>info iostream</quote>. ...@@ -567,17 +567,17 @@ particular <quote>info iostream</quote>.
release series. release series.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
<ulink url="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html"> <ulink url="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html">
This message</ulink> inspired a recent updating of issues with This message</ulink> inspired a recent updating of issues with
threading and the SGI STL library. It also contains some threading and the SGI STL library. It also contains some
example POSIX-multithreaded STL code. example POSIX-multithreaded STL code.
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
<para> <para>
(A large selection of links to older messages has been removed; (A large selection of links to older messages has been removed;
many of the messages from 1999 were lost in a disk crash, and the many of the messages from 1999 were lost in a disk crash, and the
few people with access to the backup tapes have been too swamped few people with access to the backup tapes have been too swamped
...@@ -596,12 +596,12 @@ libstdc++-v3. ...@@ -596,12 +596,12 @@ libstdc++-v3.
</para> </para>
<para>The subset commonly known as the Standard Template Library <para>The subset commonly known as the Standard Template Library
(chapters 23 through 25, mostly) is adapted from the final release (chapters 23 through 25, mostly) is adapted from the final release
of the SGI STL (version 3.3), with extensive changes. of the SGI STL (version 3.3), with extensive changes.
</para> </para>
<para>A more formal description of the V3 goals can be found in the <para>A more formal description of the V3 goals can be found in the
official <link linkend="contrib.design_notes">design document</link>. official <link linkend="contrib.design_notes">design document</link>.
</para> </para>
<para>Portability notes and known implementation limitations are as follows.</para> <para>Portability notes and known implementation limitations are as follows.</para>
...@@ -637,7 +637,7 @@ AC_DEFUN([AC_HEADER_PRE_STDCXX], [ ...@@ -637,7 +637,7 @@ AC_DEFUN([AC_HEADER_PRE_STDCXX], [
[AC_LANG_SAVE [AC_LANG_SAVE
AC_LANG_CPLUSPLUS AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS" ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -Wno-deprecated" CXXFLAGS="$CXXFLAGS -Wno-deprecated"
# Omit defalloc.h, as compilation with newer compilers is problematic. # Omit defalloc.h, as compilation with newer compilers is problematic.
AC_TRY_COMPILE([ AC_TRY_COMPILE([
...@@ -697,10 +697,10 @@ other usage is correct. ...@@ -697,10 +697,10 @@ other usage is correct.
<title>Extension headers hash_map, hash_set moved to ext or backwards</title> <title>Extension headers hash_map, hash_set moved to ext or backwards</title>
<para>At this time most of the features of the SGI STL extension have been <para>At this time most of the features of the SGI STL extension have been
replaced by standardized libraries. replaced by standardized libraries.
In particular, the unordered_map and unordered_set containers of TR1 In particular, the unordered_map and unordered_set containers of TR1
are suitable replacement for the non-standard hash_map and hash_set are suitable replacement for the non-standard hash_map and hash_set
containers in the SGI STL. containers in the SGI STL.
</para> </para>
<para> Header files <filename class="headerfile">hash_map</filename> and <filename class="headerfile">hash_set</filename> moved <para> Header files <filename class="headerfile">hash_map</filename> and <filename class="headerfile">hash_set</filename> moved
to <filename class="headerfile">ext/hash_map</filename> and <filename class="headerfile">ext/hash_set</filename>, to <filename class="headerfile">ext/hash_map</filename> and <filename class="headerfile">ext/hash_set</filename>,
...@@ -711,33 +711,33 @@ and <filename class="headerfile">unordered_set</filename> instead. ...@@ -711,33 +711,33 @@ and <filename class="headerfile">unordered_set</filename> instead.
</para> </para>
<para>The extensions are no longer in the global or <code>std</code> <para>The extensions are no longer in the global or <code>std</code>
namespaces, instead they are declared in the <code>__gnu_cxx</code> namespaces, instead they are declared in the <code>__gnu_cxx</code>
namespace. For maximum portability, consider defining a namespace namespace. For maximum portability, consider defining a namespace
alias to use to talk about extensions, e.g.: alias to use to talk about extensions, e.g.:
</para> </para>
<programlisting> <programlisting>
#ifdef __GNUC__ #ifdef __GNUC__
#if __GNUC__ &lt; 3 #if __GNUC__ &lt; 3
#include &lt;hash_map.h&gt; #include &lt;hash_map.h&gt;
namespace extension { using ::hash_map; }; // inherit globals namespace extension { using ::hash_map; }; // inherit globals
#else #else
#include &lt;backward/hash_map&gt; #include &lt;backward/hash_map&gt;
#if __GNUC__ == 3 &amp;&amp; __GNUC_MINOR__ == 0 #if __GNUC__ == 3 &amp;&amp; __GNUC_MINOR__ == 0
namespace extension = std; // GCC 3.0 namespace extension = std; // GCC 3.0
#else #else
namespace extension = ::__gnu_cxx; // GCC 3.1 and later namespace extension = ::__gnu_cxx; // GCC 3.1 and later
#endif #endif
#endif #endif
#else // ... there are other compilers, right? #else // ... there are other compilers, right?
namespace extension = std; namespace extension = std;
#endif #endif
extension::hash_map&lt;int,int&gt; my_map; extension::hash_map&lt;int,int&gt; my_map;
</programlisting> </programlisting>
<para>This is a bit cleaner than defining typedefs for all the <para>This is a bit cleaner than defining typedefs for all the
instantiations you might need. instantiations you might need.
</para> </para>
<para>The following autoconf tests check for working HP/SGI hash containers. <para>The following autoconf tests check for working HP/SGI hash containers.
</para> </para>
...@@ -750,7 +750,7 @@ AC_DEFUN([AC_HEADER_EXT_HASH_MAP], [ ...@@ -750,7 +750,7 @@ AC_DEFUN([AC_HEADER_EXT_HASH_MAP], [
[AC_LANG_SAVE [AC_LANG_SAVE
AC_LANG_CPLUSPLUS AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS" ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -Werror" CXXFLAGS="$CXXFLAGS -Werror"
AC_TRY_COMPILE([#include &lt;ext/hash_map&gt;], [using __gnu_cxx::hash_map;], AC_TRY_COMPILE([#include &lt;ext/hash_map&gt;], [using __gnu_cxx::hash_map;],
ac_cv_cxx_ext_hash_map=yes, ac_cv_cxx_ext_hash_map=no) ac_cv_cxx_ext_hash_map=yes, ac_cv_cxx_ext_hash_map=no)
CXXFLAGS="$ac_save_CXXFLAGS" CXXFLAGS="$ac_save_CXXFLAGS"
...@@ -770,7 +770,7 @@ AC_DEFUN([AC_HEADER_EXT_HASH_SET], [ ...@@ -770,7 +770,7 @@ AC_DEFUN([AC_HEADER_EXT_HASH_SET], [
[AC_LANG_SAVE [AC_LANG_SAVE
AC_LANG_CPLUSPLUS AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS" ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -Werror" CXXFLAGS="$CXXFLAGS -Werror"
AC_TRY_COMPILE([#include &lt;ext/hash_set&gt;], [using __gnu_cxx::hash_set;], AC_TRY_COMPILE([#include &lt;ext/hash_set&gt;], [using __gnu_cxx::hash_set;],
ac_cv_cxx_ext_hash_set=yes, ac_cv_cxx_ext_hash_set=no) ac_cv_cxx_ext_hash_set=yes, ac_cv_cxx_ext_hash_set=no)
CXXFLAGS="$ac_save_CXXFLAGS" CXXFLAGS="$ac_save_CXXFLAGS"
...@@ -811,7 +811,7 @@ No <code>stream::attach(int fd)</code> ...@@ -811,7 +811,7 @@ No <code>stream::attach(int fd)</code>
Phil Edwards writes: It was considered and rejected for the ISO Phil Edwards writes: It was considered and rejected for the ISO
standard. Not all environments use file descriptors. Of those standard. Not all environments use file descriptors. Of those
that do, not all of them use integers to represent them. that do, not all of them use integers to represent them.
</para> </para>
<para> <para>
For a portable solution (among systems which use For a portable solution (among systems which use
...@@ -819,7 +819,7 @@ No <code>stream::attach(int fd)</code> ...@@ -819,7 +819,7 @@ No <code>stream::attach(int fd)</code>
<code>std::streambuf</code> (or <code>std::streambuf</code> (or
<code>std::basic_streambuf&lt;..&gt;</code>) which opens a file <code>std::basic_streambuf&lt;..&gt;</code>) which opens a file
given a descriptor, and then pass an instance of this to the given a descriptor, and then pass an instance of this to the
stream-constructor. stream-constructor.
</para> </para>
<para> <para>
...@@ -832,7 +832,7 @@ No <code>stream::attach(int fd)</code> ...@@ -832,7 +832,7 @@ No <code>stream::attach(int fd)</code>
<para> <para>
For another example of this, refer to For another example of this, refer to
<ulink url="http://www.josuttis.com/cppcode/fdstream.html">fdstream example</ulink> <ulink url="http://www.josuttis.com/cppcode/fdstream.html">fdstream example</ulink>
by Nicolai Josuttis. by Nicolai Josuttis.
</para> </para>
</sect3> </sect3>
...@@ -1022,7 +1022,7 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [ ...@@ -1022,7 +1022,7 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
AC_LANG_CPLUSPLUS AC_LANG_CPLUSPLUS
AC_TRY_COMPILE([ AC_TRY_COMPILE([
template &lt;typename T&gt; template &lt;typename T&gt;
struct check struct check
{ {
static_assert(sizeof(int) &lt;= sizeof(T), "not big enough"); static_assert(sizeof(int) &lt;= sizeof(T), "not big enough");
}; };
...@@ -1044,10 +1044,10 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [ ...@@ -1044,10 +1044,10 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
[AC_LANG_SAVE [AC_LANG_SAVE
AC_LANG_CPLUSPLUS AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS" ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -std=c++0x" CXXFLAGS="$CXXFLAGS -std=c++0x"
AC_TRY_COMPILE([ AC_TRY_COMPILE([
template &lt;typename T&gt; template &lt;typename T&gt;
struct check struct check
{ {
static_assert(sizeof(int) &lt;= sizeof(T), "not big enough"); static_assert(sizeof(int) &lt;= sizeof(T), "not big enough");
}; };
...@@ -1070,10 +1070,10 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [ ...@@ -1070,10 +1070,10 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
[AC_LANG_SAVE [AC_LANG_SAVE
AC_LANG_CPLUSPLUS AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS" ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -std=gnu++0x" CXXFLAGS="$CXXFLAGS -std=gnu++0x"
AC_TRY_COMPILE([ AC_TRY_COMPILE([
template &lt;typename T&gt; template &lt;typename T&gt;
struct check struct check
{ {
static_assert(sizeof(int) &lt;= sizeof(T), "not big enough"); static_assert(sizeof(int) &lt;= sizeof(T), "not big enough");
}; };
...@@ -1091,8 +1091,8 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [ ...@@ -1091,8 +1091,8 @@ AC_DEFUN([AC_COMPILE_STDCXX_0X], [
AC_LANG_RESTORE AC_LANG_RESTORE
]) ])
if test "$ac_cv_cxx_compile_cxx0x_native" = yes || if test "$ac_cv_cxx_compile_cxx0x_native" = yes ||
test "$ac_cv_cxx_compile_cxx0x_cxx" = yes || test "$ac_cv_cxx_compile_cxx0x_cxx" = yes ||
test "$ac_cv_cxx_compile_cxx0x_gxx" = yes; then test "$ac_cv_cxx_compile_cxx0x_gxx" = yes; then
AC_DEFINE(HAVE_STDCXX_0X,,[Define if g++ supports C++0x features. ]) AC_DEFINE(HAVE_STDCXX_0X,,[Define if g++ supports C++0x features. ])
fi fi
...@@ -1112,7 +1112,7 @@ AC_DEFUN([AC_HEADER_STDCXX_0X], [ ...@@ -1112,7 +1112,7 @@ AC_DEFUN([AC_HEADER_STDCXX_0X], [
AC_LANG_SAVE AC_LANG_SAVE
AC_LANG_CPLUSPLUS AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS" ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -std=gnu++0x" CXXFLAGS="$CXXFLAGS -std=gnu++0x"
AC_TRY_COMPILE([ AC_TRY_COMPILE([
#include &lt;cassert&gt; #include &lt;cassert&gt;
...@@ -1202,7 +1202,7 @@ AC_DEFUN([AC_HEADER_UNORDERED_MAP], [ ...@@ -1202,7 +1202,7 @@ AC_DEFUN([AC_HEADER_UNORDERED_MAP], [
AC_LANG_SAVE AC_LANG_SAVE
AC_LANG_CPLUSPLUS AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS" ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -std=gnu++0x" CXXFLAGS="$CXXFLAGS -std=gnu++0x"
AC_TRY_COMPILE([#include &lt;unordered_map&gt;], [using std::unordered_map;], AC_TRY_COMPILE([#include &lt;unordered_map&gt;], [using std::unordered_map;],
ac_cv_cxx_unordered_map=yes, ac_cv_cxx_unordered_map=no) ac_cv_cxx_unordered_map=yes, ac_cv_cxx_unordered_map=no)
CXXFLAGS="$ac_save_CXXFLAGS" CXXFLAGS="$ac_save_CXXFLAGS"
...@@ -1223,7 +1223,7 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [ ...@@ -1223,7 +1223,7 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [
AC_LANG_SAVE AC_LANG_SAVE
AC_LANG_CPLUSPLUS AC_LANG_CPLUSPLUS
ac_save_CXXFLAGS="$CXXFLAGS" ac_save_CXXFLAGS="$CXXFLAGS"
CXXFLAGS="$CXXFLAGS -std=gnu++0x" CXXFLAGS="$CXXFLAGS -std=gnu++0x"
AC_TRY_COMPILE([#include &lt;unordered_set&gt;], [using std::unordered_set;], AC_TRY_COMPILE([#include &lt;unordered_set&gt;], [using std::unordered_set;],
ac_cv_cxx_unordered_set=yes, ac_cv_cxx_unordered_set=no) ac_cv_cxx_unordered_set=yes, ac_cv_cxx_unordered_set=no)
CXXFLAGS="$ac_save_CXXFLAGS" CXXFLAGS="$ac_save_CXXFLAGS"
...@@ -1254,61 +1254,42 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [ ...@@ -1254,61 +1254,42 @@ AC_DEFUN([AC_HEADER_UNORDERED_SET], [
<title>Bibliography</title> <title>Bibliography</title>
<biblioentry> <biblioentry>
<abbrev> <biblioid class="uri">
kegel41 <ulink url="http://www.kegel.com/gcc/gcc4.html">
</abbrev> <citetitle>
Migrating to GCC 4.1
<title> </citetitle>
Migrating to GCC 4.1 </ulink>
</title> </biblioid>
<author> <author>
<firstname>Dan</firstname> <firstname>Dan</firstname>
<surname>Kegel</surname> <surname>Kegel</surname>
</author> </author>
</biblioentry>
<biblioid> <biblioentry>
<ulink url="http://www.kegel.com/gcc/gcc4.html"> <biblioid class="uri">
<ulink url="http://lists.debian.org/debian-gcc/2006/03/msg00405.html">
<citetitle>
Building the Whole Debian Archive with GCC 4.1: A Summary
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry>
<biblioentry>
<abbrev>
kegel41
</abbrev>
<title>
Building the Whole Debian Archive with GCC 4.1: A Summary
</title>
<author> <author>
<firstname>Martin</firstname> <firstname>Martin</firstname>
<surname>Michlmayr</surname> <surname>Michlmayr</surname>
</author> </author>
</biblioentry>
<biblioid>
<ulink url="http://lists.debian.org/debian-gcc/2006/03/msg00405.html">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<abbrev> <biblioid class="uri">
lbl32
</abbrev>
<title>
Migration guide for GCC-3.2
</title>
<biblioid>
<ulink url="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html"> <ulink url="http://annwm.lbl.gov/~leggett/Atlas/gcc-3.2.html">
<citetitle>
Migration guide for GCC-3.2
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry> </biblioentry>
</bibliography> </bibliography>
......
<sect1 id="manual.localization.facet.codecvt" xreflabel="codecvt"> <sect1 id="manual.localization.facet.codecvt" xreflabel="codecvt">
<?dbhtml filename="codecvt.html"?> <?dbhtml filename="codecvt.html"?>
<sect1info> <sect1info>
<keywordset> <keywordset>
<keyword> <keyword>
...@@ -53,21 +53,21 @@ The text around the codecvt definition gives some clues: ...@@ -53,21 +53,21 @@ The text around the codecvt definition gives some clues:
-1- The class codecvt&lt;internT,externT,stateT&gt; is for use when -1- The class codecvt&lt;internT,externT,stateT&gt; is for use when
converting from one codeset to another, such as from wide characters converting from one codeset to another, such as from wide characters
to multibyte characters, between wide character encodings such as to multibyte characters, between wide character encodings such as
Unicode and EUC. Unicode and EUC.
</emphasis> </emphasis>
</para> </para>
</blockquote> </blockquote>
<para> <para>
Hmm. So, in some unspecified way, Unicode encodings and Hmm. So, in some unspecified way, Unicode encodings and
translations between other character sets should be handled by this translations between other character sets should be handled by this
class. class.
</para> </para>
<blockquote> <blockquote>
<para> <para>
<emphasis> <emphasis>
-2- The stateT argument selects the pair of codesets being mapped between. -2- The stateT argument selects the pair of codesets being mapped between.
</emphasis> </emphasis>
</para> </para>
</blockquote> </blockquote>
...@@ -248,7 +248,7 @@ when implemented using standard &quot;C&quot; functions. ...@@ -248,7 +248,7 @@ when implemented using standard &quot;C&quot; functions.
</para> </para>
<para> <para>
Three problems arise, one big, one of medium importance, and one small. Three problems arise, one big, one of medium importance, and one small.
</para> </para>
<para> <para>
...@@ -348,7 +348,7 @@ There are two constructors for encoding_state: ...@@ -348,7 +348,7 @@ There are two constructors for encoding_state:
</para> </para>
<para> <para>
<code> <code>
encoding_state() : __in_desc(0), __out_desc(0) encoding_state() : __in_desc(0), __out_desc(0)
</code> </code>
</para> </para>
...@@ -359,7 +359,7 @@ nl_langinfo(CODESET). ...@@ -359,7 +359,7 @@ nl_langinfo(CODESET).
</para> </para>
<para> <para>
<code> <code>
encoding_state(const char* __int, const char* __ext) encoding_state(const char* __int, const char* __ext)
</code> </code>
</para> </para>
...@@ -380,9 +380,9 @@ inducing) strategy was implemented: end-users can specify any string ...@@ -380,9 +380,9 @@ inducing) strategy was implemented: end-users can specify any string
encodings. It is up to the user to make sure that these strings are encodings. It is up to the user to make sure that these strings are
valid on the target system. valid on the target system.
</para> </para>
<para> <para>
<code> <code>
void void
_M_init() _M_init()
</code> </code>
...@@ -396,7 +396,7 @@ functions will return error. ...@@ -396,7 +396,7 @@ functions will return error.
</para> </para>
<para> <para>
<code> <code>
bool bool
_M_good() _M_good()
</code> </code>
...@@ -413,7 +413,7 @@ ready to convert and will return true. ...@@ -413,7 +413,7 @@ ready to convert and will return true.
</para> </para>
<para> <para>
<code> <code>
encoding_state(const encoding_state&amp;) encoding_state(const encoding_state&amp;)
</code> </code>
</para> </para>
...@@ -448,8 +448,8 @@ codecvt usage. ...@@ -448,8 +448,8 @@ codecvt usage.
const ext_type* e_lit = "black pearl jasmine tea"; const ext_type* e_lit = "black pearl jasmine tea";
int size = strlen(e_lit); int size = strlen(e_lit);
int_type i_lit_base[24] = int_type i_lit_base[24] =
{ 25088, 27648, 24832, 25344, 27392, 8192, 28672, 25856, 24832, 29184, { 25088, 27648, 24832, 25344, 27392, 8192, 28672, 25856, 24832, 29184,
27648, 8192, 27136, 24832, 29440, 27904, 26880, 28160, 25856, 8192, 29696, 27648, 8192, 27136, 24832, 29440, 27904, 26880, 28160, 25856, 8192, 29696,
25856, 24832, 2560 25856, 24832, 2560
}; };
...@@ -465,14 +465,14 @@ codecvt usage. ...@@ -465,14 +465,14 @@ codecvt usage.
locale loc(locale::classic(), new unicode_codecvt); locale loc(locale::classic(), new unicode_codecvt);
// sanity check the constructed locale has the specialized facet. // sanity check the constructed locale has the specialized facet.
VERIFY( has_facet&lt;unicode_codecvt&gt;(loc) ); VERIFY( has_facet&lt;unicode_codecvt&gt;(loc) );
const unicode_codecvt&amp; cvt = use_facet&lt;unicode_codecvt&gt;(loc); const unicode_codecvt&amp; cvt = use_facet&lt;unicode_codecvt&gt;(loc);
// convert between const char* and unicode strings // convert between const char* and unicode strings
unicode_codecvt::state_type state01("UNICODE", "ISO_8859-1"); unicode_codecvt::state_type state01("UNICODE", "ISO_8859-1");
initialize_state(state01); initialize_state(state01);
result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next, result r1 = cvt.in(state01, e_lit, e_lit + size, efrom_next,
i_arr, i_arr + size, ito_next); i_arr, i_arr + size, ito_next);
VERIFY( r1 == codecvt_base::ok ); VERIFY( r1 == codecvt_base::ok );
VERIFY( !int_traits::compare(i_arr, i_lit, size) ); VERIFY( !int_traits::compare(i_arr, i_lit, size) );
VERIFY( efrom_next == e_lit + size ); VERIFY( efrom_next == e_lit + size );
VERIFY( ito_next == i_arr + size ); VERIFY( ito_next == i_arr + size );
</programlisting> </programlisting>
...@@ -505,7 +505,7 @@ codecvt usage. ...@@ -505,7 +505,7 @@ codecvt usage.
what is equal? A byte by byte comparison or an what is equal? A byte by byte comparison or an
encoding then byte comparison? encoding then byte comparison?
</para></listitem> </para></listitem>
<listitem><para> <listitem><para>
conversions between narrow, wide, and unicode strings conversions between narrow, wide, and unicode strings
</para></listitem> </para></listitem>
...@@ -520,12 +520,12 @@ codecvt usage. ...@@ -520,12 +520,12 @@ codecvt usage.
standards-conformant manner? standards-conformant manner?
</para></listitem> </para></listitem>
<listitem><para> <listitem><para>
how to synchronize the &quot;C&quot; and &quot;C++&quot; how to synchronize the &quot;C&quot; and &quot;C++&quot;
conversion information? conversion information?
</para></listitem> </para></listitem>
<listitem><para> <listitem><para>
wchar_t/char internal buffers and conversions between wchar_t/char internal buffers and conversions between
internal/external buffers? internal/external buffers?
</para></listitem> </para></listitem>
...@@ -542,7 +542,6 @@ codecvt usage. ...@@ -542,7 +542,6 @@ codecvt usage.
<title> <title>
The GNU C Library The GNU C Library
</title> </title>
<author> <author>
<surname>McGrath</surname> <surname>McGrath</surname>
<firstname>Roland</firstname> <firstname>Roland</firstname>
...@@ -551,94 +550,85 @@ codecvt usage. ...@@ -551,94 +550,85 @@ codecvt usage.
<surname>Drepper</surname> <surname>Drepper</surname>
<firstname>Ulrich</firstname> <firstname>Ulrich</firstname>
</author> </author>
<copyright> <copyright>
<year>2007</year> <year>2007</year>
<holder>FSF</holder> <holder>FSF</holder>
</copyright> </copyright>
<pagenums>Chapters 6 Character Set Handling and 7 Locales and Internationalization</pagenums> <pagenums>
Chapters 6 Character Set Handling and 7 Locales and Internationalization
</biblioentry> </pagenums>
</biblioentry>
<biblioentry> <biblioentry>
<title> <title>
Correspondence Correspondence
</title> </title>
<author> <author>
<surname>Drepper</surname> <surname>Drepper</surname>
<firstname>Ulrich</firstname> <firstname>Ulrich</firstname>
</author> </author>
<copyright> <copyright>
<year>2002</year> <year>2002</year>
<holder></holder> <holder></holder>
</copyright> </copyright>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <title>
ISO/IEC 14882:1998 Programming languages - C++ ISO/IEC 14882:1998 Programming languages - C++
</title> </title>
<copyright> <copyright>
<year>1998</year> <year>1998</year>
<holder>ISO</holder> <holder>ISO</holder>
</copyright> </copyright>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <title>
ISO/IEC 9899:1999 Programming languages - C ISO/IEC 9899:1999 Programming languages - C
</title> </title>
<copyright> <copyright>
<year>1999</year> <year>1999</year>
<holder>ISO</holder> <holder>ISO</holder>
</copyright> </copyright>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004) <ulink url="http://www.opengroup.org/austin">
</title> <citetitle>
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
</citetitle>
</ulink>
</biblioid>
<copyright> <copyright>
<year>1999</year> <year>2008</year>
<holder> <holder>
The Open Group/The Institute of Electrical and Electronics Engineers, Inc.</holder> The Open Group/The Institute of Electrical and Electronics
Engineers, Inc.
</holder>
</copyright> </copyright>
</biblioentry>
<biblioid>
<ulink url="http://www.unix.org/version3/ieee_std.html">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <title>
The C++ Programming Language, Special Edition The C++ Programming Language, Special Edition
</title> </title>
<author> <author>
<surname>Stroustrup</surname> <surname>Stroustrup</surname>
<firstname>Bjarne</firstname> <firstname>Bjarne</firstname>
</author> </author>
<copyright> <copyright>
<year>2000</year> <year>2000</year>
<holder>Addison Wesley, Inc.</holder> <holder>Addison Wesley, Inc.</holder>
</copyright> </copyright>
<pagenums>Appendix D</pagenums> <pagenums>Appendix D</pagenums>
<publisher> <publisher>
<publishername> <publishername>
Addison Wesley Addison Wesley
</publishername> </publishername>
</publisher> </publisher>
</biblioentry>
</biblioentry>
<biblioentry> <biblioentry>
...@@ -648,82 +638,67 @@ codecvt usage. ...@@ -648,82 +638,67 @@ codecvt usage.
<subtitle> <subtitle>
Advanced Programmer's Guide and Reference Advanced Programmer's Guide and Reference
</subtitle> </subtitle>
<author> <author>
<surname>Langer</surname> <surname>Langer</surname>
<firstname>Angelika</firstname> <firstname>Angelika</firstname>
</author> </author>
<author> <author>
<surname>Kreft</surname> <surname>Kreft</surname>
<firstname>Klaus</firstname> <firstname>Klaus</firstname>
</author> </author>
<copyright> <copyright>
<year>2000</year> <year>2000</year>
<holder>Addison Wesley Longman, Inc.</holder> <holder>Addison Wesley Longman, Inc.</holder>
</copyright> </copyright>
<publisher> <publisher>
<publishername> <publishername>
Addison Wesley Longman Addison Wesley Longman
</publishername> </publishername>
</publisher> </publisher>
</biblioentry>
</biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
A brief description of Normative Addendum 1 <ulink url="http://www.lysator.liu.se/c/na1.html">
</title> <citetitle>
A brief description of Normative Addendum 1
</citetitle>
</ulink>
</biblioid>
<author> <author>
<surname>Feather</surname> <surname>Feather</surname>
<firstname>Clive</firstname> <firstname>Clive</firstname>
</author> </author>
<pagenums>Extended Character Sets</pagenums> <pagenums>Extended Character Sets</pagenums>
<biblioid> </biblioentry>
<ulink url="http://www.lysator.liu.se/c/na1.html">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
The Unicode HOWTO <ulink url="http://tldp.org/HOWTO/Unicode-HOWTO.html">
</title> <citetitle>
The Unicode HOWTO
</citetitle>
</ulink>
</biblioid>
<author> <author>
<surname>Haible</surname> <surname>Haible</surname>
<firstname>Bruno</firstname> <firstname>Bruno</firstname>
</author> </author>
</biblioentry>
<biblioid> <biblioentry>
<ulink url="http://tldp.org/HOWTO/Unicode-HOWTO.html"> <biblioid class="uri">
<ulink url="http://www.cl.cam.ac.uk/~mgk25/unicode.html">
<citetitle>
UTF-8 and Unicode FAQ for Unix/Linux
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry>
<biblioentry>
<title>
UTF-8 and Unicode FAQ for Unix/Linux
</title>
<author> <author>
<surname>Khun</surname> <surname>Khun</surname>
<firstname>Markus</firstname> <firstname>Markus</firstname>
</author> </author>
</biblioentry>
<biblioid>
<ulink url="http://www.cl.cam.ac.uk/~mgk25/unicode.html">
</ulink>
</biblioid>
</biblioentry>
</bibliography> </bibliography>
......
<sect1 id="manual.localization.facet.ctype" xreflabel="ctype"> <sect1 id="manual.localization.facet.ctype" xreflabel="ctype">
<?dbhtml filename="ctype.html"?> <?dbhtml filename="ctype.html"?>
<sect1info> <sect1info>
<keywordset> <keywordset>
<keyword> <keyword>
...@@ -67,45 +67,45 @@ characters. ...@@ -67,45 +67,45 @@ characters.
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
How to deal with the global locale issue? How to deal with the global locale issue?
</para></listitem> </para></listitem>
<listitem> <listitem>
<para> <para>
How to deal with different types than char, wchar_t? </para></listitem> How to deal with different types than char, wchar_t? </para></listitem>
<listitem><para> <listitem><para>
Overlap between codecvt/ctype: narrow/widen Overlap between codecvt/ctype: narrow/widen
</para></listitem> </para></listitem>
<listitem> <listitem>
<para> <para>
Mask typedef in codecvt_base, argument types in codecvt. what Mask typedef in codecvt_base, argument types in codecvt. what
is know about this type? is know about this type?
</para></listitem> </para></listitem>
<listitem> <listitem>
<para> <para>
Why mask* argument in codecvt? Why mask* argument in codecvt?
</para></listitem> </para></listitem>
<listitem> <listitem>
<para> <para>
Can this be made (more) generic? is there a simple way to Can this be made (more) generic? is there a simple way to
straighten out the configure-time mess that is a by-product of straighten out the configure-time mess that is a by-product of
this class? this class?
</para></listitem> </para></listitem>
<listitem> <listitem>
<para> <para>
Get the ctype&lt;wchar_t&gt;::mask stuff under control. Need to Get the ctype&lt;wchar_t&gt;::mask stuff under control. Need to
make some kind of static table, and not do lookup every time make some kind of static table, and not do lookup every time
somebody hits the do_is... functions. Too bad we can't just somebody hits the do_is... functions. Too bad we can't just
redefine mask for ctype&lt;wchar_t&gt; redefine mask for ctype&lt;wchar_t&gt;
</para></listitem> </para></listitem>
<listitem> <listitem>
<para> <para>
Rename abstract base class. See if just smash-overriding is a Rename abstract base class. See if just smash-overriding is a
better approach. Clarify, add sanity to naming. better approach. Clarify, add sanity to naming.
</para> </para>
...@@ -124,7 +124,6 @@ characters. ...@@ -124,7 +124,6 @@ characters.
<title> <title>
The GNU C Library The GNU C Library
</title> </title>
<author> <author>
<surname>McGrath</surname> <surname>McGrath</surname>
<firstname>Roland</firstname> <firstname>Roland</firstname>
...@@ -133,95 +132,81 @@ characters. ...@@ -133,95 +132,81 @@ characters.
<surname>Drepper</surname> <surname>Drepper</surname>
<firstname>Ulrich</firstname> <firstname>Ulrich</firstname>
</author> </author>
<copyright> <copyright>
<year>2007</year> <year>2007</year>
<holder>FSF</holder> <holder>FSF</holder>
</copyright> </copyright>
<pagenums>Chapters 6 Character Set Handling and 7 Locales and Internationalization</pagenums> <pagenums>Chapters 6 Character Set Handling and 7 Locales and Internationalization</pagenums>
</biblioentry>
</biblioentry>
<biblioentry> <biblioentry>
<title> <title>
Correspondence Correspondence
</title> </title>
<author> <author>
<surname>Drepper</surname> <surname>Drepper</surname>
<firstname>Ulrich</firstname> <firstname>Ulrich</firstname>
</author> </author>
<copyright> <copyright>
<year>2002</year> <year>2002</year>
<holder></holder> <holder></holder>
</copyright> </copyright>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <title>
ISO/IEC 14882:1998 Programming languages - C++ ISO/IEC 14882:1998 Programming languages - C++
</title> </title>
<copyright> <copyright>
<year>1998</year> <year>1998</year>
<holder>ISO</holder> <holder>ISO</holder>
</copyright> </copyright>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <title>
ISO/IEC 9899:1999 Programming languages - C ISO/IEC 9899:1999 Programming languages - C
</title> </title>
<copyright> <copyright>
<year>1999</year> <year>1999</year>
<holder>ISO</holder> <holder>ISO</holder>
</copyright> </copyright>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004) <ulink url="http://www.unix.org/version3/ieee_std.html">
</title> <citetitle>
The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004)
</citetitle>
</ulink>
</biblioid>
<copyright> <copyright>
<year>1999</year> <year>1999</year>
<holder> <holder>
The Open Group/The Institute of Electrical and Electronics Engineers, Inc.</holder> The Open Group/The Institute of Electrical and Electronics Engineers, Inc.</holder>
</copyright> </copyright>
</biblioentry>
<biblioid>
<ulink url="http://www.unix.org/version3/ieee_std.html">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <title>
The C++ Programming Language, Special Edition The C++ Programming Language, Special Edition
</title> </title>
<author> <author>
<surname>Stroustrup</surname> <surname>Stroustrup</surname>
<firstname>Bjarne</firstname> <firstname>Bjarne</firstname>
</author> </author>
<copyright> <copyright>
<year>2000</year> <year>2000</year>
<holder>Addison Wesley, Inc.</holder> <holder>Addison Wesley, Inc.</holder>
</copyright> </copyright>
<pagenums>Appendix D</pagenums> <pagenums>Appendix D</pagenums>
<publisher> <publisher>
<publishername> <publishername>
Addison Wesley Addison Wesley
</publishername> </publishername>
</publisher> </publisher>
</biblioentry>
</biblioentry>
<biblioentry> <biblioentry>
<title> <title>
...@@ -230,29 +215,24 @@ characters. ...@@ -230,29 +215,24 @@ characters.
<subtitle> <subtitle>
Advanced Programmer's Guide and Reference Advanced Programmer's Guide and Reference
</subtitle> </subtitle>
<author> <author>
<surname>Langer</surname> <surname>Langer</surname>
<firstname>Angelika</firstname> <firstname>Angelika</firstname>
</author> </author>
<author> <author>
<surname>Kreft</surname> <surname>Kreft</surname>
<firstname>Klaus</firstname> <firstname>Klaus</firstname>
</author> </author>
<copyright> <copyright>
<year>2000</year> <year>2000</year>
<holder>Addison Wesley Longman, Inc.</holder> <holder>Addison Wesley Longman, Inc.</holder>
</copyright> </copyright>
<publisher> <publisher>
<publishername> <publishername>
Addison Wesley Longman Addison Wesley Longman
</publishername> </publishername>
</publisher> </publisher>
</biblioentry>
</biblioentry>
</bibliography> </bibliography>
......
<sect1 id="manual.localization.locales.locale" xreflabel="Locale"> <sect1 id="manual.localization.locales.locale" xreflabel="Locale">
<sect1info> <sect1info>
<keywordset> <keywordset>
<keyword> <keyword>
...@@ -113,8 +113,8 @@ portability is an issue. ...@@ -113,8 +113,8 @@ portability is an issue.
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para> <para>
<code>`locale -a`</code> displays available locales. <code>`locale -a`</code> displays available locales.
</para> </para>
<blockquote> <blockquote>
<programlisting> <programlisting>
...@@ -419,9 +419,9 @@ zh_TW.utf8 ...@@ -419,9 +419,9 @@ zh_TW.utf8
</programlisting> </programlisting>
</blockquote> </blockquote>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
<code>`locale`</code> displays environmental variables that <code>`locale`</code> displays environmental variables that
impact how locale("") will be deduced. impact how locale("") will be deduced.
</para> </para>
...@@ -478,33 +478,33 @@ global locale" (emphasis Paolo), that is: ...@@ -478,33 +478,33 @@ global locale" (emphasis Paolo), that is:
<para> <para>
Locale initialization: at what point does _S_classic, _S_global Locale initialization: at what point does _S_classic, _S_global
get initialized? Can named locales assume this initialization get initialized? Can named locales assume this initialization
has already taken place? has already taken place?
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Document how named locales error check when filling data Document how named locales error check when filling data
members. I.e., a fr_FR locale that doesn't have members. I.e., a fr_FR locale that doesn't have
numpunct::truename(): does it use "true"? Or is it a blank numpunct::truename(): does it use "true"? Or is it a blank
string? What's the convention? string? What's the convention?
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Explain how locale aliasing happens. When does "de_DE" use "de" Explain how locale aliasing happens. When does "de_DE" use "de"
information? What is the rule for locales composed of just an information? What is the rule for locales composed of just an
ISO language code (say, "de") and locales with both an ISO ISO language code (say, "de") and locales with both an ISO
language code and ISO country code (say, "de_DE"). language code and ISO country code (say, "de_DE").
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
What should non-required facet instantiations do? If the What should non-required facet instantiations do? If the
generic implementation is provided, then how to end-users generic implementation is provided, then how to end-users
provide specializations? provide specializations?
</para> </para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
...@@ -517,7 +517,6 @@ global locale" (emphasis Paolo), that is: ...@@ -517,7 +517,6 @@ global locale" (emphasis Paolo), that is:
<title> <title>
The GNU C Library The GNU C Library
</title> </title>
<author> <author>
<surname>McGrath</surname> <surname>McGrath</surname>
<firstname>Roland</firstname> <firstname>Roland</firstname>
...@@ -526,95 +525,86 @@ global locale" (emphasis Paolo), that is: ...@@ -526,95 +525,86 @@ global locale" (emphasis Paolo), that is:
<surname>Drepper</surname> <surname>Drepper</surname>
<firstname>Ulrich</firstname> <firstname>Ulrich</firstname>
</author> </author>
<copyright> <copyright>
<year>2007</year> <year>2007</year>
<holder>FSF</holder> <holder>FSF</holder>
</copyright> </copyright>
<pagenums>Chapters 6 Character Set Handling and 7 Locales and Internationalization</pagenums> <pagenums>
Chapters 6 Character Set Handling and 7 Locales and
</biblioentry> Internationalization
</pagenums>
</biblioentry>
<biblioentry> <biblioentry>
<title> <title>
Correspondence Correspondence
</title> </title>
<author> <author>
<surname>Drepper</surname> <surname>Drepper</surname>
<firstname>Ulrich</firstname> <firstname>Ulrich</firstname>
</author> </author>
<copyright> <copyright>
<year>2002</year> <year>2002</year>
<holder></holder> <holder></holder>
</copyright> </copyright>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <title>
ISO/IEC 14882:1998 Programming languages - C++ ISO/IEC 14882:1998 Programming languages - C++
</title> </title>
<copyright> <copyright>
<year>1998</year> <year>1998</year>
<holder>ISO</holder> <holder>ISO</holder>
</copyright> </copyright>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <title>
ISO/IEC 9899:1999 Programming languages - C ISO/IEC 9899:1999 Programming languages - C
</title> </title>
<copyright> <copyright>
<year>1999</year> <year>1999</year>
<holder>ISO</holder> <holder>ISO</holder>
</copyright> </copyright>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
The Open Group Base Specifications, Issue 6 (IEEE Std. 1003.1-2004) <ulink url="http://www.opengroup.org/austin">
</title> <citetitle>
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
</citetitle>
</ulink>
</biblioid>
<copyright> <copyright>
<year>1999</year> <year>2008</year>
<holder> <holder>
The Open Group/The Institute of Electrical and Electronics Engineers, Inc.</holder> The Open Group/The Institute of Electrical and Electronics
Engineers, Inc.
</holder>
</copyright> </copyright>
</biblioentry>
<biblioid>
<ulink url="http://www.unix.org/version3/ieee_std.html">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <title>
The C++ Programming Language, Special Edition The C++ Programming Language, Special Edition
</title> </title>
<author> <author>
<surname>Stroustrup</surname> <surname>Stroustrup</surname>
<firstname>Bjarne</firstname> <firstname>Bjarne</firstname>
</author> </author>
<copyright> <copyright>
<year>2000</year> <year>2000</year>
<holder>Addison Wesley, Inc.</holder> <holder>Addison Wesley, Inc.</holder>
</copyright> </copyright>
<pagenums>Appendix D</pagenums> <pagenums>Appendix D</pagenums>
<publisher> <publisher>
<publishername> <publishername>
Addison Wesley Addison Wesley
</publishername> </publishername>
</publisher> </publisher>
</biblioentry>
</biblioentry>
<biblioentry> <biblioentry>
<title> <title>
...@@ -623,29 +613,24 @@ global locale" (emphasis Paolo), that is: ...@@ -623,29 +613,24 @@ global locale" (emphasis Paolo), that is:
<subtitle> <subtitle>
Advanced Programmer's Guide and Reference Advanced Programmer's Guide and Reference
</subtitle> </subtitle>
<author> <author>
<surname>Langer</surname> <surname>Langer</surname>
<firstname>Angelika</firstname> <firstname>Angelika</firstname>
</author> </author>
<author> <author>
<surname>Kreft</surname> <surname>Kreft</surname>
<firstname>Klaus</firstname> <firstname>Klaus</firstname>
</author> </author>
<copyright> <copyright>
<year>2000</year> <year>2000</year>
<holder>Addison Wesley Longman, Inc.</holder> <holder>Addison Wesley Longman, Inc.</holder>
</copyright> </copyright>
<publisher> <publisher>
<publishername> <publishername>
Addison Wesley Longman Addison Wesley Longman
</publishername> </publishername>
</publisher> </publisher>
</biblioentry>
</biblioentry>
</bibliography> </bibliography>
......
<sect1 id="manual.localization.facet.messages" xreflabel="Messages"> <sect1 id="manual.localization.facet.messages" xreflabel="Messages">
<?dbhtml filename="messages.html"?> <?dbhtml filename="messages.html"?>
<sect1info> <sect1info>
<keywordset> <keywordset>
<keyword> <keyword>
...@@ -40,7 +40,7 @@ during program execution. ...@@ -40,7 +40,7 @@ during program execution.
<para> <para>
This class has three public member functions, which directly This class has three public member functions, which directly
correspond to three protected virtual member functions. correspond to three protected virtual member functions.
</para> </para>
<para> <para>
...@@ -84,7 +84,7 @@ catalog can be opened. ...@@ -84,7 +84,7 @@ catalog can be opened.
<blockquote> <blockquote>
<para> <para>
<emphasis> <emphasis>
-3- Requires: A catalog cat obtained from open() and not yet closed. -3- Requires: A catalog cat obtained from open() and not yet closed.
-4- Returns: A message identified by arguments set, msgid, and dfault, -4- Returns: A message identified by arguments set, msgid, and dfault,
according to an implementation-defined mapping. If no such message can according to an implementation-defined mapping. If no such message can
be found, returns dfault. be found, returns dfault.
...@@ -98,9 +98,9 @@ be found, returns dfault. ...@@ -98,9 +98,9 @@ be found, returns dfault.
<blockquote> <blockquote>
<para> <para>
<emphasis> <emphasis>
-5- Requires: A catalog cat obtained from open() and not yet closed. -5- Requires: A catalog cat obtained from open() and not yet closed.
-6- Effects: Releases unspecified resources associated with cat. -6- Effects: Releases unspecified resources associated with cat.
-7- Notes: The limit on such resources, if any, is implementation-defined. -7- Notes: The limit on such resources, if any, is implementation-defined.
</emphasis> </emphasis>
</para> </para>
</blockquote> </blockquote>
...@@ -112,14 +112,14 @@ be found, returns dfault. ...@@ -112,14 +112,14 @@ be found, returns dfault.
<title>Design</title> <title>Design</title>
<para> <para>
A couple of notes on the standard. A couple of notes on the standard.
</para> </para>
<para> <para>
First, why is <code>messages_base::catalog</code> specified as a typedef First, why is <code>messages_base::catalog</code> specified as a typedef
to int? This makes sense for implementations that use to int? This makes sense for implementations that use
<code>catopen</code>, but not for others. Fortunately, it's not heavily <code>catopen</code>, but not for others. Fortunately, it's not heavily
used and so only a minor irritant. used and so only a minor irritant.
</para> </para>
<para> <para>
...@@ -145,7 +145,7 @@ reflection. ...@@ -145,7 +145,7 @@ reflection.
Lastly, it seems odd that messages, which explicitly require code Lastly, it seems odd that messages, which explicitly require code
conversion, don't use the codecvt facet. Because the messages facet conversion, don't use the codecvt facet. Because the messages facet
has only one template parameter, it is assumed that ctype, and not has only one template parameter, it is assumed that ctype, and not
codecvt, is to be used to convert between character sets. codecvt, is to be used to convert between character sets.
</para> </para>
<para> <para>
...@@ -183,12 +183,12 @@ other, explicitly named locales. ...@@ -183,12 +183,12 @@ other, explicitly named locales.
generic generic
</para> </para>
<para> <para>
This model does very little, and is what is used by default. This model does very little, and is what is used by default.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
gnu gnu
</para> </para>
<para> <para>
...@@ -203,7 +203,7 @@ other, explicitly named locales. ...@@ -203,7 +203,7 @@ other, explicitly named locales.
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
ieee_1003.1-200x ieee_1003.1-200x
</para> </para>
<para> <para>
...@@ -257,14 +257,14 @@ model. ...@@ -257,14 +257,14 @@ model.
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Make initial catalog (see "4 Making the PO Template File" from Make initial catalog (see "4 Making the PO Template File" from
the gettext docs).</para> the gettext docs).</para>
<para> <para>
<code> xgettext --c++ --debug string_literals.cc -o libstdc++.pot </code> <code> xgettext --c++ --debug string_literals.cc -o libstdc++.pot </code>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para>Make language and country-specific locale catalogs.</para> <para>Make language and country-specific locale catalogs.</para>
<para> <para>
...@@ -284,7 +284,7 @@ model. ...@@ -284,7 +284,7 @@ model.
<code>emacs fr_FR.po</code> <code>emacs fr_FR.po</code>
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
<para>Make the binary mo files.</para> <para>Make the binary mo files.</para>
<para> <para>
...@@ -336,9 +336,9 @@ void test01() ...@@ -336,9 +336,9 @@ void test01()
{ {
typedef messages&lt;char&gt;::catalog catalog; typedef messages&lt;char&gt;::catalog catalog;
const char* dir = const char* dir =
"/mnt/egcs/build/i686-pc-linux-gnu/libstdc++/po/share/locale"; "/mnt/egcs/build/i686-pc-linux-gnu/libstdc++/po/share/locale";
const locale loc_de("de_DE"); const locale loc_de("de_DE");
const messages&lt;char&gt;&amp; mssg_de = use_facet&lt;messages&lt;char&gt; &gt;(loc_de); const messages&lt;char&gt;&amp; mssg_de = use_facet&lt;messages&lt;char&gt; &gt;(loc_de);
catalog cat_de = mssg_de.open("libstdc++", loc_de, dir); catalog cat_de = mssg_de.open("libstdc++", loc_de, dir);
string s01 = mssg_de.get(cat_de, 0, 0, "please"); string s01 = mssg_de.get(cat_de, 0, 0, "please");
...@@ -373,7 +373,7 @@ void test01() ...@@ -373,7 +373,7 @@ void test01()
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
There are issues with gettext needing the global locale set There are issues with gettext needing the global locale set
to extract a message. This dependence on the global locale to extract a message. This dependence on the global locale
makes the current "gnu" model non MT-safe. Future versions makes the current "gnu" model non MT-safe. Future versions
...@@ -385,7 +385,7 @@ void test01() ...@@ -385,7 +385,7 @@ void test01()
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
Development versions of the GNU "C" library, glibc 2.3 will allow Development versions of the GNU "C" library, glibc 2.3 will allow
a more efficient, MT implementation of std::messages, and will a more efficient, MT implementation of std::messages, and will
allow the removal of the _M_name_messages data member. If this is allow the removal of the _M_name_messages data member. If this is
...@@ -414,14 +414,14 @@ void test01() ...@@ -414,14 +414,14 @@ void test01()
<para> <para>
<code> <code>
catalog catalog
open(const basic_string&lt;char&gt;&amp; __s, const locale&amp; __loc) const open(const basic_string&lt;char&gt;&amp; __s, const locale&amp; __loc) const
</code> </code>
</para> </para>
<para> <para>
<code> <code>
catalog catalog
open(const basic_string&lt;char&gt;&amp;, const locale&amp;, const char*) const; open(const basic_string&lt;char&gt;&amp;, const locale&amp;, const char*) const;
</code> </code>
</para> </para>
...@@ -445,7 +445,6 @@ void test01() ...@@ -445,7 +445,6 @@ void test01()
<title> <title>
The GNU C Library The GNU C Library
</title> </title>
<author> <author>
<surname>McGrath</surname> <surname>McGrath</surname>
<firstname>Roland</firstname> <firstname>Roland</firstname>
...@@ -454,42 +453,37 @@ void test01() ...@@ -454,42 +453,37 @@ void test01()
<surname>Drepper</surname> <surname>Drepper</surname>
<firstname>Ulrich</firstname> <firstname>Ulrich</firstname>
</author> </author>
<copyright> <copyright>
<year>2007</year> <year>2007</year>
<holder>FSF</holder> <holder>FSF</holder>
</copyright> </copyright>
<pagenums>Chapters 6 Character Set Handling, and 7 Locales and Internationalization <pagenums>Chapters 6 Character Set Handling, and 7 Locales and Internationalization
</pagenums> </pagenums>
</biblioentry>
</biblioentry>
<biblioentry> <biblioentry>
<title> <title>
Correspondence Correspondence
</title> </title>
<author> <author>
<surname>Drepper</surname> <surname>Drepper</surname>
<firstname>Ulrich</firstname> <firstname>Ulrich</firstname>
</author> </author>
<copyright> <copyright>
<year>2002</year> <year>2002</year>
<holder></holder> <holder></holder>
</copyright> </copyright>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <title>
ISO/IEC 14882:1998 Programming languages - C++ ISO/IEC 14882:1998 Programming languages - C++
</title> </title>
<copyright> <copyright>
<year>1998</year> <year>1998</year>
<holder>ISO</holder> <holder>ISO</holder>
</copyright> </copyright>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <title>
...@@ -500,50 +494,44 @@ void test01() ...@@ -500,50 +494,44 @@ void test01()
<year>1999</year> <year>1999</year>
<holder>ISO</holder> <holder>ISO</holder>
</copyright> </copyright>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
System Interface Definitions, Issue 6 (IEEE Std. 1003.1-200x) <ulink url="http://www.opengroup.org/austin">
</title> <citetitle>
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
</citetitle>
</ulink>
</biblioid>
<copyright> <copyright>
<year>1999</year> <year>2008</year>
<holder> <holder>
The Open Group/The Institute of Electrical and Electronics Engineers, Inc.</holder> The Open Group/The Institute of Electrical and Electronics
Engineers, Inc.
</holder>
</copyright> </copyright>
</biblioentry>
<biblioid>
<ulink url="http://www.opengroup.org/austin/">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <title>
The C++ Programming Language, Special Edition The C++ Programming Language, Special Edition
</title> </title>
<author> <author>
<surname>Stroustrup</surname> <surname>Stroustrup</surname>
<firstname>Bjarne</firstname> <firstname>Bjarne</firstname>
</author> </author>
<copyright> <copyright>
<year>2000</year> <year>2000</year>
<holder>Addison Wesley, Inc.</holder> <holder>Addison Wesley, Inc.</holder>
</copyright> </copyright>
<pagenums>Appendix D</pagenums> <pagenums>Appendix D</pagenums>
<publisher> <publisher>
<publishername> <publishername>
Addison Wesley Addison Wesley
</publishername> </publishername>
</publisher> </publisher>
</biblioentry>
</biblioentry>
<biblioentry> <biblioentry>
<title> <title>
...@@ -552,52 +540,48 @@ void test01() ...@@ -552,52 +540,48 @@ void test01()
<subtitle> <subtitle>
Advanced Programmer's Guide and Reference Advanced Programmer's Guide and Reference
</subtitle> </subtitle>
<author> <author>
<surname>Langer</surname> <surname>Langer</surname>
<firstname>Angelika</firstname> <firstname>Angelika</firstname>
</author> </author>
<author> <author>
<surname>Kreft</surname> <surname>Kreft</surname>
<firstname>Klaus</firstname> <firstname>Klaus</firstname>
</author> </author>
<copyright> <copyright>
<year>2000</year> <year>2000</year>
<holder>Addison Wesley Longman, Inc.</holder> <holder>Addison Wesley Longman, Inc.</holder>
</copyright> </copyright>
<publisher> <publisher>
<publishername> <publishername>
Addison Wesley Longman Addison Wesley Longman
</publishername> </publishername>
</publisher> </publisher>
</biblioentry>
</biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
Java 2 Platform, Standard Edition, v 1.3.1 API Specification
</title>
<pagenums>java.util.Properties, java.text.MessageFormat,
java.util.Locale, java.util.ResourceBundle</pagenums>
<biblioid>
<ulink url="http://java.sun.com/reference/api/index.html"> <ulink url="http://java.sun.com/reference/api/index.html">
<citetitle>
API Specifications, Java Platform
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry> <pagenums>java.util.Properties, java.text.MessageFormat,
java.util.Locale, java.util.ResourceBundle
</pagenums>
</biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
GNU gettext tools, version 0.10.38, Native Language Support
Library and Tools.
</title>
<biblioid>
<ulink url="http://www.gnu.org/software/gettext/"> <ulink url="http://www.gnu.org/software/gettext/">
<citetitle>
GNU gettext tools, version 0.10.38, Native Language Support
Library and Tools.
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry> </biblioentry>
</bibliography> </bibliography>
......
...@@ -225,7 +225,7 @@ vector-size: improvement = 3: call stack = 0x804842c ... ...@@ -225,7 +225,7 @@ vector-size: improvement = 3: call stack = 0x804842c ...
<para> <para>
</para> </para>
<table frame='all'> <table frame='all'>
<title>Code Location</title> <title>Profile Code Location</title>
<tgroup cols='2' align='left' colsep='1' rowsep='1'> <tgroup cols='2' align='left' colsep='1' rowsep='1'>
<colspec colname='c1'></colspec> <colspec colname='c1'></colspec>
<colspec colname='c2'></colspec> <colspec colname='c2'></colspec>
...@@ -713,7 +713,7 @@ it helps the user focus on the key problems and ignore the uninteresting ones. ...@@ -713,7 +713,7 @@ it helps the user focus on the key problems and ignore the uninteresting ones.
</para> </para>
<table frame='all'> <table frame='all'>
<title>Diagnostics</title> <title>Profile Diagnostics</title>
<tgroup cols='6' align='left' colsep='1' rowsep='1'> <tgroup cols='6' align='left' colsep='1' rowsep='1'>
<colspec colname='c1'></colspec> <colspec colname='c1'></colspec>
<colspec colname='c2'></colspec> <colspec colname='c2'></colspec>
......
...@@ -501,78 +501,55 @@ the following types, depending on how the shared_ptr is constructed. ...@@ -501,78 +501,55 @@ the following types, depending on how the shared_ptr is constructed.
<title>Bibliography</title> <title>Bibliography</title>
<biblioentry> <biblioentry>
<abbrev> <biblioid class="uri">
n2351
</abbrev>
<title>
Improving shared_ptr for C++0x, Revision 2
</title>
<subtitle>
N2351
</subtitle>
<biblioid>
<ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm"> <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm">
<citetitle>
Improving shared_ptr for C++0x, Revision 2
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry>
<biblioentry>
<abbrev>
n2456
</abbrev>
<title>
C++ Standard Library Active Issues List (Revision R52)
</title>
<subtitle> <subtitle>
N2456 N2351
</subtitle> </subtitle>
</biblioentry>
<biblioid> <biblioentry>
<biblioid class="uri">
<ulink url="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html"> <ulink url="http://open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2456.html">
<citetitle>
C++ Standard Library Active Issues List
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry>
<biblioentry>
<abbrev>
n2461
</abbrev>
<title>
Working Draft, Standard for Programming Language C++
</title>
<subtitle> <subtitle>
N2461 N2456
</subtitle> </subtitle>
</biblioentry>
<biblioid> <biblioentry>
<biblioid class="uri">
<ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf"> <ulink url="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2461.pdf">
<citetitle>
Working Draft, Standard for Programming Language C++
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry>
<biblioentry>
<abbrev>
boostshared_ptr
</abbrev>
<title>
Boost C++ Libraries documentation - shared_ptr class template
</title>
<subtitle> <subtitle>
N2461 N2461
</subtitle> </subtitle>
</biblioentry>
<biblioid> <biblioentry>
<biblioid class="uri">
<ulink url="http://boost.org/libs/smart_ptr/shared_ptr.htm">shared_ptr <ulink url="http://boost.org/libs/smart_ptr/shared_ptr.htm">shared_ptr
<citetitle>
Boost C++ Libraries documentation, shared_ptr
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
<subtitle>
N2461
</subtitle>
</biblioentry> </biblioentry>
</bibliography> </bibliography>
......
...@@ -39,7 +39,7 @@ the <literal>throw</literal> keyword. ...@@ -39,7 +39,7 @@ the <literal>throw</literal> keyword.
These are very powerful constructs, and require some thought when These are very powerful constructs, and require some thought when
applied to the standard library in order to yield components that work applied to the standard library in order to yield components that work
efficiently while cleaning up resources when unexpectedly killed via efficiently while cleaning up resources when unexpectedly killed via
exceptional circumstances. exceptional circumstances.
</para> </para>
<para> <para>
...@@ -51,8 +51,8 @@ exception neutrality and exception safety. ...@@ -51,8 +51,8 @@ exception neutrality and exception safety.
<sect2 id="intro.using.exception.safety" xreflabel="Exception Safety"> <sect2 id="intro.using.exception.safety" xreflabel="Exception Safety">
<title>Exception Safety</title> <title>Exception Safety</title>
<para> <para>
What is exception-safe code? What is exception-safe code?
</para> </para>
<para> <para>
...@@ -230,9 +230,9 @@ exception neutrality and exception safety. ...@@ -230,9 +230,9 @@ exception neutrality and exception safety.
use <literal>-fno-exceptions</literal>. If you have some code that use <literal>-fno-exceptions</literal>. If you have some code that
uses <literal>try</literal> or <literal>catch</literal>, you uses <literal>try</literal> or <literal>catch</literal>, you
shouldn't use <literal>-fno-exceptions</literal>. shouldn't use <literal>-fno-exceptions</literal>.
</para> </para>
<para> <para>
And what it to be gained, tinkering in the back alleys with a And what it to be gained, tinkering in the back alleys with a
language like this? Exception handling overhead can be measured language like this? Exception handling overhead can be measured
in the size of the executable binary, and varies with the in the size of the executable binary, and varies with the
...@@ -318,7 +318,7 @@ exception neutrality and exception safety. ...@@ -318,7 +318,7 @@ exception neutrality and exception safety.
library has been transformed, user code may need modification. User library has been transformed, user code may need modification. User
code that attempts or expects to do error checking on standard code that attempts or expects to do error checking on standard
library components compiled with exception handling disabled should library components compiled with exception handling disabled should
be evaluated and potentially made conditional. be evaluated and potentially made conditional.
</para> </para>
<para> <para>
...@@ -360,7 +360,7 @@ exception neutrality and exception safety. ...@@ -360,7 +360,7 @@ exception neutrality and exception safety.
<sect3 id="using.exception.compat.c"> <sect3 id="using.exception.compat.c">
<title>With <literal>C</literal></title> <title>With <literal>C</literal></title>
<para> <para>
C language code that is expecting to interoperate with C++ should be C language code that is expecting to interoperate with C++ should be
compiled with <literal>-fexceptions</literal>. This will make compiled with <literal>-fexceptions</literal>. This will make
debugging a C language function called as part of C++-induced stack debugging a C language function called as part of C++-induced stack
...@@ -386,7 +386,7 @@ is called. ...@@ -386,7 +386,7 @@ is called.
<sect3 id="using.exception.compat.posix"> <sect3 id="using.exception.compat.posix">
<title>With <literal>POSIX</literal> thread cancellation</title> <title>With <literal>POSIX</literal> thread cancellation</title>
<para> <para>
GNU systems re-use some of the exception handling mechanisms to GNU systems re-use some of the exception handling mechanisms to
track control flow for <literal>POSIX</literal> thread cancellation. track control flow for <literal>POSIX</literal> thread cancellation.
</para> </para>
...@@ -439,30 +439,33 @@ is called. ...@@ -439,30 +439,33 @@ is called.
<title>Bibliography</title> <title>Bibliography</title>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008) <ulink url="http://www.opengroup.org/austin">
</title> <citetitle>
System Interface Definitions, Issue 7 (IEEE Std. 1003.1-2008)
</citetitle>
</ulink>
</biblioid>
<pagenums> <pagenums>
2.9.5 Thread Cancellation 2.9.5 Thread Cancellation
</pagenums> </pagenums>
<copyright> <copyright>
<year>2008</year> <year>2008</year>
<holder> <holder>
The Open Group/The Institute of Electrical and Electronics Engineers, Inc.</holder> The Open Group/The Institute of Electrical and Electronics
Engineers, Inc.
</holder>
</copyright> </copyright>
</biblioentry>
<biblioid> <biblioentry>
<ulink url="http://www.opengroup.org/austin/"> <biblioid class="uri">
<ulink url="http://www.boost.org/community/error_handling.html">
<citetitle>
Error and Exception Handling
</citetitle>
</ulink> </ulink>
</biblioid> </biblioid>
</biblioentry>
<biblioentry>
<title>
Error and Exception Handling
</title>
<author> <author>
<firstname>David</firstname> <firstname>David</firstname>
<surname>Abrahams </surname> <surname>Abrahams </surname>
...@@ -472,17 +475,17 @@ is called. ...@@ -472,17 +475,17 @@ is called.
Boost Boost
</publishername> </publishername>
</publisher> </publisher>
<biblioid> </biblioentry>
<ulink url="http://www.boost.org/community/error_handling.html">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
Exception-Safety in Generic Components <ulink url="http://www.boost.org/community/exception_safety.html">
</title> <citetitle>
Exception-Safety in Generic Components
</citetitle>
</ulink>
</biblioid>
<author> <author>
<firstname>David</firstname> <firstname>David</firstname>
<surname>Abrahams</surname> <surname>Abrahams</surname>
...@@ -492,16 +495,16 @@ is called. ...@@ -492,16 +495,16 @@ is called.
Boost Boost
</publishername> </publishername>
</publisher> </publisher>
<biblioid> </biblioentry>
<ulink url="http://www.boost.org/community/exception_safety.html">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
Standard Library Exception Policy <ulink url="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf">
</title> <citetitle>
Standard Library Exception Policy
</citetitle>
</ulink>
</biblioid>
<author> <author>
<firstname>Matt</firstname> <firstname>Matt</firstname>
<surname>Austern</surname> <surname>Austern</surname>
...@@ -511,16 +514,16 @@ is called. ...@@ -511,16 +514,16 @@ is called.
WG21 N1077 WG21 N1077
</publishername> </publishername>
</publisher> </publisher>
<biblioid> </biblioentry>
<ulink url="www.open-std.org/jtc1/sc22/wg21/docs/papers/1997/N1077.pdf">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
ia64 c++ abi exception handling <ulink url="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html">
</title> <citetitle>
ia64 c++ abi exception handling
</citetitle>
</ulink>
</biblioid>
<author> <author>
<firstname>Richard</firstname> <firstname>Richard</firstname>
<surname>Henderson</surname> <surname>Henderson</surname>
...@@ -530,25 +533,21 @@ is called. ...@@ -530,25 +533,21 @@ is called.
GNU GNU
</publishername> </publishername>
</publisher> </publisher>
<biblioid> </biblioentry>
<ulink url="http://gcc.gnu.org/ml/gcc-patches/2001-03/msg00661.html">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
Appendix E: Standard-Library Exception Safety <ulink url="http://www.research.att.com/~bs/3rd_safe.pdf">
</title> <citetitle>
Appendix E: Standard-Library Exception Safety
</citetitle>
</ulink>
</biblioid>
<author> <author>
<firstname>Bjarne</firstname> <firstname>Bjarne</firstname>
<surname>Stroustrup</surname> <surname>Stroustrup</surname>
</author> </author>
<biblioid> </biblioentry>
<ulink url="http://www.research.att.com/~bs/3rd_safe.pdf">
</ulink>
</biblioid>
</biblioentry>
<biblioentry> <biblioentry>
<title> <title>
...@@ -561,18 +560,17 @@ is called. ...@@ -561,18 +560,17 @@ is called.
<firstname>Herb</firstname> <firstname>Herb</firstname>
<surname>Sutter</surname> <surname>Sutter</surname>
</author> </author>
</biblioentry> </biblioentry>
<biblioentry> <biblioentry>
<title> <biblioid class="uri">
exception_defines.h #defines try/catch <ulink url="http://gcc.gnu.org/PR25191">
</title> <citetitle>
<subtitle> GCC Bug 25191: exception_defines.h #defines try/catch
GCC Bug <ulink url="http://gcc.gnu.org/PR25191">25191</ulink> </citetitle>
</subtitle> </ulink>
<biblioid>
</biblioid> </biblioid>
</biblioentry> </biblioentry>
</bibliography> </bibliography>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment