mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-29 08:14:41 +08:00
cb580d5cac
* docs/html/faq/index.html (Is libstdc++-v3 thread-safe?): Update based on Nathan's review. Use Nathan's words. From-SVN: r46238
766 lines
36 KiB
HTML
766 lines
36 KiB
HTML
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
<meta name="KEYWORDS" content="libstdc++, libstdc++-v3, GCC, g++, libg++, STL">
|
|
<meta name="DESCRIPTION" content="FAQ for the GNU libstdc++ effort.">
|
|
<title>libstdc++-v3 FAQ</title>
|
|
<link rel="StyleSheet" href="../lib3styles.css">
|
|
<!--
|
|
** Locations of "the most recent snapshot is the Nth" text are
|
|
** answers 1_1, 1_4, 4_1, 5_6.
|
|
-->
|
|
</head>
|
|
<body>
|
|
|
|
<h1 class="centered">libstdc++ Frequently Asked Questions</h1>
|
|
|
|
<p>The latest version of this document is always available at
|
|
<a href="http://gcc.gnu.org/onlinedocs/libstdc++/faq/">
|
|
http://gcc.gnu.org/onlinedocs/libstdc++/faq/</a>.</p>
|
|
|
|
<p>To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
|
|
|
|
<!-- ####################################################### -->
|
|
<hr>
|
|
<h1>Questions</h1>
|
|
<ol>
|
|
<li><a href="#1_0">General Information</a>
|
|
<!-- I suspect these will mostly be links to/into existing documents. -->
|
|
<ol>
|
|
<li><a href="#1_1">What is libstdc++-v3?</a>
|
|
<li><a href="#1_2">Why should I use libstdc++?</a>
|
|
<li><a href="#1_3">Who's in charge of it?</a>
|
|
<li><a href="#1_4">How do I get libstdc++?</a>
|
|
<li><a href="#1_5">When is libstdc++ going to be finished?</a>
|
|
<li><a href="#1_6">How do I contribute to the effort?</a>
|
|
<li><a href="#1_7">What happened to libg++? I need that!</a>
|
|
<li><a href="#1_8">What if I have more questions?</a>
|
|
<li><a href="#1_9">What are the license terms for libstdc++-v3?</a>
|
|
</ol>
|
|
|
|
<li><a href="#2_0">Installation</a>
|
|
<ol>
|
|
<li><a href="#2_1">How do I install libstdc++-v3?</a>
|
|
<li><a href="#2_2">[removed]</a>
|
|
<li><a href="#2_3">What is this CVS thing that you keep
|
|
mentioning?</a>
|
|
<li><a href="#2_4">How do I know if it works?</a>
|
|
</ol>
|
|
|
|
<li><a href="#3_0">Platform-Specific Issues</a>
|
|
<ol>
|
|
<li><a href="#3_1">Can libstdc++-v3 be used with <my
|
|
favorite compiler>?</a>
|
|
<li><a href="#3_2">[removed]</a>
|
|
<li><a href="#3_3">Building under DEC OSF kills the assembler</a>
|
|
</ol>
|
|
|
|
<li><a href="#4_0">Known Bugs and Non-Bugs</a>
|
|
<ol>
|
|
<li><a href="#4_1">What works already?</a>
|
|
<li><a href="#4_2">Bugs in gcc/g++ (not libstdc++-v3)</a>
|
|
<li><a href="#4_3">Bugs in the C++ language/lib specification</a>
|
|
<li><a href="#4_4">Things in libstdc++ that look like bugs</a>
|
|
<ul>
|
|
<li><a href="#4_4_iostreamclear">reopening a stream fails</a>
|
|
<li><a href="#4_4_Weff">-Weffc++ complains too much</a>
|
|
<li><a href="#4_4_rel_ops">"ambiguous overloads"
|
|
after including an old-style header</a>
|
|
<li><a href="#4_4_interface">The g++-3 headers are
|
|
<strong>not ours</strong></a>
|
|
<li><a href="#4_4_glibc">compilation errors from streambuf.h</a>
|
|
<li><a href="#4_4_checks">errors about <em>*Cconcept</em> and
|
|
<em>constraints</em> in the STL...</a>
|
|
</ul>
|
|
<li><a href="#4_5">Aw, that's easy to fix!</a>
|
|
</ol>
|
|
|
|
<li><a href="#5_0">Miscellaneous</a>
|
|
<ol>
|
|
<li><a href="#5_1">string::iterator is not char*;
|
|
vector<T>::iterator is not T*</a>
|
|
<li><a href="#5_2">What's next after libstdc++-v3?</a>
|
|
<li><a href="#5_3">What about the STL from SGI?</a>
|
|
<li><a href="#5_4">Extensions and Backward Compatibility</a>
|
|
<li><a href="#5_5">[removed]</a>
|
|
<li><a href="#5_6">Is libstdc++-v3 thread-safe?</a>
|
|
<li><a href="#5_7">How do I get a copy of the ISO C++ Standard?</a>
|
|
</ol>
|
|
|
|
</ol>
|
|
|
|
<hr>
|
|
|
|
<!-- ####################################################### -->
|
|
|
|
<h1><a name="1_0">1.0 General Information</a></h1>
|
|
<!-- I suspect these will mostly be links to/into existing documents. -->
|
|
<h2><a name="1_1">1.1 What is libstdc++-v3?</a></h2>
|
|
<p>The GNU Standard C++ Library v3, or libstdc++-2.9x, is an
|
|
ongoing project to implement the ISO 14882 Standard C++ library
|
|
as described in chapters 17 through 27 and annex D. As the
|
|
library reaches stable plateaus, it is captured in a snapshot
|
|
and released. The current release is
|
|
<a href="http://gcc.gnu.org/libstdc++/download.html">the
|
|
eleventh snapshot</a>. For those who want to see exactly how
|
|
far the project has come, or just want the latest
|
|
bleeding-edge code, the up-to-date source is available over
|
|
anonymous CVS, and can even be browsed over the Web (see below).
|
|
</p>
|
|
<p>A more formal description of the V3 goals can be found in the
|
|
official <a href="../17_intro/DESIGN">design document</a>.
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="1_2">1.2 Why should I use libstdc++?</a></h2>
|
|
<p>The completion of the ISO C++ standardization gave the
|
|
C++ community a powerful set of reuseable tools in the form
|
|
of the C++ Standard Library. However, all existing C++
|
|
implementations are (as the Draft Standard used to say)
|
|
"incomplet and incorrekt," and many suffer from
|
|
limitations of the compilers that use them.
|
|
</p>
|
|
<p>The GNU C/C++/FORTRAN/<pick-a-language> compiler
|
|
(<code>gcc</code>, <code>g++</code>, etc) is widely considered to be
|
|
one of the leading compilers in the world. Its development
|
|
has recently been taken over by the
|
|
<a href="http://gcc.gnu.org/">GCC team</a>. All of
|
|
the rapid development and near-legendary
|
|
<a href="http://gcc.gnu.org/gcc-2.95/buildstat.html">portability</a>
|
|
that are the hallmarks of an open-source project are being
|
|
applied to libstdc++.
|
|
</p>
|
|
<p>That means that all of the Standard classes and functions
|
|
(such as <code>string</code>, <code>vector<></code>, iostreams,
|
|
and algorithms) will be freely available and fully compliant.
|
|
Programmers will no longer need to "roll their own"
|
|
nor be worried about platform-specific incompatabilities.
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="1_3">1.3 Who's in charge of it?</a></h2>
|
|
<p>The libstdc++ project is contributed to by several developers
|
|
all over the world, in the same way as GCC or Linux.
|
|
Benjamin Kosnik, Gabriel Dos Reis, Phil Edwards, and Ulrich
|
|
Drepper are the lead maintainers of the CVS archive.
|
|
</p>
|
|
<p>Development and discussion is held on the libstdc++ mailing
|
|
list. Subscribing to the list, or searching the list
|
|
archives, is open to everyone. You can read instructions for
|
|
doing so on the <a href="http://gcc.gnu.org/libstdc++/">homepage</a>.
|
|
If you have questions, ideas, code, or are just curious, sign up!
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="1_4">1.4 How do I get libstdc++?</a></h2>
|
|
<p>The eleventh (and latest) snapshot of libstdc++-v3 is
|
|
<a href="http://gcc.gnu.org/libstdc++/download.html">available via
|
|
ftp</a>. The filename is libstdc++-2.92.tar.gz.
|
|
</p>
|
|
<p>The <a href="http://gcc.gnu.org/libstdc++/">homepage</a>
|
|
has instructions for retrieving the latest CVS sources, and for
|
|
browsing the CVS sources over the web.
|
|
</p>
|
|
<p>The subset commonly known as the Standard Template Library
|
|
(chapters 23 through 25, mostly) is adapted from the final release
|
|
of the SGI STL.
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="1_5">1.5 When is libstdc++ going to be finished?</a></h2>
|
|
<!-- <p>Nathan Myers gave the best of all possible answers in <A
|
|
href="http://www.deja.com/getdoc.xp?AN=469581698&fmt=text">a
|
|
Usenet article</a>.</p>
|
|
which is no longer available, thanks deja...-->
|
|
<p>Nathan Myers gave the best of all possible answers, responding to a
|
|
Usenet article asking this question: <em>Sooner, if you help.</em>
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="1_6">1.6 How do I contribute to the effort?</a></h2>
|
|
<p>Here is <a href="../17_intro/contribute.html">a
|
|
page devoted to this topic</a>. Subscribing to the mailing
|
|
list (see above, or the homepage) is a very good idea if you
|
|
have something to contribute, or if you have spare time and
|
|
want to help. Contributions don't have to be in the form of
|
|
source code; anybody who is willing to help write
|
|
documentation, for example, or has found a bug in code that
|
|
we all thought was working, is more than welcome!
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="1_7">1.7 What happened to libg++? I need that!</a></h2>
|
|
<p>The most recent libg++ README states that libg++ is no longer
|
|
being actively maintained. It should not be used for new
|
|
projects, and is only being kicked along to support older code.
|
|
</p>
|
|
<p>The libg++ was designed and created when there was no Standard
|
|
to provide guidance. Classes like linked lists are now provided
|
|
for by <code>list<T></code> and do not need to be created by
|
|
<code>genclass</code>. (For that matter, templates exist now and
|
|
are well-supported, whereas genclass (mostly) predates them.)
|
|
</p>
|
|
<p>There are other classes in libg++ that are not specified in the
|
|
ISO Standard (e.g., statistical analysis). While there are a
|
|
lot of really useful things that are used by a lot of people
|
|
(e.g., statistics :-), the Standards Committee couldn't include
|
|
everything, and so a lot of those "obvious" classes
|
|
didn't get included.
|
|
</p>
|
|
<p>Since libstdc++ is an implementation of the Standard Library, we
|
|
have no plans at this time to include non-Standard utilities
|
|
in the implementation, however handy they are. (The extensions
|
|
provided in the SGI STL aren't maintained by us and don't get
|
|
a lot of our attention, because they don't require a lot of our
|
|
time.) It is entirely plausable that the "useful stuff"
|
|
from libg++ might be extracted into an updated utilities library,
|
|
but nobody has stated such a project yet.
|
|
</p>
|
|
<!-- The advertisement, so to speak, might have to go. Hmmmmm. -->
|
|
<p>(The <a href="http://www.boost.org/">Boost</a> site houses free
|
|
C++ libraries that do varying things, and happened to be started
|
|
by members of the Standards Committee. Certain "useful
|
|
stuff" classes will probably migrate there.)
|
|
</p>
|
|
<p>For the bold and/or desperate, the
|
|
<a href="http://gcc.gnu.org/fom_serv/cache/33.html">GCC FAQ</a>
|
|
describes where to find the last libg++ source.
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="1_8">1.8 What if I have more questions?</a></h2>
|
|
<p>If you have read the README and RELEASE-NOTES files, and your
|
|
question remains unanswered, then just ask the mailing list.
|
|
At present, you do not need to be subscribed to the list to
|
|
send a message to it. More information is available on the
|
|
homepage (including how to browse the list archives); to send
|
|
to the list, use <a href="mailto:libstdc++@gcc.gnu.org">
|
|
<code>libstdc++@gcc.gnu.org</code></a>.
|
|
</p>
|
|
<p>If you have a question that you think should be included here,
|
|
or if you have a question <em>about</em> a question/answer here,
|
|
contact <a href="mailto:pme@gcc.gnu.org">Phil Edwards</a>
|
|
or <a href="mailto:gdr@gcc.gnu.org">Gabriel Dos Reis</a>.
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="1_9">1.9 What are the license terms for libstdc++-v3?</a></h2>
|
|
<p>See <a href="../17_intro/license.html">our license description</a>
|
|
for these and related questions.
|
|
</p>
|
|
|
|
<hr>
|
|
<h1><a name="2_0">2.0 Installation</a></h1>
|
|
<h2><a name="2_1">2.1 How do I install libstdc++-v3?</a></h2>
|
|
<p>Complete instructions are not given here (this is a FAQ, not
|
|
an installation document), but the tools required are few:
|
|
</p>
|
|
<ul>
|
|
<li> A 3.x release of GCC. Note that building GCC is much
|
|
easier and more automated than building the GCC 2.[78]
|
|
series was. If you are using GCC 2.95, you can still
|
|
build earlier snapshots of libstdc++.
|
|
<li> GNU Make is recommended, but should not be required.
|
|
<li> The GNU Autotools are needed if you are messing with
|
|
the configury or makefiles.
|
|
</ul>
|
|
<p>The file <a href="../documentation.html">documentation.html</a>
|
|
provides a good overview of the steps necessary to build, install,
|
|
and use the library. Instructions for configuring the library
|
|
with new flags such as --enable-threads are there also, as well as
|
|
patches and instructions for working with GCC 2.95.
|
|
</p>
|
|
<p>The top-level install.html and
|
|
<a href="../17_intro/RELEASE-NOTES">RELEASE-NOTES</a> files contain
|
|
the exact build and installation instructions. You may wish to
|
|
browse those files over CVSweb ahead of time to get a feel for
|
|
what's required. RELEASE-NOTES is located in the
|
|
".../docs/17_intro/" directory of the distribution.
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="2_2">2.2 [removed]</a></h2>
|
|
<p>This question has become moot and has been removed. The stub
|
|
is here to preserve numbering (and hence links/bookmarks).
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="2_3">2.3 What is this CVS thing that you
|
|
keep mentioning?</a></h2>
|
|
<p>The <em>Concurrent Versions System</em> is one of several revision
|
|
control packages. It was selected for GNU projects because it's
|
|
free (speech), free (beer), and very high quality. The <A
|
|
href="http://www.gnu.org/software/cvs/cvs.html">CVS entry in
|
|
the GNU software catalogue</a> has a better description as
|
|
well as a
|
|
<a href="http://www.cvshome.org/">link to the makers of CVS</a>.
|
|
</p>
|
|
<p>The "anonymous client checkout" feature of CVS is
|
|
similar to anonymous FTP in that it allows anyone to retrieve
|
|
the latest libstdc++ sources.
|
|
</p>
|
|
<p>After the first of April, American users will have a
|
|
"/pharmacy" command-line option...
|
|
<!-- wonder how long that'll live -->
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="2_4">2.4 How do I know if it works?</a></h2>
|
|
<p>libstdc++-v3 comes with its own testsuite. You do not need
|
|
to actually install the library ("<code>make
|
|
install</code>") to run the testsuite.
|
|
</p>
|
|
<p>To run the testsuite on the library after building it, use
|
|
"make check" while in your build directory. To run
|
|
the testsuite on the library after building and installing it,
|
|
use "make check-install" instead.
|
|
</p>
|
|
<p>If you find bugs in the testsuite programs themselves, or if you
|
|
think of a new test program that should be added to the suite,
|
|
<strong>please</strong> write up your idea and send it to the list!
|
|
</p>
|
|
|
|
<hr>
|
|
<h1><a name="3_0">3.0 Platform-Specific Issues</a></h1>
|
|
<h2><a name="3_1">3.1 Can libstdc++-v3 be used with <my
|
|
favorite compiler>?</a></h2>
|
|
<p>Probably not. Yet.</p>
|
|
<p>Because GCC advances so rapidly, development and testing of
|
|
libstdc++ is being done almost entirely under that compiler.
|
|
If you are curious about whether other, lesser compilers
|
|
(*grin*) support libstdc++, you are more than welcome to try.
|
|
Configuring and building the library (see above) will still
|
|
require certain tools, however. Also keep in mind that
|
|
<em>building</em> libstdc++ does not imply that your compiler
|
|
will be able to <em>use</em> all of the features found in the
|
|
C++ Standard Library.
|
|
</p>
|
|
<p>Since the goal of ISO Standardization is for all C++
|
|
implementations to be able to share code, the final libstdc++
|
|
should, in theory, be useable under any ISO-compliant
|
|
compiler. It will still be targeted and optimized for
|
|
GCC/g++, however.
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="3_2">3.2 [removed]</a></h2>
|
|
<p>This question has become moot and has been removed. The stub
|
|
is here to preserve numbering (and hence links/bookmarks).
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="3_3">3.3 Building DEC OSF kills the assembler</a></h2>
|
|
<p>The <code>atomicity.h</code> header for the Alpha processor
|
|
currently uses pseudo-operators which the DEC assembler
|
|
doesn't understand (in particular, .subsection and .previous).
|
|
The simple solution is to install GNU <code>as</code> and arrange
|
|
for the GCC build to use it (or merge the sources and build
|
|
it during the bootstrap).
|
|
</p>
|
|
<p>Anyone who
|
|
<a href="http://gcc.gnu.org/ml/libstdc++/2000-12/msg00279.html">knows
|
|
the DEC assembler well enough</a> to provide the equivalent of
|
|
these two pseudos would win praise and accolades from many.
|
|
</p>
|
|
|
|
<hr>
|
|
<h1><a name="4_0">4.0 Known Bugs and Non-Bugs</a></h1>
|
|
<em>Note that this section can get rapdily outdated -- such is the
|
|
nature of an open-source project. For the latest information, join
|
|
the mailing list or look through recent archives. The RELEASE-
|
|
NOTES and BUGS files are generally kept up-to-date.</em>
|
|
|
|
<p>For 3.0.1, the most common "bug" is an apparently missing
|
|
"<code>../</code>" in include/Makefile, resulting in files
|
|
like gthr.h and gthr-single.h not being found.
|
|
</p>
|
|
<p>Please read
|
|
<a href="http://gcc.gnu.org/install/configure.html">the configuration
|
|
instructions for GCC</a>,
|
|
specifically the part about configuring in a separate build directory,
|
|
and how strongly recommended it is. Building in the source directory
|
|
is fragile, is rarely tested, and tends to break, as in this case.
|
|
Work has already gone into the source tree to make this less painful
|
|
for the next release.
|
|
</p>
|
|
<p><strong>Please do not report this as a bug. We know about it.</strong>
|
|
Reporting this -- or any other problem that's already been fixed --
|
|
hinders the development of GCC, because we have to take time to
|
|
respond to your report. Thank you.
|
|
</p>
|
|
|
|
<h2><a name="4_1">4.1 What works already?</a></h2>
|
|
<p>This is a verbatim clip from the "Status" section
|
|
of the RELEASE-NOTES for the latest snapshot.
|
|
</p>
|
|
|
|
<!-- Yeah, I meant that "verbatim clip" thing literally... :-) -->
|
|
|
|
<pre>
|
|
New:
|
|
---
|
|
- preliminary doxygen documentation has been added. Running "make
|
|
doxygen" in the libstdc++-v3 build directory will generate HTML
|
|
documentation that can be used to cross-reference names and files in
|
|
the library.
|
|
- a dejagnu based testing framework has been added
|
|
- a new implementation of the concept checking code has been ported
|
|
from the boost libraries.
|
|
- support for -fno-exceptions has been added
|
|
- stdexcept was re-written
|
|
- using deprecated or antiquated headers now gives a warning
|
|
- the stdio interface to iostreams has been tweaked, and now works
|
|
with synchronized c/c++ io
|
|
- new libsupc++ routines implementing the IA-64 C++ ABI.
|
|
- HPUX configuration files
|
|
- support for AIX added
|
|
- a lot of bugs were fixed.
|
|
- preliminary named locales implemented
|
|
- portability improvements made to generation of <limits>
|
|
- speedups to improve configuration time.
|
|
- DJGPP support added.
|
|
- support for dlopening shared libstdc++
|
|
</pre>
|
|
|
|
|
|
<hr>
|
|
<h2><a name="4_2">4.2 Bugs in gcc/g++ (not libstdc++-v3)</a></h2>
|
|
<p>This is by no means meant to be complete nor exhaustive, but
|
|
mentions some problems that users may encounter when building
|
|
or using libstdc++. If you are experiencing one of these
|
|
problems, you can find more information on the libstdc++ and
|
|
the GCC mailing lists.
|
|
</p>
|
|
<ul>
|
|
<li>As of 2.91, these bugs have all been fixed. We look forward
|
|
to new ones, well, not exactly...
|
|
</ul>
|
|
|
|
<hr>
|
|
<h2><a name="4_3">4.3 Bugs in the C++ language/lib specification</a></h2>
|
|
<p>Yes, unfortunately, there are some. In a
|
|
<a href="http://gcc.gnu.org/ml/libstdc++/1998/msg00006.html">message
|
|
to the list</a>, Nathan Myers announced that he has started a list of
|
|
problems in the ISO C++ Standard itself, especially with
|
|
regard to the chapters that concern the library. The list
|
|
itself is
|
|
<a href="http://www.cantrip.org/draft-bugs.txt">posted on his
|
|
website</a>. Developers who are having problems interpreting
|
|
the Standard may wish to consult his notes.
|
|
</p>
|
|
<p>For those people who are not part of the ISO Library Group
|
|
(i.e., nearly all of us needing to read this page in the first
|
|
place :-), a public list of the library defects is occasionally
|
|
published <a href="http://anubis.dkuug.dk/jtc1/sc22/wg21/">here</a>.
|
|
Some of these have resulted in <a href="#5_2">code changes</a>.
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="4_4">4.4 Things in libstdc++ that look like bugs</a></h2>
|
|
<p>There are things which are not bugs in the compiler (4.2) nor
|
|
the language specification (4.3), but aren't really bugs in
|
|
libstdc++, either. Really! Please do not report these as bugs.
|
|
</p>
|
|
<a name="4_4_Weff">
|
|
<p><strong>-Weffc++</strong>
|
|
The biggest of these is the quadzillions of warnings about the
|
|
library headers emitted when <code>-Weffc++</code> is used. Making
|
|
libstdc++ "-Weffc++-clean" is not a goal of the project,
|
|
for a few reasons. Mainly, that option tries to enforce
|
|
object-oriented programming, while the Standard Library isn't
|
|
necessarily trying to be OO. There are multiple solutions
|
|
under discussion.
|
|
</p>
|
|
</a>
|
|
<a name="4_4_iostreamclear">
|
|
<p><strong>reopening a stream fails</strong>
|
|
Did I just say that -Weffc++ was our biggest false-bug report? I
|
|
lied. (It used to be.) Today it seems to be reports that after
|
|
executing a sequence like
|
|
<pre>
|
|
#include <fstream>
|
|
...
|
|
std::fstream fs("a_file");
|
|
// .
|
|
// . do things with fs...
|
|
// .
|
|
fs.close();
|
|
fs.open("a_new_file");</pre>
|
|
all operations on the re-opened <code>fs</code> will fail, or at
|
|
least act very strangely. Yes, they often will, especially if
|
|
<code>fs</code> reached the EOF state on the previous file. The
|
|
reason is that the state flags are <strong>not</strong> cleared
|
|
on a successful call to open(). The standard unfortunately did
|
|
not specify behavior in this case, and to everybody's great sorrow,
|
|
the <a href="../ext/howto.html#5">proposed LWG resolution</a> (see
|
|
DR #22) is to leave the flags unchanged. You must insert a call
|
|
to <code>fs.clear()</code> between the calls to close() and open(),
|
|
and then everything will work like we all expect it to work.
|
|
</p>
|
|
</a>
|
|
<a name="4_4_rel_ops">
|
|
<p><strong>rel_ops</strong>
|
|
Another is the <code>rel_ops</code> namespace and the template
|
|
comparison operator functions contained therein. If they become
|
|
visible in the same namespace as other comparison functions
|
|
(e.g., '<code>using</code>' them and the <iterator> header),
|
|
then you will suddenly be faced with huge numbers of ambiguity
|
|
errors. This was discussed on the -v3 list; Nathan Myers
|
|
<a href="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html">sums
|
|
things up here</a>.
|
|
</p>
|
|
</a>
|
|
<a name="4_4_interface"><h3>The g++-3 headers are
|
|
<em>not ours</em></h3>
|
|
<p>If you have found an extremely broken header file which is
|
|
causing problems for you, look carefully before submitting a
|
|
"high" priority bug report (which you probably shouldn't
|
|
do anyhow; see the last paragraph of the page describing
|
|
<a href="http://gcc.gnu.org/gnatswrite.html">the GCC bug database</a>).
|
|
</p>
|
|
<p>If the headers are in <CODE>${prefix}/include/g++-3</CODE>, then
|
|
you are using the old libstdc++-v2 library, which is nonstandard
|
|
and unmaintained. Do not report problems with -v2 to the -v3
|
|
mailing list.
|
|
</p>
|
|
<p>Currently our header files are installed in
|
|
<code>${prefix}/include/g++-v3</code> (see the 'v'?). This may
|
|
change with the next release of GCC, as it may be too confusing,
|
|
but <a href="http://gcc.gnu.org/ml/gcc/2000-10/msg00732.html">the
|
|
question has not yet been decided</a>.
|
|
</p>
|
|
</a>
|
|
<a name="4_4_glibc">
|
|
<p><strong>glibc</strong>
|
|
If you're on a GNU/Linux system and have just upgraded to
|
|
glibc 2.2, but are still using gcc 2.95.2, then you should have
|
|
read the glibc FAQ, specifically 2.34:
|
|
<pre>
|
|
2.34. When compiling C++ programs, I get a compilation error in streambuf.h.
|
|
|
|
{BH} You are using g++ 2.95.2? After upgrading to glibc 2.2, you need to
|
|
apply a patch to the include files in /usr/include/g++, because the fpos_t
|
|
type has changed in glibc 2.2. The patch is at
|
|
http://clisp.cons.org/~haible/gccinclude-glibc-2.2-compat.diff
|
|
</pre>
|
|
Note that 2.95.x shipped with the
|
|
<a href="#4_4_interface">old v2 library</a> which is no longer
|
|
maintained. Also note that gcc 2.95.3 fixes this problem, but
|
|
requires a separate patch for libstdc++-v3.
|
|
</p>
|
|
</a>
|
|
<a name="4_4_checks">
|
|
<p><strong>concept checks</strong>
|
|
If you see compilation errors containing messages about
|
|
<code> <em>foo</em>Concept </code>and a<code> constraints </code>
|
|
member function, then most likely you have violated one of the
|
|
requirements for types used during instantiation of template
|
|
containers and functions. For example, EqualityComparableConcept
|
|
appears if your types must be comparable with == and you have not
|
|
provided this capability (a typo, or wrong visibility, or you
|
|
just plain forgot, etc).
|
|
</p>
|
|
<p>More information, including how to optionally enable/disable the
|
|
checks, is available
|
|
<a href="../19_diagnostics/howto.html#3">here</a>.
|
|
</p>
|
|
</a>
|
|
|
|
<hr>
|
|
<h2><a name="4_5">4.5 Aw, that's easy to fix!</a></h2>
|
|
<p>If you have found a bug in the library and you think you have
|
|
a working fix, then send it in! The main GCC site has a page
|
|
on <a href="http://gcc.gnu.org/contribute.html">submitting
|
|
patches</a> that covers the procedure, but for libstdc++ you
|
|
should also send the patch to our mailing list in addition to
|
|
the GCC patches mailing list. The libstdc++
|
|
<a href="../17_intro/contribute.html">contributors' page</a>
|
|
also talks about how to submit patches.
|
|
</p>
|
|
<p>In addition to the description, the patch, and the ChangeLog
|
|
entry, it is a Good Thing if you can additionally create a small
|
|
test program to test for the presence of the bug that your
|
|
patch fixes. Bugs have a way of being reintroduced; if an old
|
|
bug creeps back in, it will be caught immediately by the
|
|
<a href="#2_4">testsuite</a> -- but only if such a test exists.
|
|
</p>
|
|
|
|
<hr>
|
|
<h1><a name="5_0">5.0 Miscellaneous</a></h1>
|
|
<h2><a name="5_1">5.1 string::iterator is not char*;
|
|
vector<T>::iterator is not T*</a></h2>
|
|
<p>If you have code that depends on container<T> iterators
|
|
being implemented as pointer-to-T, your code is broken.
|
|
</p>
|
|
<p>While there are arguments for iterators to be implemented in
|
|
that manner, A) they aren't very good ones in the long term,
|
|
and B) they were never guaranteed by the Standard anyway. The
|
|
type-safety achieved by making iterators a real class rather
|
|
than a typedef for <code>T*</code> outweighs nearly all opposing
|
|
arguments.
|
|
</p>
|
|
<p>Code which does assume that a vector iterator <code> i </code>
|
|
is a pointer can often be fixed by changing <code> i </code> in
|
|
certain expressions to <code> &*i </code>. Future revisions
|
|
of the Standard are expected to bless this usage for
|
|
vector<> (but not for basic_string<>).
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="5_2">5.2 What's next after libstdc++-v3?</a></h2>
|
|
<p>Hopefully, not much. The goal of libstdc++-v3 is to produce
|
|
a fully-compliant, fully-portable Standard Library. After that,
|
|
we're mostly done: there won't <em>be</em> any more compliance
|
|
work to do. However:
|
|
</p>
|
|
<ol>
|
|
<li><p>The ISO Committee will meet periodically to review Defect Reports
|
|
in the C++ Standard. Undoubtedly some of these will result in
|
|
changes to the Standard, which will be reflected in patches to
|
|
libstdc++. Some of that is already happening, see 4.2. Some of
|
|
those changes are being predicted by the library maintainers, and
|
|
we add code to the library based on what the current proposed
|
|
resolution specifies. Those additions are listed in
|
|
<a href="../ext/howto.html#5">the extensions page</a>.
|
|
</p>
|
|
<li><p>Performance tuning. Lots of performance tuning. This too is
|
|
already underway for post-3.0 releases, starting with memory
|
|
expansion in container classes and buffer usage in synchronized
|
|
stream objects.
|
|
</p>
|
|
<li><p>An ABI for libstdc++ will eventually be developed, so that
|
|
multiple binary-incompatible copies of the library can be replaced
|
|
with a single backwards-compatible library, like libgcc_s.so is.
|
|
</p>
|
|
<li><p>The current libstdc++ contains extensions to the Library which
|
|
must be explicitly requested by client code (for example, the
|
|
hash tables from SGI). Other extensions may be added to
|
|
libstdc++-v3 if they seem to be "standard" enough.
|
|
(For example, the "long long" type from C99.)
|
|
Bugfixes and rewrites (to improve or fix thread safety, for
|
|
instance) will of course be a continuing task.
|
|
</p>
|
|
</ol>
|
|
<p><a href="http://gcc.gnu.org/ml/libstdc++/1999/msg00080.html">This
|
|
question</a> about the next libstdc++ prompted some brief but
|
|
interesting
|
|
<a href="http://gcc.gnu.org/ml/libstdc++/1999/msg00084.html">speculation</a>.
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="5_3">5.3 What about the STL from SGI?</a></h2>
|
|
<p>The <a href="http://www.sgi.com/Technology/STL/">STL from SGI</a>,
|
|
version 3.3, was the most recent merge of the STL codebase. The
|
|
code in libstdc++ contains many fixes and changes, and it is
|
|
very likely that the SGI code is no longer under active
|
|
development. We expect that no future merges will take place.
|
|
</p>
|
|
<p>In particular, <code>string</code> is not from SGI and makes no
|
|
use of their "rope" class (which is included as an
|
|
optional extension), nor is <code>valarray</code> and some others.
|
|
Classes like <code>vector<></code> are, however.
|
|
</p>
|
|
<p>The FAQ for SGI's STL (one jump off of their main page) is
|
|
recommended reading.
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="5_4">5.4 Extensions and Backward Compatibility</a></h2>
|
|
<p>Although you can specify <code>-I</code> options to make the
|
|
preprocessor search the g++-v3/ext and /backward directories,
|
|
it is better to refer to files there by their path, as in:
|
|
<!-- Careful, the leading spaces in PRE show up directly. -->
|
|
</p>
|
|
<pre>
|
|
#include <ext/hash_map>
|
|
</pre>
|
|
<p>Extensions to the library have
|
|
<a href="../ext/howto.html">their own page</a>.
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="5_5">5.5 [removed]</a></h2>
|
|
<p>This question has become moot and has been removed. The stub
|
|
is here to preserve numbering (and hence links/bookmarks).
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="5_6">5.6 Is libstdc++-v3 thread-safe?</a></h2>
|
|
<p>When the system's libc is itself thread-safe, a non-generic
|
|
implementation of atomicity.h exists for the architecture, and
|
|
gcc itself reports a thread model other than single; libstdc++-v3
|
|
strives to be thread-safe. The user-code must guard against
|
|
concurrent method calls which may access any particular
|
|
library object's state. Typically, the application
|
|
programmer may infer what object locks must be held based on
|
|
the objects referenced in a method call. Without getting
|
|
into great detail, here is an example which requires
|
|
user-level locks:
|
|
</p>
|
|
<pre>
|
|
library_class_a shared_object_a;
|
|
|
|
thread_main () {
|
|
library_class_b *object_b = new library_class_b;
|
|
shared_object_a.add_b (object_b); // must hold lock for shared_object_a
|
|
shared_object_a.mutate (); // must hold lock for shared_object_a
|
|
}
|
|
|
|
// Multiple copies of thread_main() are started in independent threads.
|
|
</pre>
|
|
<p>Under the assumption that object_a and object_b are never
|
|
exposed to another thread, here is an example that should not
|
|
require any user-level locks:
|
|
</p>
|
|
<pre>
|
|
thread_main () {
|
|
library_class_a object_a;
|
|
library_class_b *object_b = new library_class_b;
|
|
object_a.add_b (object_b);
|
|
object_a.mutate ();
|
|
}
|
|
</pre>
|
|
<p>All library objects are safe to use in a multithreaded
|
|
program as long as each thread carefully locks out access by
|
|
any other thread while it uses any object visible to another
|
|
thread. This requirement includes both read and write access
|
|
to objects; do not assume that two threads may read a shared
|
|
standard container at the same time.
|
|
</p>
|
|
<p>See chapters <a href="../17_intro/howto.html#3">17</a>,
|
|
<a href="../23_containers/howto.html#3">23</a> and
|
|
<a href="../27_io/howto.html#9">27</a> for more information.
|
|
</p>
|
|
|
|
<hr>
|
|
<h2><a name="5_7">5.7 How do I get a copy of the ISO C++ Standard?</a></h2>
|
|
<p>Copies of the full ISO 14882 standard are available on line via the
|
|
ISO mirror site for committee members. Non-members, or those who
|
|
have not paid for the privilege of sitting on the committee and
|
|
sustained their two-meeting commitment for voting rights, may get a
|
|
copy of the standard from their respective national standards
|
|
organization. In the USA, this national standards organization is
|
|
ANSI and their website is right <a href="http://www.ansi.org">here</a>.
|
|
(And if you've already registered with them, clicking this link will
|
|
take you to directly to the place where you can
|
|
<a href="http://webstore.ansi.org/ansidocstore/product.asp?sku=ISO%2FIEC+14882%2D1998">buy
|
|
the standard on-line</a>.
|
|
</p>
|
|
<p>Who is your country's member body? Visit the
|
|
<a href="http://www.iso.ch/">ISO homepage</a> and find out!
|
|
</p>
|
|
|
|
<!-- ####################################################### -->
|
|
|
|
<hr>
|
|
<p class="fineprint"><em>
|
|
See <a href="../17_intro/license.html">license.html</a> for copying conditions.
|
|
Comments and suggestions are welcome, and may be sent to
|
|
<a href="mailto:libstdc++@gcc.gnu.org">the libstdc++ mailing list</a>.
|
|
</em></p>
|
|
|
|
|
|
</body>
|
|
</html>
|
|
|