</keywordset>
</partinfo>
-<title>Introduction</title>
-
+<title>
+ Introduction
+ <indexterm><primary>Introduction</primary></indexterm>
+</title>
<!-- Chapter 01 : Status -->
<chapter id="manual.intro.status" xreflabel="Status">
+ <?dbhtml filename="status.html"?>
<title>Status</title>
-
- <sect1 id="manual.intro.status.standard" xreflabel="Implementation Status">
+ <!-- Section 01 : Implementation Status -->
+ <sect1 id="manual.intro.status.iso" xreflabel="Status">
<title>Implementation Status</title>
- <!-- Section 01 : Status C++ 1998 -->
+ <!-- Section 01.1 : Status C++ 1998 -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
parse="xml" href="status_cxx1998.xml">
</xi:include>
- <!-- Section 02 : Status C++ TR1 -->
+ <!-- Section 01.2 : Status C++ TR1 -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
parse="xml" href="status_cxxtr1.xml">
</xi:include>
- <!-- Section 03 : Status C++ 200x -->
+ <!-- Section 01.3 : Status C++ 200x -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
parse="xml" href="status_cxx200x.xml">
</xi:include>
<!-- Section 02 : License -->
<sect1 id="manual.intro.status.license" xreflabel="License">
+ <?dbhtml filename="license.html"?>
<title>License</title>
<para>
There are two licenses affecting GNU libstdc++: one for the code,
<para>
The source code is distributed under the <link
- linkend="appendix.gpl-2.0">GNU General Public License version 2</link>,
- with the so-called <quote>Runtime Exception</quote>
- as follows (or see any header or implementation file):
+ linkend="appendix.gpl-3.0">GNU General Public License version 3</link>,
+ with the addition under section 7 of an exception described in
+ the <quote>GCC Runtime Library Exception, version 3.1</quote>
+ as follows (or see the file COPYING.RUNTIME):
</para>
<literallayout>
- As a special exception, you may use this file as part of a free software
- library without restriction. Specifically, if other files instantiate
- templates or use macros or inline functions from this file, or you compile
- this file and link it with other files to produce an executable, this
- file does not by itself cause the resulting executable to be covered by
- the GNU General Public License. This exception does not however
- invalidate any other reasons why the executable file might be covered by
- the GNU General Public License.
+GCC RUNTIME LIBRARY EXCEPTION
+
+Version 3.1, 31 March 2009
+
+Copyright (C) 2009 <ulink url="http://www.fsf.org">Free Software Foundation, Inc.</ulink>
+
+Everyone is permitted to copy and distribute verbatim copies of this
+license document, but changing it is not allowed.
+
+This GCC Runtime Library Exception ("Exception") is an additional
+permission under section 7 of the GNU General Public License, version
+3 ("GPLv3"). It applies to a given file (the "Runtime Library") that
+bears a notice placed by the copyright holder of the file stating that
+the file is governed by GPLv3 along with this Exception.
+
+When you use GCC to compile a program, GCC may combine portions of
+certain GCC header files and runtime libraries with the compiled
+program. The purpose of this Exception is to allow compilation of
+non-GPL (including proprietary) programs to use, in this way, the
+header files and runtime libraries covered by this Exception.
+
+0. Definitions.
+
+A file is an "Independent Module" if it either requires the Runtime
+Library for execution after a Compilation Process, or makes use of an
+interface provided by the Runtime Library, but is not otherwise based
+on the Runtime Library.
+
+"GCC" means a version of the GNU Compiler Collection, with or without
+modifications, governed by version 3 (or a specified later version) of
+the GNU General Public License (GPL) with the option of using any
+subsequent versions published by the FSF.
+
+"GPL-compatible Software" is software whose conditions of propagation,
+modification and use would permit combination with GCC in accord with
+the license of GCC.
+
+"Target Code" refers to output from any compiler for a real or virtual
+target processor architecture, in executable form or suitable for
+input to an assembler, loader, linker and/or execution
+phase. Notwithstanding that, Target Code does not include data in any
+format that is used as a compiler intermediate representation, or used
+for producing a compiler intermediate representation.
+
+The "Compilation Process" transforms code entirely represented in
+non-intermediate languages designed for human-written code, and/or in
+Java Virtual Machine byte code, into Target Code. Thus, for example,
+use of source code generators and preprocessors need not be considered
+part of the Compilation Process, since the Compilation Process can be
+understood as starting with the output of the generators or
+preprocessors.
+
+A Compilation Process is "Eligible" if it is done using GCC, alone or
+with other GPL-compatible software, or if it is done without using any
+work based on GCC. For example, using non-GPL-compatible Software to
+optimize any GCC intermediate representations would not qualify as an
+Eligible Compilation Process.
+
+1. Grant of Additional Permission.
+
+You have permission to propagate a work of Target Code formed by
+combining the Runtime Library with Independent Modules, even if such
+propagation would otherwise violate the terms of GPLv3, provided that
+all Target Code was generated by Eligible Compilation Processes. You
+may then convey such a combination under terms of your choice,
+consistent with the licensing of the Independent Modules.
+
+2. No Weakening of GCC Copyleft.
+
+The availability of this Exception does not imply any general
+presumption that third-party software is unaffected by the copyleft
+requirements of the license of GCC.
</literallayout>
<para>
For documentation generated by doxygen or other automated tools
via processing source code comments and markup, the original source
code license applies to the generated files. Thus, the doxygen
- documents are licensed <link linkend="appendix.gpl-2.0">GPL</link>.
+ documents are licensed <link linkend="appendix.gpl-3.0">GPL</link>.
</para>
<para>
<!-- Section 03 : Known Bugs -->
<sect1 id="manual.intro.status.bugs" xreflabel="Bugs">
+ <?dbhtml filename="bugs.html"?>
<title>Bugs</title>
<sect2 id="manual.intro.status.bugs.impl" xreflabel="Bugs impl">
and src directories for appearances of
<constant>_GLIBCXX_RESOLVE_LIB_DEFECTS</constant> for examples
of style. Note that we usually do not make changes to the
- code until an issue has reached <ulink url="lwg-active.html#DR">DR</ulink> status.
+ code until an issue has reached <ulink url="../ext/lwg-active.html#DR">DR</ulink> status.
</para>
<variablelist>
<listitem><para>Re-opening a file stream does <emphasis>not</emphasis> clear the state flags.
</para></listitem></varlistentry>
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#23">23</ulink>:
+ <emphasis>Num_get overflow result</emphasis>
+ </term>
+ <listitem><para>Implement the proposed resolution.
+ </para></listitem></varlistentry>
+
<varlistentry><term><ulink url="../ext/lwg-defects.html#25">25</ulink>:
<emphasis>String operator<< uses width() value wrong</emphasis>
</term>
the new effects paragraph.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="lwg-defects.html#83">83</ulink>:
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#83">83</ulink>:
<emphasis>string::npos vs. string::max_size()</emphasis>
</term>
<listitem><para>Safety checks on the size of the string should test against
<listitem><para>These functions set <code>failbit</code> on error now.
</para></listitem></varlistentry>
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#130">130</ulink>:
+ <emphasis>Return type of container::erase(iterator) differs for associative containers</emphasis>
+ </term>
+ <listitem><para>Make member <code>erase</code> return iterator for <code>set</code>, <code>multiset</code>, <code>map</code>, <code>multimap</code>.
+ </para></listitem></varlistentry>
+
<varlistentry><term><ulink url="../ext/lwg-defects.html#136">136</ulink>:
<emphasis>seekp, seekg setting wrong streams?</emphasis>
</term>
is specified in the conversion specification.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#233">233</ulink>:
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#233">233</ulink>:
<emphasis>Insertion hints in associative containers</emphasis>
</term>
<listitem><para>Implement N1780, first check before then check after, insert as close
<listitem><para>Add const overloads of <code>is_open</code>.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#387">387</ulink>:
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#387">387</ulink>:
<emphasis>std::complex over-encapsulated</emphasis>
</term>
<listitem><para>Add the <code>real(T)</code> and <code>imag(T)</code>
<listitem><para>Change it to return a <code>const T&</code>.
</para></listitem></varlistentry>
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#396">396</ulink>:
+ <emphasis>what are characters zero and one</emphasis>
+ </term>
+ <listitem><para>Implement the proposed resolution.
+ </para></listitem></varlistentry>
+
<varlistentry><term><ulink url="../ext/lwg-defects.html#402">402</ulink>:
<emphasis>Wrong new expression in [some_]allocator::construct</emphasis>
</term>
<listitem><para>Replace "new" with "::new".
</para></listitem></varlistentry>
+ <varlistentry><term><ulink url="../ext/lwg-active.html#408">408</ulink>:
+ <emphasis>
+ Is vector<reverse_iterator<char*> > forbidden?
+ </emphasis>
+ </term>
+ <listitem><para>Tweak the debug-mode checks in _Safe_iterator.
+ </para></listitem></varlistentry>
+
<varlistentry><term><ulink url="../ext/lwg-defects.html#409">409</ulink>:
<emphasis>Closing an fstream should clear the error state</emphasis>
</term>
<listitem><para>Follow the straightforward proposed resolution.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#550">550</ulink>:
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#550">550</ulink>:
<emphasis>What should the return type of pow(float,int) be?</emphasis>
</term>
<listitem><para>In C++0x mode, remove the pow(float,int), etc., signatures.
<listitem><para>Change it to be a formatted output function (i.e. catch exceptions).
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#596">596</ulink>:
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#596">596</ulink>:
<emphasis>27.8.1.3 Table 112 omits "a+" and "a+b" modes</emphasis>
</term>
<listitem><para>Add the missing modes to fopen_mode.
</para></listitem></varlistentry>
+ <varlistentry><term><ulink url="../ext/lwg-active.html#630">630</ulink>:
+ <emphasis>arrays of valarray</emphasis>
+ </term>
+ <listitem><para>Implement the simple resolution.
+ </para></listitem></varlistentry>
+
<varlistentry><term><ulink url="../ext/lwg-defects.html#660">660</ulink>:
<emphasis>Missing bitwise operations</emphasis>
</term>
<listitem><para>Add the missing operations.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#691">691</ulink>:
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#691">691</ulink>:
<emphasis>const_local_iterator cbegin, cend missing from TR1</emphasis>
</term>
<listitem><para>In C++0x mode add cbegin(size_type) and cend(size_type)
<listitem><para>Make the member functions table and classic_table public.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#761">761</ulink>:
+ <varlistentry><term><ulink url="../ext/lwg-active.html#696">696</ulink>:
+ <emphasis>istream::operator>>(int&) broken</emphasis>
+ </term>
+ <listitem><para>Implement the straightforward resolution.
+ </para></listitem></varlistentry>
+
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#761">761</ulink>:
<emphasis>unordered_map needs an at() member function</emphasis>
</term>
<listitem><para>In C++0x mode, add at() and at() const.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#775">775</ulink>:
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#775">775</ulink>:
<emphasis>Tuple indexing should be unsigned?</emphasis>
</term>
<listitem><para>Implement the int -> size_t replacements.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#776">776</ulink>:
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#776">776</ulink>:
<emphasis>Undescribed assign function of std::array</emphasis>
</term>
<listitem><para>In C++0x mode, remove assign, add fill.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#778">778</ulink>:
- <emphasis>std::bitset does not have any constructor taking a string
- literal</emphasis>
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#781">781</ulink>:
+ <emphasis>std::complex should add missing C99 functions</emphasis>
</term>
- <listitem><para>Add it.
+ <listitem><para>In C++0x mode, add std::proj.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#781">781</ulink>:
- <emphasis>std::complex should add missing C99 functions</emphasis>
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#809">809</ulink>:
+ <emphasis>std::swap should be overloaded for array types</emphasis>
</term>
- <listitem><para>In C++0x mode, add std::proj.
+ <listitem><para>Add the overload.
</para></listitem></varlistentry>
- <varlistentry><term><ulink url="../ext/lwg-active.html#844">844</ulink>:
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#844">844</ulink>:
<emphasis>complex pow return type is ambiguous</emphasis>
</term>
<listitem><para>In C++0x mode, remove the pow(complex<T>, int) signature.
</para></listitem></varlistentry>
+
+ <varlistentry><term><ulink url="../ext/lwg-defects.html#853">853</ulink>:
+ <emphasis>to_string needs updating with zero and one</emphasis>
+ </term>
+ <listitem><para>Update / add the signatures.
+ </para></listitem></varlistentry>
</variablelist>
</sect2>
<!-- Chapter 02 : Setup -->
<chapter id="manual.intro.setup" xreflabel="Setup">
+ <?dbhtml filename="setup.html"?>
<title>Setup</title>
- <!-- Section 01 : Configure -->
+ <para>To transform libstdc++ sources into installed include files
+ and properly built binaries useful for linking to other software is
+ a multi-step process. Steps include getting the sources,
+ configuring and building the sources, testing, and installation.
+ </para>
+
+ <para>The general outline of commands is something like:
+ </para>
+
+ <programlisting>
+ <emphasis>get gcc sources</emphasis>
+ <emphasis>extract into gccsrcdir</emphasis>
+ mkdir <emphasis>gccbuilddir</emphasis>
+ cd <emphasis>gccbuilddir</emphasis>
+ <emphasis>gccsrcdir</emphasis>/configure --prefix=<emphasis>destdir</emphasis> --other-opts...
+ make
+ make check
+ make install
+ </programlisting>
+
+ <para>
+ Each step is described in more detail in the following sections.
+ </para>
+
+ <!-- Section 01 : Prerequisites -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="configure.xml">
+ parse="xml" href="prerequisites.xml">
</xi:include>
- <!-- Section 02 : Build -->
+ <!-- Section 02 : Configure -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
- parse="xml" href="build.xml">
+ parse="xml" href="configure.xml">
</xi:include>
- <!-- Section 03 : Test -->
+ <!-- Section 03 : Make -->
+<sect1 id="manual.intro.setup.make" xreflabel="Make">
+ <?dbhtml filename="make.html"?>
+<title>Make</title>
+ <para>If you have never done this before, you should read the basic
+ <ulink url="http://gcc.gnu.org/install/">GCC Installation
+ Instructions</ulink> first. Read <emphasis>all of them</emphasis>.
+ <emphasis>Twice.</emphasis>
+ </para>
+
+<para>Then type:<command>make</command>, and congratulations, you're
+started to build.
+</para>
+
+</sect1>
+
+ <!-- Section 04 : Test -->
<xi:include xmlns:xi="http://www.w3.org/2001/XInclude"
parse="xml" href="test.xml">
</xi:include>