Home | History | Annotate | Line # | Download | only in html
      1 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
      2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Frequently Asked Questions</title><meta name="generator" content="DocBook XSL Stylesheets Vsnapshot" /><meta name="keywords" content="ISO C++, runtime, library" /><link rel="home" href="index.html" title="The GNU C++ Library" /><link rel="up" href="bk03.html" title="" /><link rel="prev" href="bk03.html" title="" /></head><body><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Frequently Asked Questions</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="bk03.html">Prev</a></td><th width="60%" align="center"></th><td width="20%" align="right"></td></tr></table><hr /></div><div class="article"><div class="titlepage"><div><div><h1 class="title"><a id="faq"></a>Frequently Asked Questions</h1></div><div><p class="copyright">Copyright  
      3       2008-2023
      4      
      5       <a class="link" href="https://www.fsf.org" target="_top">FSF</a>
      6     </p></div></div><hr /></div><div class="qandaset"><a id="faq.faq"></a><dl><dt></dt><dd><dl><dt>1.1. <a href="faq.html#faq.what">
      7       What is libstdc++?
      8     </a></dt><dt>1.2. <a href="faq.html#faq.why">
      9       Why should I use libstdc++?
     10     </a></dt><dt>1.3. <a href="faq.html#faq.who">
     11       Who's in charge of it?
     12     </a></dt><dt>1.4. <a href="faq.html#faq.when">
     13       When is libstdc++ going to be finished?
     14     </a></dt><dt>1.5. <a href="faq.html#faq.how">
     15       How do I contribute to the effort?
     16     </a></dt><dt>1.6. <a href="faq.html#faq.whereis_old">
     17       What happened to the older libg++? I need that!
     18     </a></dt><dt>1.7. <a href="faq.html#faq.more_questions">
     19       What if I have more questions?
     20     </a></dt></dl></dd><dt></dt><dd><dl><dt>2.1. <a href="faq.html#faq.license.what">
     21       What are the license terms for libstdc++?
     22     </a></dt><dt>2.2. <a href="faq.html#faq.license.any_program">
     23       So any program which uses libstdc++ falls under the GPL?
     24     </a></dt><dt>2.3. <a href="faq.html#faq.license.lgpl">
     25       How is that different from the GNU {Lesser,Library} GPL?
     26     </a></dt><dt>2.4. <a href="faq.html#faq.license.what_restrictions">
     27       I see. So, what restrictions are there on programs that use the library?
     28     </a></dt></dl></dd><dt></dt><dd><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
     29     </a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
     30     </a></dt><dt>3.3. <a href="faq.html#faq.how_to_test">How do I know if it works?
     31     </a></dt><dt>3.4. <a href="faq.html#faq.how_to_set_paths">How do I insure that the dynamically linked library will be found?
     32     </a></dt><dt>3.5. <a href="faq.html#faq.what_is_libsupcxx">
     33       What's libsupc++?
     34     </a></dt><dt>3.6. <a href="faq.html#faq.size">
     35       This library is HUGE!
     36     </a></dt></dl></dd><dt></dt><dd><dl><dt>4.1. <a href="faq.html#faq.other_compilers">
     37       Can libstdc++ be used with non-GNU compilers?
     38     </a></dt><dt>4.2. <a href="faq.html#faq.solaris_long_long">
     39       No 'long long' type on Solaris?
     40     </a></dt><dt>4.3. <a href="faq.html#faq.predefined">
     41       _XOPEN_SOURCE and _GNU_SOURCE are always defined?
     42     </a></dt><dt>4.4. <a href="faq.html#faq.darwin_ctype">
     43       Mac OS X ctype.h is broken! How can I fix it?
     44     </a></dt><dt>4.5. <a href="faq.html#faq.threads_i386">
     45       Threading is broken on i386?
     46     </a></dt><dt>4.6. <a href="faq.html#faq.atomic_mips">
     47       MIPS atomic operations
     48     </a></dt><dt>4.7. <a href="faq.html#faq.linux_glibc">
     49       Recent GNU/Linux glibc required?
     50     </a></dt><dt>4.8. <a href="faq.html#faq.freebsd_wchar">
     51       Can't use wchar_t/wstring on FreeBSD
     52     </a></dt></dl></dd><dt></dt><dd><dl><dt>5.1. <a href="faq.html#faq.what_works">
     53       What works already?
     54     </a></dt><dt>5.2. <a href="faq.html#faq.standard_bugs">
     55       Bugs in the ISO C++ language or library specification
     56     </a></dt><dt>5.3. <a href="faq.html#faq.compiler_bugs">
     57       Bugs in the compiler (gcc/g++) and not libstdc++
     58     </a></dt></dl></dd><dt></dt><dd><dl><dt>6.1. <a href="faq.html#faq.stream_reopening_fails">
     59       Reopening a stream fails
     60     </a></dt><dt>6.2. <a href="faq.html#faq.wefcxx_verbose">
     61       -Weffc++ complains too much
     62     </a></dt><dt>6.3. <a href="faq.html#faq.ambiguous_overloads">
     63       Ambiguous overloads after including an old-style header
     64     </a></dt><dt>6.4. <a href="faq.html#faq.v2_headers">
     65       The g++-3 headers are not ours
     66     </a></dt><dt>6.5. <a href="faq.html#faq.boost_concept_checks">
     67       Errors about *Concept and
     68       constraints in the STL
     69     </a></dt><dt>6.6. <a href="faq.html#faq.dlopen_crash">
     70       Program crashes when using library code in a
     71       dynamically-loaded library
     72     </a></dt><dt>6.7. <a href="faq.html#faq.memory_leaks">
     73       Memory leaks in libstdc++
     74     </a></dt><dt>6.8. <a href="faq.html#faq.list_size_on">
     75       list::size() is O(n)!
     76     </a></dt><dt>6.9. <a href="faq.html#faq.easy_to_fix">
     77       Aw, that's easy to fix!
     78     </a></dt></dl></dd><dt></dt><dd><dl><dt>7.1. <a href="faq.html#faq.iterator_as_pod">
     79       string::iterator is not char*;
     80       vector&lt;T&gt;::iterator is not T*
     81     </a></dt><dt>7.2. <a href="faq.html#faq.what_is_next">
     82       What's next after libstdc++?
     83     </a></dt><dt>7.3. <a href="faq.html#faq.sgi_stl">
     84       What about the STL from SGI?
     85     </a></dt><dt>7.4. <a href="faq.html#faq.extensions_and_backwards_compat">
     86       Extensions and Backward Compatibility
     87     </a></dt><dt>7.5. <a href="faq.html#faq.tr1_support">
     88       Does libstdc++ support TR1?
     89     </a></dt><dt>7.6. <a href="faq.html#faq.get_iso_cxx">How do I get a copy of the ISO C++ Standard?
     90     </a></dt><dt>7.7. <a href="faq.html#faq.what_is_abi">
     91       What's an ABI and why is it so messy?
     92     </a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
     93       How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
     94     </a></dt></dl></dd></dl><table border="0" style="width: 100%;"><colgroup><col align="left" width="1%" /><col /></colgroup><tbody><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>1.1. <a href="faq.html#faq.what">
     95       What is libstdc++?
     96     </a></dt><dt>1.2. <a href="faq.html#faq.why">
     97       Why should I use libstdc++?
     98     </a></dt><dt>1.3. <a href="faq.html#faq.who">
     99       Who's in charge of it?
    100     </a></dt><dt>1.4. <a href="faq.html#faq.when">
    101       When is libstdc++ going to be finished?
    102     </a></dt><dt>1.5. <a href="faq.html#faq.how">
    103       How do I contribute to the effort?
    104     </a></dt><dt>1.6. <a href="faq.html#faq.whereis_old">
    105       What happened to the older libg++? I need that!
    106     </a></dt><dt>1.7. <a href="faq.html#faq.more_questions">
    107       What if I have more questions?
    108     </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what"></a><a id="faq.what.q"></a><p><strong>1.1.</strong></p></td><td align="left" valign="top"><p>
    109       What is libstdc++?
    110     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.what.a"></a></td><td align="left" valign="top"><p>
    111      The GNU Standard C++ Library v3 is an ongoing project to
    112      implement the ISO 14882 C++ Standard Library as described in
    113      clauses 20 through 33 and annex D (prior to the 2017 standard
    114      the library clauses started with 17).  For those who want to see
    115      exactly how far the project has come, or just want the latest
    116      bleeding-edge code, the up-to-date source can be cloned via
    117      <a class="link" href="https://gcc.gnu.org/git.html" target="_top">Git</a>.
    118     </p><p>
    119     N.B. The library is called libstdc++ <span class="emphasis"><em>not</em></span> stdlibc++.
    120     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.why"></a><a id="q-why"></a><p><strong>1.2.</strong></p></td><td align="left" valign="top"><p>
    121       Why should I use libstdc++?
    122     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-why"></a></td><td align="left" valign="top"><p>
    123     The completion of the initial ISO C++ standardization effort gave the C++
    124     community a powerful set of reuseable tools in the form of the C++
    125     Standard Library.  However, for several years C++ implementations were
    126     (as the Draft Standard used to say) <span class="quote"><span class="quote">incomplet and
    127     incorrekt</span></span>, and many suffered from limitations of the compilers
    128     that used them.
    129     </p><p>
    130     The GNU compiler collection
    131     (<span class="command"><strong>gcc</strong></span>, <span class="command"><strong>g++</strong></span>, etc) is widely
    132     considered to be one of the leading compilers in the world.  Its
    133     development is overseen by the
    134     <a class="link" href="https://gcc.gnu.org/" target="_top">GCC team</a>.
    135     All of the rapid development and near-legendary portability
    136     that are the hallmarks of an open-source project are applied to libstdc++.
    137     </p><p>
    138     All of the standard classes and functions from C++98/C++03, C++11 and C++14
    139     (such as <code class="classname">string</code>,
    140     <code class="classname">vector&lt;&gt;</code>, iostreams, algorithms etc.)
    141     are freely available and attempt to be fully compliant.
    142     Work is ongoing to complete support for the current revision of the
    143     ISO C++ Standard.
    144     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.who"></a><a id="q-who"></a><p><strong>1.3.</strong></p></td><td align="left" valign="top"><p>
    145       Who's in charge of it?
    146     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-who"></a></td><td align="left" valign="top"><p>
    147      The libstdc++ project is contributed to by several developers
    148      all over the world, in the same way as GCC or the Linux kernel.
    149      The current maintainers are listed in the
    150      <a class="link" href="https://gcc.gnu.org/cgit/gcc/tree/MAINTAINERS" target="_top"><code class="filename">MAINTAINERS</code></a>
    151      file (look for "c++ runtime libs").
    152     </p><p>
    153     Development and discussion is held on the libstdc++ mailing
    154     list.  Subscribing to the list, or searching the list
    155     archives, is open to everyone.  You can read instructions for
    156     doing so on the <a class="link" href="https://gcc.gnu.org/lists.html" target="_top">GCC mailing lists</a> page.
    157     If you have questions, ideas, code, or are just curious, sign up!
    158     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.when"></a><a id="q-when"></a><p><strong>1.4.</strong></p></td><td align="left" valign="top"><p>
    159       When is libstdc++ going to be finished?
    160     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-when"></a></td><td align="left" valign="top"><p>
    161     Nathan Myers gave the best of all possible answers, responding to
    162     a Usenet article asking this question: <span class="emphasis"><em>Sooner, if you
    163     help.</em></span>
    164     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how"></a><a id="q-how"></a><p><strong>1.5.</strong></p></td><td align="left" valign="top"><p>
    165       How do I contribute to the effort?
    166     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how"></a></td><td align="left" valign="top"><p>
    167     See the <a class="link" href="manual/appendix_contributing.html" title="AppendixA. Contributing">Contributing</a> section in
    168     the manual. Subscribing to the mailing list (see above, or
    169     the homepage) is a very good idea if you have something to
    170     contribute, or if you have spare time and want to
    171     help. Contributions don't have to be in the form of source code;
    172     anybody who is willing to help write documentation, for example,
    173     or has found a bug in code that we all thought was working and is
    174     willing to provide details, is more than welcome!
    175     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.whereis_old"></a><a id="q-whereis_old"></a><p><strong>1.6.</strong></p></td><td align="left" valign="top"><p>
    176       What happened to the older libg++? I need that!
    177     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-whereis_old"></a></td><td align="left" valign="top"><p>
    178     The last libg++ README states
    179     <span class="quote"><span class="quote">This package is considered obsolete and is no longer
    180     being developed.</span></span>
    181     It should not be used for new projects, and won't even compile with
    182     recent releases of GCC (or most other C++ compilers).
    183     </p><p>
    184     More information can be found in the
    185     <a class="link" href="manual/backwards.html" title="Backwards Compatibility">Backwards
    186     Compatibility</a> section of the libstdc++ manual.
    187     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.more_questions"></a><a id="q-more_questions"></a><p><strong>1.7.</strong></p></td><td align="left" valign="top"><p>
    188       What if I have more questions?
    189     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-more_questions"></a></td><td align="left" valign="top"><p>
    190     If you have read the documentation, and your question remains
    191     unanswered, then just ask the mailing list. At present, you do not
    192     need to be subscribed to the list to send a message to it.  More
    193     information is available on the homepage (including how to browse
    194     the list archives); to send a message to the list,
    195     use <code class="email">&lt;<a class="email" href="mailto:libstdc++@gcc.gnu.org">libstdc++@gcc.gnu.org</a>&gt;</code>.
    196     </p><p>
    197     If you have a question that you think should be included
    198     here, or if you have a question <span class="emphasis"><em>about</em></span> a question/answer
    199     here, please send email to the libstdc++ mailing list, as above.
    200     </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>2.1. <a href="faq.html#faq.license.what">
    201       What are the license terms for libstdc++?
    202     </a></dt><dt>2.2. <a href="faq.html#faq.license.any_program">
    203       So any program which uses libstdc++ falls under the GPL?
    204     </a></dt><dt>2.3. <a href="faq.html#faq.license.lgpl">
    205       How is that different from the GNU {Lesser,Library} GPL?
    206     </a></dt><dt>2.4. <a href="faq.html#faq.license.what_restrictions">
    207       I see. So, what restrictions are there on programs that use the library?
    208     </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.what"></a><a id="q-license.what"></a><p><strong>2.1.</strong></p></td><td align="left" valign="top"><p>
    209       What are the license terms for libstdc++?
    210     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what"></a></td><td align="left" valign="top"><p>
    211     See <a class="link" href="manual/license.html" title="License">our license description</a>
    212     for these and related questions.
    213     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.any_program"></a><a id="q-license.any_program"></a><p><strong>2.2.</strong></p></td><td align="left" valign="top"><p>
    214       So any program which uses libstdc++ falls under the GPL?
    215     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.any_program"></a></td><td align="left" valign="top"><p>
    216      No. The special exception permits use of the library in
    217      proprietary applications.
    218     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.lgpl"></a><a id="q-license.lgpl"></a><p><strong>2.3.</strong></p></td><td align="left" valign="top"><p>
    219       How is that different from the GNU {Lesser,Library} GPL?
    220     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.lgpl"></a></td><td align="left" valign="top"><p>
    221       The LGPL requires that users be able to replace the LGPL code with a
    222      modified version; this is trivial if the library in question is a C
    223      shared library.  But there's no way to make that work with C++, where
    224      much of the library consists of inline functions and templates, which
    225      are expanded inside the code that uses the library.  So to allow people
    226      to replace the library code, someone using the library would have to
    227      distribute their own source, rendering the LGPL equivalent to the GPL.
    228     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.license.what_restrictions"></a><a id="q-license.what_restrictions"></a><p><strong>2.4.</strong></p></td><td align="left" valign="top"><p>
    229       I see. So, what restrictions are there on programs that use the library?
    230     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-license.what_restrictions"></a></td><td align="left" valign="top"><p>
    231       None.  We encourage such programs to be released as free software,
    232      but we won't punish you or sue you if you choose otherwise.
    233     </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>3.1. <a href="faq.html#faq.how_to_install">How do I install libstdc++?
    234     </a></dt><dt>3.2. <a href="faq.html#faq.how_to_get_sources">How does one get current libstdc++ sources?
    235     </a></dt><dt>3.3. <a href="faq.html#faq.how_to_test">How do I know if it works?
    236     </a></dt><dt>3.4. <a href="faq.html#faq.how_to_set_paths">How do I insure that the dynamically linked library will be found?
    237     </a></dt><dt>3.5. <a href="faq.html#faq.what_is_libsupcxx">
    238       What's libsupc++?
    239     </a></dt><dt>3.6. <a href="faq.html#faq.size">
    240       This library is HUGE!
    241     </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_install"></a><a id="q-how_to_install"></a><p><strong>3.1.</strong></p></td><td align="left" valign="top"><p>How do I install libstdc++?
    242     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_install"></a></td><td align="left" valign="top"><p>
    243     Often libstdc++ comes pre-installed as an integral part of many
    244     existing GNU/Linux and Unix systems, as well as many embedded
    245     development tools. It may be necessary to install extra
    246     development packages to get the headers, or the documentation, or
    247     the source: please consult your vendor for details.
    248     </p><p>
    249     To build and install from the GNU GCC sources, please consult the
    250     <a class="link" href="manual/setup.html" title="Chapter2.Setup">setup
    251     documentation</a> for detailed
    252     instructions. You may wish to browse those files ahead
    253     of time to get a feel for what's required.
    254     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_get_sources"></a><a id="q-how_to_get_sources"></a><p><strong>3.2.</strong></p></td><td align="left" valign="top"><p>How does one get current libstdc++ sources?
    255     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_get_sources"></a></td><td align="left" valign="top"><p>
    256     Libstdc++ sources for all official releases can be obtained as
    257     part of the GCC sources, available from various sites and
    258     mirrors. A full <a class="link" href="https://gcc.gnu.org/mirrors.html" target="_top">list of
    259     download sites</a> is provided on the main GCC site.
    260     </p><p>
    261     Current libstdc++ sources can always be found in the main GCC source
    262     repository, available using the appropriate version control tool.
    263     At this time, that tool is <span class="application">Git</span>.
    264     For more details see the documentation on
    265     <a class="link" href="https://gcc.gnu.org/git.html" target="_top">using the Git repository</a>.
    266     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_test"></a><a id="q-how_to_test"></a><p><strong>3.3.</strong></p></td><td align="left" valign="top"><p>How do I know if it works?
    267     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_test"></a></td><td align="left" valign="top"><p>
    268     Libstdc++ comes with its own validation testsuite, which includes
    269     conformance testing, regression testing, ABI testing, and
    270     performance testing. Please consult the
    271     <a class="link" href="http://gcc.gnu.org/install/test.html" target="_top">testing
    272     documentation</a> for GCC and
    273     <a class="link" href="manual/test.html" title="Testing">Testing</a> in the libstdc++
    274     manual for more details.
    275     </p><p>
    276     If you find bugs in the testsuite programs themselves, or if you
    277     think of a new test program that should be added to the suite,
    278     <span class="emphasis"><em>please</em></span> write up your idea and send it to the list!
    279     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.how_to_set_paths"></a><a id="q-how_to_set_paths"></a><p><strong>3.4.</strong></p></td><td align="left" valign="top"><p>How do I insure that the dynamically linked library will be found?
    280     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-how_to_set_paths"></a></td><td align="left" valign="top"><p>
    281     Depending on your platform and library version, the error message might
    282     be similar to one of the following:
    283     </p><pre class="screen">
    284     ./a.out: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
    285 
    286     /usr/libexec/ld-elf.so.1: Shared object "libstdc++.so.6" not found
    287     </pre><p>
    288     This doesn't mean that the shared library isn't installed, only
    289     that the dynamic linker can't find it. When a dynamically-linked
    290     executable is run the linker finds and loads the required shared
    291     libraries by searching a pre-configured list of directories. If
    292     the directory where you've installed libstdc++ is not in this list
    293     then the libraries won't be found.
    294     </p><p>
    295     If you already have an older version of libstdc++ installed then the
    296     error might look like one of the following instead:
    297     </p><pre class="screen">
    298     ./a.out: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
    299     ./a.out: /usr/lib/libstdc++.so.6: version `CXXABI_1.3.8' not found
    300     </pre><p>
    301     This means the linker found <code class="filename">/usr/lib/libstdc++.so.6</code>
    302     but that library belongs to an older version of GCC than was used to
    303     compile and link the program <code class="filename">a.out</code> (or some part
    304     of it). The program depends on code defined in the newer libstdc++
    305     that belongs to the newer version of GCC, so the linker must be told
    306     how to find the newer libstdc++ shared library.
    307     </p><p>
    308     The simplest way to fix this is
    309     to use the <code class="envar">LD_LIBRARY_PATH</code> environment variable,
    310     which is a colon-separated list of directories in which the linker
    311     will search for shared libraries:
    312     </p><pre class="screen"><span class="command"><strong>
    313     export LD_LIBRARY_PATH=${prefix}/lib:$LD_LIBRARY_PATH
    314     </strong></span></pre><p>
    315     Here the shell variable <code class="varname">${prefix}</code> is assumed to contain
    316     the directory prefix where GCC was installed to. The directory containing
    317     the library might depend on whether you want the 32-bit or 64-bit copy
    318     of the library, so for example would be
    319     <code class="filename">${prefix}/lib64</code> on some systems.
    320     The exact environment variable to use will depend on your
    321     platform, e.g. <code class="envar">DYLD_LIBRARY_PATH</code> for Darwin,
    322     <code class="envar">LD_LIBRARY_PATH_32</code>/<code class="envar">LD_LIBRARY_PATH_64</code>
    323     for Solaris 32-/64-bit,
    324     and <code class="envar">SHLIB_PATH</code> for HP-UX.
    325     </p><p>
    326     See the man pages for <span class="command"><strong>ld</strong></span>, <span class="command"><strong>ldd</strong></span>
    327     and <span class="command"><strong>ldconfig</strong></span> for more information. The dynamic
    328     linker has different names on different platforms but the man page
    329     is usually called something such as <code class="filename">ld.so</code>,
    330     <code class="filename">rtld</code> or <code class="filename">dld.so</code>.
    331     </p><p>
    332     Using <code class="envar">LD_LIBRARY_PATH</code> is not always the best solution,
    333     <a class="link" href="manual/using_dynamic_or_shared.html#manual.intro.using.linkage.dynamic" title="Finding Dynamic or Shared Libraries">Finding Dynamic or Shared
    334     Libraries</a> in the manual gives some alternatives.
    335     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_is_libsupcxx"></a><a id="q-what_is_libsupcxx"></a><p><strong>3.5.</strong></p></td><td align="left" valign="top"><p>
    336       What's libsupc++?
    337     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_libsupcxx"></a></td><td align="left" valign="top"><p>
    338       If the only functions from <code class="filename">libstdc++.a</code>
    339       which you need are language support functions (those listed in
    340       <a class="link" href="manual/support.html" title="Chapter4. Support">clause 18</a> of the
    341       standard, e.g., <code class="function">new</code> and
    342       <code class="function">delete</code>), then try linking against
    343       <code class="filename">libsupc++.a</code>, which is a subset of
    344       <code class="filename">libstdc++.a</code>.  (Using <span class="command"><strong>gcc</strong></span>
    345       instead of <span class="command"><strong>g++</strong></span> and explicitly linking in
    346       <code class="filename">libsupc++.a</code> via <code class="option">-lsupc++</code>
    347       for the final link step will do it).  This library contains only
    348       those support routines, one per object file.  But if you are
    349       using anything from the rest of the library, such as IOStreams
    350       or vectors, then you'll still need pieces from
    351       <code class="filename">libstdc++.a</code>.
    352     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.size"></a><a id="q-size"></a><p><strong>3.6.</strong></p></td><td align="left" valign="top"><p>
    353       This library is HUGE!
    354     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size"></a></td><td align="left" valign="top"><p>
    355     Usually the size of libraries on disk isn't noticeable.  When a
    356     link editor (or simply <span class="quote"><span class="quote">linker</span></span>) pulls things from a
    357     static archive library, only the necessary object files are copied
    358     into your executable, not the entire library.  Unfortunately, even
    359     if you only need a single function or variable from an object file,
    360     the entire object file is extracted.  (There's nothing unique to C++
    361     or libstdc++ about this; it's just common behavior, given here
    362     for background reasons.)
    363     </p><p>
    364     Some of the object files which make up
    365     <code class="filename">libstdc++.a</code> are rather large.
    366     If you create a statically-linked executable with
    367     <code class="option">-static</code>, those large object files are suddenly part
    368     of your executable.  Historically the best way around this was to
    369     only place a very few functions (often only a single one) in each
    370     source/object file; then extracting a single function is the same
    371     as extracting a single <code class="filename">.o</code> file.  For libstdc++ this
    372     is only possible to a certain extent; the object files in question contain
    373     template classes and template functions, pre-instantiated, and
    374     splitting those up causes severe maintenance headaches.
    375     </p><p>
    376     On supported platforms, libstdc++ takes advantage of garbage
    377     collection in the GNU linker to get a result similar to separating
    378     each symbol into a separate source and object files. On these platforms,
    379     GNU ld can place each function and variable into its own
    380     section in a <code class="filename">.o</code> file.  The GNU linker can then perform
    381     garbage collection on unused sections; this reduces the situation to only
    382     copying needed functions into the executable, as before, but all
    383     happens automatically.
    384     </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>4.1. <a href="faq.html#faq.other_compilers">
    385       Can libstdc++ be used with non-GNU compilers?
    386     </a></dt><dt>4.2. <a href="faq.html#faq.solaris_long_long">
    387       No 'long long' type on Solaris?
    388     </a></dt><dt>4.3. <a href="faq.html#faq.predefined">
    389       _XOPEN_SOURCE and _GNU_SOURCE are always defined?
    390     </a></dt><dt>4.4. <a href="faq.html#faq.darwin_ctype">
    391       Mac OS X ctype.h is broken! How can I fix it?
    392     </a></dt><dt>4.5. <a href="faq.html#faq.threads_i386">
    393       Threading is broken on i386?
    394     </a></dt><dt>4.6. <a href="faq.html#faq.atomic_mips">
    395       MIPS atomic operations
    396     </a></dt><dt>4.7. <a href="faq.html#faq.linux_glibc">
    397       Recent GNU/Linux glibc required?
    398     </a></dt><dt>4.8. <a href="faq.html#faq.freebsd_wchar">
    399       Can't use wchar_t/wstring on FreeBSD
    400     </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.other_compilers"></a><a id="q-other_compilers"></a><p><strong>4.1.</strong></p></td><td align="left" valign="top"><p>
    401       Can libstdc++ be used with non-GNU compilers?
    402     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-other_compilers"></a></td><td align="left" valign="top"><p>
    403     Perhaps.
    404     </p><p>
    405     Since the goal of ISO Standardization is for all C++
    406     implementations to be able to share code, libstdc++ should be
    407     usable under any ISO-compliant compiler, at least in theory.
    408     </p><p>
    409     However, the reality is that libstdc++ is targeted and optimized
    410     for GCC/G++. This means that often libstdc++ uses specific,
    411     non-standard features of G++ that are not present in older
    412     versions of proprietary compilers. It may take as much as a year or two
    413     after an official release of GCC that contains these features for
    414     proprietary tools to support these constructs.
    415     </p><p>
    416     Recent versions of libstdc++ are known to work with the Clang compiler.
    417     In the near past, specific released versions of libstdc++ have
    418     been known to work with versions of the EDG C++ compiler, and
    419     vendor-specific proprietary C++ compilers such as the Intel ICC
    420     C++ compiler.
    421     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.solaris_long_long"></a><a id="q-solaris_long_long"></a><p><strong>4.2.</strong></p></td><td align="left" valign="top"><p>
    422       No '<span class="type">long long</span>' type on Solaris?
    423     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-solaris_long_long"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
    424     By default we try to support the C99 <span class="type">long long</span> type.
    425     This requires that certain functions from your C library be present.
    426     </p><p>
    427     Up through release 3.0.2 the platform-specific tests performed by
    428     libstdc++ were too general, resulting in a conservative approach
    429     to enabling the <span class="type">long long</span> code paths. The most
    430     commonly reported platform affected was Solaris.
    431     </p><p>
    432     This has been fixed for libstdc++ releases greater than 3.0.3.
    433     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.predefined"></a><a id="q-predefined"></a><p><strong>4.3.</strong></p></td><td align="left" valign="top"><p>
    434       <code class="constant">_XOPEN_SOURCE</code> and <code class="constant">_GNU_SOURCE</code> are always defined?
    435     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-predefined"></a></td><td align="left" valign="top"><p>On Solaris, <span class="command"><strong>g++</strong></span> (but not <span class="command"><strong>gcc</strong></span>)
    436          always defines the preprocessor macro
    437 	 <code class="constant">_XOPEN_SOURCE</code>.  On GNU/Linux, the same happens
    438          with <code class="constant">_GNU_SOURCE</code>.  (This is not an exhaustive list;
    439          other macros and other platforms are also affected.)
    440       </p><p>These macros are typically used in C library headers, guarding new
    441          versions of functions from their older versions.  The C++98 standard
    442          library includes the C standard library, but it requires the C90
    443          version, which for backwards-compatibility reasons is often not the
    444          default for many vendors.
    445       </p><p>More to the point, the C++ standard requires behavior which is only
    446          available on certain platforms after certain symbols are defined.
    447          Usually the issue involves I/O-related typedefs.  In order to
    448          ensure correctness, the compiler simply predefines those symbols.
    449       </p><p>Note that it's not enough to <code class="literal">#define</code> them only when the library is
    450          being built (during installation).  Since we don't have an 'export'
    451          keyword, much of the library exists as headers, which means that
    452          the symbols must also be defined as your programs are parsed and
    453          compiled.
    454       </p><p>To see which symbols are defined, look for
    455          <code class="varname">CPLUSPLUS_CPP_SPEC</code> in
    456          the gcc config headers for your target (and try changing them to
    457          see what happens when building complicated code).  You can also run
    458          <span class="command"><strong>g++ -E -dM -x c++ /dev/null</strong></span> to display
    459          a list of predefined macros for any particular installation.
    460       </p><p>This has been discussed on the mailing lists
    461          <a class="link" href="http://gcc.gnu.org/cgi-bin/htsearch?method=and&format=builtin-long&sort=score&words=_XOPEN_SOURCE+Solaris" target="_top">quite a bit</a>.
    462       </p><p>This method is something of a wart.  We'd like to find a cleaner
    463          solution, but nobody yet has contributed the time.
    464       </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.darwin_ctype"></a><a id="q-darwin_ctype"></a><p><strong>4.4.</strong></p></td><td align="left" valign="top"><p>
    465       Mac OS X <code class="filename">ctype.h</code> is broken! How can I fix it?
    466     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-darwin_ctype"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
    467          This was a long-standing bug in the OS X support.  Fortunately, the
    468          <a class="link" href="http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html" target="_top">patch</a>
    469 	 was quite simple, and well-known.
    470       </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.threads_i386"></a><a id="q-threads_i386"></a><p><strong>4.5.</strong></p></td><td align="left" valign="top"><p>
    471       Threading is broken on i386?
    472     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-threads_i386"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>Support for atomic integer operations was broken on i386
    473          platforms.  The assembly code accidentally used opcodes that are
    474          only available on the i486 and later.  So if you configured GCC
    475          to target, for example, i386-linux, but actually used the programs
    476          on an i686, then you would encounter no problems.  Only when
    477          actually running the code on a i386 will the problem appear.
    478       </p><p>This is fixed in 3.2.2.
    479       </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.atomic_mips"></a><a id="q-atomic_mips"></a><p><strong>4.6.</strong></p></td><td align="left" valign="top"><p>
    480       MIPS atomic operations
    481     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-atomic_mips"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
    482     The atomic locking routines for MIPS targets requires MIPS II
    483     and later.  A patch went in just after the 3.3 release to
    484     make mips* use the generic implementation instead.  You can also
    485     configure for mipsel-elf as a workaround.
    486     </p><p>
    487     The mips*-*-linux* port continues to use the MIPS II routines, and more
    488     work in this area is expected.
    489     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.linux_glibc"></a><a id="q-linux_glibc"></a><p><strong>4.7.</strong></p></td><td align="left" valign="top"><p>
    490       Recent GNU/Linux glibc required?
    491     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-linux_glibc"></a></td><td align="left" valign="top"><p>When running on GNU/Linux, libstdc++ 3.2.1 (shared library version
    492          5.0.1) and later uses localization and formatting code from the system
    493          C library (glibc) version 2.2.5 which contains necessary bugfixes.
    494          All GNU/Linux distros make more recent versions available now.
    495          libstdc++ 4.6.0 and later require glibc 2.3 or later for this
    496          localization and formatting code.
    497       </p><p>The guideline is simple:  the more recent the C++ library, the
    498          more recent the C library.  (This is also documented in the main
    499          GCC installation instructions.)
    500       </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.freebsd_wchar"></a><a id="q-freebsd_wchar"></a><p><strong>4.8.</strong></p></td><td align="left" valign="top"><p>
    501       Can't use <span class="type">wchar_t</span>/<code class="classname">wstring</code> on FreeBSD
    502     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-freebsd_wchar"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
    503     Older versions of FreeBSD's C library do not have sufficient
    504     support for wide character functions, and as a result the
    505     libstdc++ configury decides that <span class="type">wchar_t</span> support should be
    506     disabled. In addition, the libstdc++ platform checks that
    507     enabled <span class="type">wchar_t</span> were quite strict, and not granular
    508     enough to detect when the minimal support to
    509     enable <span class="type">wchar_t</span> and C++ library structures
    510     like <code class="classname">wstring</code> were present. This impacted Solaris,
    511     Darwin, and BSD variants, and is fixed in libstdc++ versions post 4.1.0.
    512     </p><p>
    513     </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>5.1. <a href="faq.html#faq.what_works">
    514       What works already?
    515     </a></dt><dt>5.2. <a href="faq.html#faq.standard_bugs">
    516       Bugs in the ISO C++ language or library specification
    517     </a></dt><dt>5.3. <a href="faq.html#faq.compiler_bugs">
    518       Bugs in the compiler (gcc/g++) and not libstdc++
    519     </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_works"></a><a id="q-what_works"></a><p><strong>5.1.</strong></p></td><td align="left" valign="top"><p>
    520       What works already?
    521     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_works"></a></td><td align="left" valign="top"><p>
    522     Short answer: Pretty much everything <span class="emphasis"><em>works</em></span>
    523     except for some corner cases.  Support for localization
    524     in <code class="classname">locale</code> may be incomplete on some non-GNU
    525     platforms. Also dependent on the underlying platform is support
    526     for <span class="type">wchar_t</span> and <span class="type">long long</span> specializations,
    527     and details of thread support.
    528     </p><p>
    529     Long answer: See the implementation status pages for
    530     <a class="link" href="manual/status.html#status.iso.1998" title="C++ 1998/2003">C++98</a>,
    531     <a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">TR1</a>,
    532     <a class="link" href="manual/status.html#status.iso.2011" title="C++ 2011">C++11</a>,
    533     <a class="link" href="manual/status.html#status.iso.2014" title="C++ 2014">C++14</a>, and
    534     <a class="link" href="manual/status.html#status.iso.2017" title="C++ 2017">C++17</a>.
    535     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.standard_bugs"></a><a id="q-standard_bugs"></a><p><strong>5.2.</strong></p></td><td align="left" valign="top"><p>
    536       Bugs in the ISO C++ language or library specification
    537     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-standard_bugs"></a></td><td align="left" valign="top"><p>
    538     Unfortunately, there are some.
    539     </p><p>
    540     For those people who are not part of the ISO Library Group
    541     (i.e., nearly all of us needing to read this page in the first
    542     place), a public list of the library defects is occasionally
    543     published on <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/" target="_top">the WG21
    544     website</a>.
    545     Many of these issues have resulted in
    546     <a class="link" href="manual/bugs.html#manual.intro.status.bugs.iso" title="Standard Bugs">code changes in libstdc++</a>.
    547     </p><p>
    548     If you think you've discovered a new bug that is not listed,
    549     please post a message describing your problem to the author of
    550     the library issues list.
    551     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.compiler_bugs"></a><a id="q-compiler_bugs"></a><p><strong>5.3.</strong></p></td><td align="left" valign="top"><p>
    552       Bugs in the compiler (gcc/g++) and not libstdc++
    553     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-compiler_bugs"></a></td><td align="left" valign="top"><p>
    554     On occasion, the compiler is wrong. Please be advised that this
    555     happens much less often than one would think, and avoid jumping to
    556     conclusions.
    557     </p><p>
    558     First, examine the ISO C++ standard. Second, try another compiler
    559     or an older version of the GNU compilers. Third, you can find more
    560     information on the libstdc++ and the GCC mailing lists: search
    561     these lists with terms describing your issue.
    562     </p><p>
    563     Before reporting a bug, please examine the
    564     <a class="link" href="https://gcc.gnu.org/bugs/" target="_top">bugs database</a>, with the
    565     component set to <span class="quote"><span class="quote">c++</span></span>.
    566     </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>6.1. <a href="faq.html#faq.stream_reopening_fails">
    567       Reopening a stream fails
    568     </a></dt><dt>6.2. <a href="faq.html#faq.wefcxx_verbose">
    569       -Weffc++ complains too much
    570     </a></dt><dt>6.3. <a href="faq.html#faq.ambiguous_overloads">
    571       Ambiguous overloads after including an old-style header
    572     </a></dt><dt>6.4. <a href="faq.html#faq.v2_headers">
    573       The g++-3 headers are not ours
    574     </a></dt><dt>6.5. <a href="faq.html#faq.boost_concept_checks">
    575       Errors about *Concept and
    576       constraints in the STL
    577     </a></dt><dt>6.6. <a href="faq.html#faq.dlopen_crash">
    578       Program crashes when using library code in a
    579       dynamically-loaded library
    580     </a></dt><dt>6.7. <a href="faq.html#faq.memory_leaks">
    581       Memory leaks in libstdc++
    582     </a></dt><dt>6.8. <a href="faq.html#faq.list_size_on">
    583       list::size() is O(n)!
    584     </a></dt><dt>6.9. <a href="faq.html#faq.easy_to_fix">
    585       Aw, that's easy to fix!
    586     </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.stream_reopening_fails"></a><a id="q-stream_reopening_fails"></a><p><strong>6.1.</strong></p></td><td align="left" valign="top"><p>
    587       Reopening a stream fails
    588     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-stream_reopening_fails"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
    589     Prior to GCC 4.0 this was one of the most-reported non-bug reports.
    590     Executing a sequence like this would fail:
    591     </p><pre class="programlisting">
    592     #include &lt;fstream&gt;
    593     ...
    594     std::fstream  fs("a_file");
    595     // .
    596     // . do things with fs...
    597     // .
    598     fs.close();
    599     fs.open("a_new_file");
    600     </pre><p>
    601     All operations on the re-opened <code class="varname">fs</code> would fail, or at
    602     least act very strangely, especially if <code class="varname">fs</code> reached the
    603     EOF state on the previous file.
    604     The original C++98 standard did not specify behavior in this case, and
    605     the <a class="link" href="manual/bugs.html#manual.bugs.dr22">resolution of DR #22</a> was to
    606     leave the state flags unchanged on a successful call to
    607     <code class="function">open()</code>.
    608     You had to insert a call to <code class="function">fs.clear()</code> between the
    609     calls to <code class="function">close()</code> and <code class="function">open()</code>,
    610     and then everything will work as expected.
    611     <span class="emphasis"><em>Update:</em></span> For GCC 4.0 we implemented the resolution
    612     of <a class="link" href="manual/bugs.html#manual.bugs.dr409">DR #409</a> and
    613     <code class="function">open()</code>
    614     now calls <code class="function">clear()</code> on success.
    615     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.wefcxx_verbose"></a><a id="q-wefcxx_verbose"></a><p><strong>6.2.</strong></p></td><td align="left" valign="top"><p>
    616       -Weffc++ complains too much
    617     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-wefcxx_verbose"></a></td><td align="left" valign="top"><p>
    618     Many warnings are emitted when <code class="option">-Weffc++</code> is used.  Making
    619     libstdc++ <code class="option">-Weffc++</code>-clean is not a goal of the project,
    620     for a few reasons.  Mainly, that option tries to enforce
    621     object-oriented programming, while the Standard Library isn't
    622     necessarily trying to be OO. The option also enforces outdated guidelines
    623     from old editions of the books, and the advice isn't all relevant to
    624     modern C++ (especially C++11 and later).
    625     </p><p>
    626     We do, however, try to have libstdc++ sources as clean as possible. If
    627     you see some simple changes that pacify <code class="option">-Weffc++</code>
    628     without other drawbacks, send us a patch.
    629     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.ambiguous_overloads"></a><a id="q-ambiguous_overloads"></a><p><strong>6.3.</strong></p></td><td align="left" valign="top"><p>
    630       Ambiguous overloads after including an old-style header
    631     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-ambiguous_overloads"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
    632     Another problem is the <code class="literal">rel_ops</code> namespace and the template
    633     comparison operator functions contained therein.  If they become
    634     visible in the same namespace as other comparison functions
    635     (e.g., <span class="quote"><span class="quote">using</span></span> them and the
    636     <code class="filename">&lt;iterator&gt;</code> header),
    637     then you will suddenly be faced with huge numbers of ambiguity
    638     errors.  This was discussed on the mailing list; Nathan Myers
    639     <a class="link" href="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html" target="_top">sums
    640       things up here</a>.  The collisions with vector/string iterator
    641     types have been fixed for 3.1.
    642     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.v2_headers"></a><a id="q-v2_headers"></a><p><strong>6.4.</strong></p></td><td align="left" valign="top"><p>
    643       The g++-3 headers are <span class="emphasis"><em>not ours</em></span>
    644     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-v2_headers"></a></td><td align="left" valign="top"><div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title">Note</h3><p>This answer is old and probably no longer be relevant.</p></div><p>
    645 	If you are using headers in
    646 	<code class="filename">${prefix}/include/g++-3</code>, or if
    647 	the installed library's name looks like
    648 	<code class="filename">libstdc++-2.10.a</code> or
    649 	<code class="filename">libstdc++-libc6-2.10.so</code>, then
    650 	you are using the old libstdc++-v2 library, which is non-standard and
    651 	unmaintained.  Do not report problems with -v2 to the -v3
    652 	mailing list.
    653       </p><p>
    654 	For GCC versions 3.0 and 3.1 the libstdc++ header files are installed in
    655 	<code class="filename">${prefix}/include/g++-v3</code>
    656 	(see the 'v'?).  Starting with version 3.2 the headers are installed in
    657 	<code class="filename">${prefix}/include/c++/${version}</code>
    658 	as this prevents headers from previous versions being found by mistake.
    659       </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.boost_concept_checks"></a><a id="q-boost_concept_checks"></a><p><strong>6.5.</strong></p></td><td align="left" valign="top"><p>
    660       Errors about <span class="emphasis"><em>*Concept</em></span> and
    661       <span class="emphasis"><em>constraints</em></span> in the STL
    662     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-boost_concept_checks"></a></td><td align="left" valign="top"><p>
    663     If you see compilation errors containing messages about
    664     <span class="errortext">foo Concept</span> and something to do with a
    665     <span class="errortext">constraints</span> member function, then most
    666     likely you have violated one of the requirements for types used
    667     during instantiation of template containers and functions.  For
    668     example, EqualityComparableConcept appears if your types must be
    669     comparable with == and you have not provided this capability (a
    670     typo, or wrong visibility, or you just plain forgot, etc).
    671     </p><p>
    672     More information, including how to optionally enable/disable the
    673     checks, is available in the
    674     <a class="link" href="manual/concept_checking.html" title="Concept Checking">Diagnostics</a>.
    675     chapter of the manual.
    676     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.dlopen_crash"></a><a id="q-dlopen_crash"></a><p><strong>6.6.</strong></p></td><td align="left" valign="top"><p>
    677       Program crashes when using library code in a
    678       dynamically-loaded library
    679     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-dlopen_crash"></a></td><td align="left" valign="top"><p>
    680     If you are using the C++ library across dynamically-loaded
    681     objects, make certain that you are passing the correct options
    682     when compiling and linking:
    683     </p><div class="literallayout"><p><br />
    684 Compileyourlibrarycomponents:<br />
    685 <span class="command"><strong>g++-fPIC-ca.cc</strong></span><br />
    686 <span class="command"><strong>g++-fPIC-cb.cc</strong></span><br />
    687 ...<br />
    688 <span class="command"><strong>g++-fPIC-cz.cc</strong></span><br />
    689 <br />
    690 Createyourlibrary:<br />
    691 <span class="command"><strong>g++-fPIC-shared-rdynamic-olibfoo.soa.ob.o...z.o</strong></span><br />
    692 <br />
    693 Linktheexecutable:<br />
    694 <span class="command"><strong>g++-fPIC-rdynamic-ofoo...-L.-lfoo-ldl</strong></span><br />
    695 </p></div></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.memory_leaks"></a><a id="q-memory_leaks"></a><p><strong>6.7.</strong></p></td><td align="left" valign="top"><p>
    696       <span class="quote"><span class="quote">Memory leaks</span></span> in libstdc++
    697     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-memory_leaks"></a></td><td align="left" valign="top"><p>
    698     Since GCC 5.1.0, libstdc++ automatically allocates a pool
    699     of a few dozen kilobytes on startup. This pool is used to ensure it's
    700     possible to throw exceptions (such as <code class="classname">bad_alloc</code>)
    701     even when <code class="code">malloc</code> is unable to allocate any more memory.
    702     With some versions of <a class="link" href="https://valgrind.org" target="_top"><span class="command"><strong>valgrind</strong></span></a>
    703     this pool will be shown as "still reachable" when the process exits, e.g.
    704     <code class="code">still reachable: 72,704 bytes in 1 blocks</code>.
    705     This memory is not a leak, because it's still in use by libstdc++,
    706     and the memory will be returned to the OS when the process exits.
    707     Later versions of <span class="command"><strong>valgrind</strong></span> know how to free this
    708     pool as the process exits, and so won't show any "still reachable" memory.
    709     </p><p>
    710     In the past, a few people reported that the standard containers appear
    711     to leak memory when tested with memory checkers such as
    712     <span class="command"><strong>valgrind</strong></span>.
    713     Under some (non-default) configurations the library's allocators keep
    714     free memory in a
    715     pool for later reuse, rather than deallocating it with <code class="code">delete</code>
    716     Although this memory is always reachable by the library and is never
    717     lost, memory debugging tools can report it as a leak.  If you
    718     want to test the library for memory leaks please read
    719     <a class="link" href="manual/debug.html#debug.memory" title="Memory Leak Hunting">Tips for memory leak hunting</a>
    720     first.
    721     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.list_size_on"></a><a id="q-list_size_on"></a><p><strong>6.8.</strong></p></td><td align="left" valign="top"><p>
    722       <code class="code">list::size()</code> is O(n)!
    723     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-list_size_on"></a></td><td align="left" valign="top"><p>
    724     See
    725     the <a class="link" href="manual/containers.html" title="Chapter9. Containers">Containers</a>
    726     chapter.
    727     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.easy_to_fix"></a><a id="q-easy_to_fix"></a><p><strong>6.9.</strong></p></td><td align="left" valign="top"><p>
    728       Aw, that's easy to fix!
    729     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-easy_to_fix"></a></td><td align="left" valign="top"><p>
    730     If you have found a bug in the library and you think you have
    731     a working fix, then send it in!  The main GCC site has a page
    732     on <a class="link" href="http://gcc.gnu.org/contribute.html" target="_top">submitting
    733     patches</a> that covers the procedure, but for libstdc++ you
    734     should also send the patch to our mailing list in addition to
    735     the GCC patches mailing list.  The libstdc++
    736     <a class="link" href="manual/appendix_contributing.html" title="AppendixA. Contributing">contributors' page</a>
    737     also talks about how to submit patches.
    738     </p><p>
    739     In addition to the description, the patch, and the ChangeLog
    740     entry, it is a Good Thing if you can additionally create a small
    741     test program to test for the presence of the bug that your patch
    742     fixes.  Bugs have a way of being reintroduced; if an old bug
    743     creeps back in, it will be caught immediately by the testsuite -
    744     but only if such a test exists.
    745     </p></td></tr><tr class="toc"><td align="left" valign="top" colspan="2"><dl><dt>7.1. <a href="faq.html#faq.iterator_as_pod">
    746       string::iterator is not char*;
    747       vector&lt;T&gt;::iterator is not T*
    748     </a></dt><dt>7.2. <a href="faq.html#faq.what_is_next">
    749       What's next after libstdc++?
    750     </a></dt><dt>7.3. <a href="faq.html#faq.sgi_stl">
    751       What about the STL from SGI?
    752     </a></dt><dt>7.4. <a href="faq.html#faq.extensions_and_backwards_compat">
    753       Extensions and Backward Compatibility
    754     </a></dt><dt>7.5. <a href="faq.html#faq.tr1_support">
    755       Does libstdc++ support TR1?
    756     </a></dt><dt>7.6. <a href="faq.html#faq.get_iso_cxx">How do I get a copy of the ISO C++ Standard?
    757     </a></dt><dt>7.7. <a href="faq.html#faq.what_is_abi">
    758       What's an ABI and why is it so messy?
    759     </a></dt><dt>7.8. <a href="faq.html#faq.size_equals_capacity">
    760       How do I make std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size?
    761     </a></dt></dl></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.iterator_as_pod"></a><a id="faq.iterator_as_pod_q"></a><p><strong>7.1.</strong></p></td><td align="left" valign="top"><p>
    762       <code class="classname">string::iterator</code> is not <code class="code">char*</code>;
    763       <code class="classname">vector&lt;T&gt;::iterator</code> is not <code class="code">T*</code>
    764     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="faq.iterator_as_pod_a"></a></td><td align="left" valign="top"><p>
    765     If you have code that depends on container&lt;T&gt; iterators
    766     being implemented as pointer-to-T, your code is broken. It's
    767     considered a feature, not a bug, that libstdc++ points this out.
    768     </p><p>
    769     While there are arguments for iterators to be implemented in
    770     that manner, A) they aren't very good ones in the long term,
    771     and B) they were never guaranteed by the Standard anyway.  The
    772     type-safety achieved by making iterators a real class rather
    773     than a typedef for <span class="type">T*</span> outweighs nearly all opposing
    774     arguments.
    775     </p><p>
    776     Code which does assume that a vector/string iterator <code class="varname">i</code>
    777     is a pointer can often be fixed by changing <code class="varname">i</code> in
    778     certain expressions to <code class="varname">&amp;*i</code>.
    779     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_is_next"></a><a id="q-what_is_next"></a><p><strong>7.2.</strong></p></td><td align="left" valign="top"><p>
    780       What's next after libstdc++?
    781     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_next"></a></td><td align="left" valign="top"><p>
    782 	The goal of libstdc++ is to produce a
    783 	fully-compliant, fully-portable Standard Library.
    784 	While the C++ Standard continues to evolve the libstdc++ will
    785         continue to track it.
    786       </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.sgi_stl"></a><a id="q-sgi_stl"></a><p><strong>7.3.</strong></p></td><td align="left" valign="top"><p>
    787       What about the STL from SGI?
    788     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-sgi_stl"></a></td><td align="left" valign="top"><p>
    789     The STL (Standard Template Library) was the inspiration for large chunks
    790     of the C++ Standard Library, but the terms are not interchangeable and
    791     they don't mean the same thing. The C++ Standard Library includes lots of
    792     things that didn't come from the STL, and some of them aren't even
    793     templates, such as <code class="classname">std::locale</code> and
    794     <code class="classname">std::thread</code>.
    795     </p><p>
    796     Libstdc++-v3 incorporates a lot of code from
    797     <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/" target="_top">the SGI STL</a>
    798     (the final merge was from
    799     <a class="link" href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/whats_new.html" target="_top">release 3.3</a>).
    800     The code in libstdc++ contains many fixes and changes compared to the
    801     original SGI code.
    802     </p><p>
    803     In particular, <code class="classname">string</code> is not from SGI and makes no
    804     use of their "rope" class (although that is included as an optional
    805     extension), neither is <code class="classname">valarray</code> nor some others.
    806     Classes like <code class="classname">vector&lt;&gt;</code> were from SGI, but have
    807     been extensively modified.
    808     </p><p>
    809     More information on the evolution of libstdc++ can be found at the
    810     <a class="link" href="manual/api.html" title="API Evolution and Deprecation History">API
    811     evolution</a>
    812     and <a class="link" href="manual/backwards.html" title="Backwards Compatibility">backwards
    813     compatibility</a> documentation.
    814     </p><p>
    815     The <a class="link" href="https://web.archive.org/web/20171104092813/http://www.sgi.com/tech/stl/FAQ.html" target="_top">FAQ</a>
    816     for SGI's STL is still recommended reading.
    817     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.extensions_and_backwards_compat"></a><a id="q-extensions_and_backwards_compat"></a><p><strong>7.4.</strong></p></td><td align="left" valign="top"><p>
    818       Extensions and Backward Compatibility
    819     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-extensions_and_backwards_compat"></a></td><td align="left" valign="top"><p>
    820       See the <a class="link" href="manual/backwards.html" title="Backwards Compatibility">link</a> on backwards compatibility and <a class="link" href="manual/api.html" title="API Evolution and Deprecation History">link</a> on evolution.
    821     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.tr1_support"></a><a id="q-tr1_support"></a><p><strong>7.5.</strong></p></td><td align="left" valign="top"><p>
    822       Does libstdc++ support TR1?
    823     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-tr1_support"></a></td><td align="left" valign="top"><p>
    824     Yes.
    825     </p><p>
    826     The C++ Standard Library
    827     <a class="link" href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf" target="_top">
    828     Technical Report 1</a> added many new features to the library.
    829     </p><p>
    830     The implementation status of TR1 in libstdc++ can be tracked
    831     <a class="link" href="manual/status.html#status.iso.tr1" title="C++ TR1">on the TR1 status page</a>.
    832     </p><p>
    833     New code should probably not use TR1, because almost everything in it has
    834     been added to the main C++ Standard Library (usually with significant
    835     improvements).
    836     The TR1 implementation in libstdc++ is no longer actively maintained.
    837     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.get_iso_cxx"></a><a id="q-get_iso_cxx"></a><p><strong>7.6.</strong></p></td><td align="left" valign="top"><p>How do I get a copy of the ISO C++ Standard?
    838     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-get_iso_cxx"></a></td><td align="left" valign="top"><p>
    839     Please refer to the <a class="link" href="manual/appendix_contributing.html" title="AppendixA. Contributing">Contributing</a>
    840     section in our manual.
    841     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.what_is_abi"></a><a id="q-what_is_abi"></a><p><strong>7.7.</strong></p></td><td align="left" valign="top"><p>
    842       What's an ABI and why is it so messy?
    843     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-what_is_abi"></a></td><td align="left" valign="top"><p>
    844     <acronym class="acronym">ABI</acronym> stands for <span class="quote"><span class="quote">Application Binary
    845     Interface</span></span>.  Conventionally, it refers to a great
    846     mass of details about how arguments are arranged on the call
    847     stack and/or in registers, and how various types are arranged
    848     and padded in structs.  A single CPU design may suffer
    849     multiple ABIs designed by different development tool vendors
    850     who made different choices, or even by the same vendor for
    851     different target applications or compiler versions.  In ideal
    852     circumstances the CPU designer presents one ABI and all the
    853     OSes and compilers use it.  In practice every ABI omits
    854     details that compiler implementers (consciously or
    855     accidentally) must choose for themselves.
    856     </p><p>
    857     That ABI definition suffices for compilers to generate code so a
    858     program can interact safely with an OS and its lowest-level libraries.
    859     Users usually want an ABI to encompass more detail, allowing libraries
    860     built with different compilers (or different releases of the same
    861     compiler!) to be linked together.  For C++, this includes many more
    862     details than for C, and most CPU designers (for good reasons elaborated
    863     below) have not stepped up to publish C++ ABIs.  Such an ABI has been
    864     defined for the Itanium architecture (see
    865     <a class="link" href="https://itanium-cxx-abi.github.io/cxx-abi/" target="_top">C++
    866     ABI for Itanium</a>) and that is used by G++ and other compilers
    867     as the de facto standard ABI on many common architectures (including x86).
    868     G++ can also use the ARM architecture's EABI, for embedded
    869     systems relying only on a <span class="quote"><span class="quote">free-standing implementation</span></span> that
    870     doesn't include (much of) the standard library, and the GNU EABI for
    871     hosted implementations on ARM.  Those ABIs cover low-level details
    872     such as virtual function implementation, struct inheritance layout,
    873     name mangling, and exception handling.
    874    </p><p>
    875     A useful C++ ABI must also incorporate many details of the standard
    876     library implementation.  For a C ABI, the layouts of a few structs
    877     (such as <span class="type">FILE</span>, <span class="type">stat</span>, <span class="type">jmpbuf</span>,
    878     and the like) and a few macros suffice.
    879     For C++, the details include the complete set of names of functions
    880     and types used, the offsets of class members and virtual functions,
    881     and the actual definitions of all inlines.  C++ exposes many more
    882     library details to the caller than C does.  It makes defining
    883     a complete ABI a much bigger undertaking, and requires not just
    884     documenting library implementation details, but carefully designing
    885     those details so that future bug fixes and optimizations don't
    886     force breaking the ABI.
    887     </p><p>
    888     There are ways to help isolate library implementation details from the
    889     ABI, but they trade off against speed.  Library details used in inner
    890     loops (e.g., <code class="function">getchar</code>) must be exposed and frozen for
    891     all time, but many others may reasonably be kept hidden from user code,
    892     so they may later be changed.  Deciding which, and implementing
    893     the decisions, must happen before you can reasonably document a
    894     candidate C++ ABI that encompasses the standard library.
    895     </p></td></tr><tr class="question"><td align="left" valign="top"><a id="faq.size_equals_capacity"></a><a id="q-size_equals_capacity"></a><p><strong>7.8.</strong></p></td><td align="left" valign="top"><p>
    896       How do I make <code class="code">std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size</code>?
    897     </p></td></tr><tr class="answer"><td align="left" valign="top"><a id="a-size_equals_capacity"></a></td><td align="left" valign="top"><p>
    898     Since C++11 just call the <code class="function">shrink_to_fit()</code> member
    899     function.
    900     </p><p>
    901     Before C++11, the standard idiom for deallocating a
    902     <code class="classname">vector&lt;T&gt;</code>'s
    903     unused memory was to create a temporary copy of the vector and swap their
    904     contents, e.g. for <code class="classname">vector&lt;T&gt; v</code>
    905     </p><div class="literallayout"><p><br />
    906 std::vector&lt;T&gt;(v).swap(v);<br />
    907 </p></div><p>
    908     The copy will take O(n) time and the swap is constant time.
    909     </p><p>
    910     See <a class="link" href="manual/strings.html#strings.string.shrink" title="Shrink to Fit">Shrink-to-fit
    911     strings</a> for a similar solution for strings.
    912     </p></td></tr></tbody></table></div></div><div class="navfooter"><hr /><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="bk03.html">Prev</a></td><td width="20%" align="center"><a accesskey="u" href="bk03.html">Up</a></td><td width="40%" align="right"></td></tr><tr><td width="40%" align="left" valign="top"></td><td width="20%" align="center"><a accesskey="h" href="index.html">Home</a></td><td width="40%" align="right" valign="top"></td></tr></table></div></body></html>