<book xmlns="http://docbook.org/ns/docbook" version="5.0">

<article xml:id="faq" xreflabel="Frequently Asked Questions">
<?dbhtml filename="faq.html"?>
 
<info><title>Frequently Asked Questions</title>
  
  <copyright>
    <year>
      2008-2018
    </year>
    <holder>
      <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.fsf.org">FSF</link>
    </holder>
  </copyright>
</info>

<!-- FAQ starts here -->
<qandaset xml:id="faq.faq">

<!-- General Information -->
<qandadiv xml:id="faq.info" xreflabel="General Information">

<qandaentry xml:id="faq.what">
  <question xml:id="faq.what.q">
    <para>
      What is libstdc++?
    </para>
  </question>
  <answer xml:id="faq.what.a">
    <para>
     The GNU Standard C++ Library v3 is an ongoing project to
     implement the ISO 14882 C++ Standard Library as described in
     clauses 20 through 33 and annex D (prior to the 2017 standard
     the library clauses started with 17).  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 SVN, and can be browsed over the
     <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/svn.html">web</link>.
    </para> 

    <para>
    N.B. The library is called libstdc++ <emphasis>not</emphasis> stdlibc++.
    </para>
  </answer>
</qandaentry>

<qandaentry xml:id="faq.why">
  <question xml:id="q-why">
    <para>
      Why should I use libstdc++?
    </para>
  </question>
  <answer xml:id="a-why">
    <para>
    The completion of the initial ISO C++ standardization effort gave the C++
    community a powerful set of reuseable tools in the form of the C++
    Standard Library.  However, for several years C++ implementations were
    (as the Draft Standard used to say) <quote>incomplet and
    incorrekt</quote>, and many suffered from limitations of the compilers
    that used them.
    </para> 
    <para>
    The GNU compiler collection
    (<command>gcc</command>, <command>g++</command>, etc) is widely
    considered to be one of the leading compilers in the world.  Its
    development is overseen by the
    <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/">GCC team</link>.  All of
    the rapid development and near-legendary
    <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/buildstat.html">portability</link>
    that are the hallmarks of an open-source project are applied to libstdc++.
    </para> 
    <para>
    All of the standard classes and functions from C++98/C++03, C++11 and C++14
    (such as <classname>string</classname>,
    <classname>vector&lt;&gt;</classname>, iostreams, algorithms etc.)
    are freely available and attempt to be fully compliant.
    Work is ongoing to complete support for the current revision of the
    ISO C++ Standard.
    </para>
  </answer>
</qandaentry>

<qandaentry xml:id="faq.who">
  <question xml:id="q-who">
    <para>
      Who's in charge of it?
    </para>
  </question>
  <answer xml:id="a-who">
    <para>
     The libstdc++ project is contributed to by several developers
     all over the world, in the same way as GCC or the Linux kernel.
     The current maintainers are listed in the
     <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/viewcvs/gcc/trunk/MAINTAINERS?view=co"><filename>MAINTAINERS</filename></link>
     file (look for "c++ runtime libs").
    </para>
    <para>
    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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/lists.html">GCC mailing lists</link> page.
    If you have questions, ideas, code, or are just curious, sign up!
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.when">
  <question xml:id="q-when">
    <para>
      When is libstdc++ going to be finished?
    </para>
  </question>
  <answer xml:id="a-when">
    <para>
    Nathan Myers gave the best of all possible answers, responding to
    a Usenet article asking this question: <emphasis>Sooner, if you
    help.</emphasis>
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.how">
  <question xml:id="q-how">
    <para>
      How do I contribute to the effort?
    </para>
  </question>
  <answer xml:id="a-how">
    <para>
    See the <link linkend="appendix.contrib">Contributing</link> section in
    the manual. 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 and is
    willing to provide details, is more than welcome!
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.whereis_old">
  <question xml:id="q-whereis_old">
    <para>
      What happened to the older libg++? I need that!
    </para>
  </question>
  <answer xml:id="a-whereis_old">
    <para>
    The last libg++ README states
    <quote>This package is considered obsolete and is no longer
    being developed.</quote>
    It should not be used for new projects, and won't even compile with
    recent releases of GCC (or most other C++ compilers).
    </para> 
    <para>
    More information can be found in the
    <link linkend="manual.appendix.porting.backwards">Backwards
    Compatibility</link> section of the libstdc++ manual.
    </para>
  </answer>
</qandaentry>

<qandaentry xml:id="faq.more_questions">
  <question xml:id="q-more_questions">
    <para>
      What if I have more questions?
    </para>
  </question>
  <answer xml:id="a-more_questions">
    <para>
    If you have read the documentation, 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 a message to the list,
    use <email>libstdc++@gcc.gnu.org</email>.
    </para> 

    <para> 
    If you have a question that you think should be included
    here, or if you have a question <emphasis>about</emphasis> a question/answer
    here, please send email to the libstdc++ mailing list, as above.
    </para> 
  </answer>
</qandaentry>

</qandadiv>

<!-- License -->
<qandadiv xml:id="faq.license" xreflabel="License QA">


<qandaentry xml:id="faq.license.what">
  <question xml:id="q-license.what">
    <para>
      What are the license terms for libstdc++?
    </para>
  </question>
  <answer xml:id="a-license.what">
    <para>
    See <link linkend="manual.intro.status.license">our license description</link>
    for these and related questions.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.license.any_program">
  <question xml:id="q-license.any_program">
    <para>
      So any program which uses libstdc++ falls under the GPL?
    </para>
  </question>
  <answer xml:id="a-license.any_program">
    <para>
     No. The special exception permits use of the library in
     proprietary applications.
    </para> 
  </answer>
</qandaentry>


<qandaentry xml:id="faq.license.lgpl">
  <question xml:id="q-license.lgpl">
    <para>
      How is that different from the GNU {Lesser,Library} GPL?
    </para>
  </question>
  <answer xml:id="a-license.lgpl">
    <para>
      The LGPL requires that users be able to replace the LGPL code with a
     modified version; this is trivial if the library in question is a C
     shared library.  But there's no way to make that work with C++, where
     much of the library consists of inline functions and templates, which
     are expanded inside the code that uses the library.  So to allow people
     to replace the library code, someone using the library would have to
     distribute their own source, rendering the LGPL equivalent to the GPL.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.license.what_restrictions">
  <question xml:id="q-license.what_restrictions">
    <para>
      I see. So, what restrictions are there on programs that use the library?
    </para>
  </question>
  <answer xml:id="a-license.what_restrictions">
    <para>
      None.  We encourage such programs to be released as free software,
     but we won't punish you or sue you if you choose otherwise.
    </para> 
  </answer>
</qandaentry>

</qandadiv>

<!-- Installation -->
<qandadiv xml:id="faq.installation" xreflabel="Installation">


<qandaentry xml:id="faq.how_to_install">
  <question xml:id="q-how_to_install">
    <para>How do I install libstdc++?
    </para>
  </question>
  <answer xml:id="a-how_to_install">
    <para>
    Often libstdc++ comes pre-installed as an integral part of many
    existing GNU/Linux and Unix systems, as well as many embedded
    development tools. It may be necessary to install extra
    development packages to get the headers, or the documentation, or
    the source: please consult your vendor for details.
    </para> 
    <para> 
    To build and install from the GNU GCC sources, please consult the 
    <link linkend="manual.intro.setup">setup
    documentation</link> for detailed
    instructions. You may wish to browse those files ahead
    of time to get a feel for what's required.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.how_to_get_sources">
  <question xml:id="q-how_to_get_sources">
    <para>How does one get current libstdc++ sources?
    </para>
  </question>
  <answer xml:id="a-how_to_get_sources">
    <para>
    Libstdc++ sources for all official releases can be obtained as
    part of the GCC sources, available from various sites and
    mirrors. A full <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/mirrors.html">list of
    download sites</link> is provided on the main GCC site.
    </para>
    <para>
    Current libstdc++ sources can always be checked out of the main
    GCC source repository using the appropriate version control
    tool. At this time, that tool
    is <application>Subversion</application>.
    </para>
    <para>
    <application>Subversion</application>, or <acronym>SVN</acronym>, 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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://subversion.tigris.org"> Subversion
    home page</link> has a better description.
    </para>
    <para>
    The <quote>anonymous client checkout</quote> feature of SVN is
    similar to anonymous FTP in that it allows anyone to retrieve
    the latest libstdc++ sources.
    </para> 
    <para>
    For more information
    see <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/svn.html"><acronym>SVN</acronym>
    details</link>.
    </para>
  </answer>
</qandaentry>

<qandaentry xml:id="faq.how_to_test">
  <question xml:id="q-how_to_test">
    <para>How do I know if it works?
    </para>
  </question>
  <answer xml:id="a-how_to_test">
    <para>
    Libstdc++ comes with its own validation testsuite, which includes
    conformance testing, regression testing, ABI testing, and
    performance testing. Please consult the 
    <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/test.html">testing
    documentation</link> for GCC and
    <link linkend="manual.intro.setup.test">Testing</link> in the libstdc++
    manual for more details.
    </para> 
    <para>
    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,
    <emphasis>please</emphasis> write up your idea and send it to the list!
    </para>
  </answer>
</qandaentry>

<qandaentry xml:id="faq.how_to_set_paths">
  <question xml:id="q-how_to_set_paths">
    <para>How do I insure that the dynamically linked library will be found?
    </para>
  </question>
  <answer xml:id="a-how_to_set_paths">
    <para>
    Depending on your platform and library version, the error message might
    be similar to one of the following:
    </para>

    <screen>
    ./a.out: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

    /usr/libexec/ld-elf.so.1: Shared object "libstdc++.so.6" not found
    </screen>

    <para>
    This doesn't mean that the shared library isn't installed, only
    that the dynamic linker can't find it. When a dynamically-linked
    executable is run the linker finds and loads the required shared
    libraries by searching a pre-configured list of directories. If
    the directory where you've installed libstdc++ is not in this list
    then the libraries won't be found.
    </para>

    <para>
    If you already have an older version of libstdc++ installed then the
    error might look like one of the following instead:
    </para>

    <screen>
    ./a.out: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found
    ./a.out: /usr/lib/libstdc++.so.6: version `CXXABI_1.3.8' not found
    </screen>

    <para>
    This means the linker found <filename>/usr/lib/libstdc++.so.6</filename>
    but that library belongs to an older version of GCC than was used to
    compile and link the program <filename>a.out</filename> (or some part
    of it). The program depends on code defined in the newer libstdc++
    that belongs to the newer version of GCC, so the linker must be told
    how to find the newer libstdc++ shared library.
    </para>

    <para>
    The simplest way to fix this is
    to use the <envar>LD_LIBRARY_PATH</envar> environment variable,
    which is a colon-separated list of directories in which the linker
    will search for shared libraries:
    </para>

    <screen><command>
    export LD_LIBRARY_PATH=${prefix}/lib:$LD_LIBRARY_PATH
    </command></screen>

    <para>
    Here the shell variable <varname>${prefix}</varname> is assumed to contain
    the directory prefix where GCC was installed to. The directory containing
    the library might depend on whether you want the 32-bit or 64-bit copy
    of the library, so for example would be
    <filename class="directory">${prefix}/lib64</filename> on some systems.
    The exact environment variable to use will depend on your
    platform, e.g. <envar>DYLD_LIBRARY_PATH</envar> for Darwin,
    <envar>LD_LIBRARY_PATH_32</envar>/<envar>LD_LIBRARY_PATH_64</envar>
    for Solaris 32-/64-bit,
    and <envar>SHLIB_PATH</envar> for HP-UX.
    </para>
    <para>
    See the man pages for <command>ld</command>, <command>ldd</command>
    and <command>ldconfig</command> for more information. The dynamic
    linker has different names on different platforms but the man page
    is usually called something such as <filename>ld.so</filename>,
    <filename>rtld</filename> or <filename>dld.so</filename>.
    </para>
    <para>
    Using <envar>LD_LIBRARY_PATH</envar> is not always the best solution,
    <link linkend="manual.intro.using.linkage.dynamic">Finding Dynamic or Shared
    Libraries</link> in the manual gives some alternatives.
    </para>
  </answer>
</qandaentry>

<qandaentry xml:id="faq.what_is_libsupcxx">
  <question xml:id="q-what_is_libsupcxx">
    <para>
      What's libsupc++?
    </para>
  </question>
  <answer xml:id="a-what_is_libsupcxx">
    <para>
      If the only functions from <filename class="libraryfile">libstdc++.a</filename>
      which you need are language support functions (those listed in
      <link linkend="std.support">clause 18</link> of the
      standard, e.g., <function>new</function> and
      <function>delete</function>), then try linking against
      <filename class="libraryfile">libsupc++.a</filename>, which is a subset of
      <filename class="libraryfile">libstdc++.a</filename>.  (Using <command>gcc</command>
      instead of <command>g++</command> and explicitly linking in
      <filename class="libraryfile">libsupc++.a</filename> via <option>-lsupc++</option>
      for the final link step will do it).  This library contains only
      those support routines, one per object file.  But if you are
      using anything from the rest of the library, such as IOStreams
      or vectors, then you'll still need pieces from
      <filename class="libraryfile">libstdc++.a</filename>.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.size">
  <question xml:id="q-size">
    <para>
      This library is HUGE!
    </para>
  </question>
  <answer xml:id="a-size">
    <para>
    Usually the size of libraries on disk isn't noticeable.  When a
    link editor (or simply <quote>linker</quote>) pulls things from a
    static archive library, only the necessary object files are copied
    into your executable, not the entire library.  Unfortunately, even
    if you only need a single function or variable from an object file,
    the entire object file is extracted.  (There's nothing unique to C++
    or libstdc++ about this; it's just common behavior, given here
    for background reasons.)
    </para>
    <para>
    Some of the object files which make up
    <filename class="libraryfile">libstdc++.a</filename> are rather large.
    If you create a statically-linked executable with
    <option>-static</option>, those large object files are suddenly part
    of your executable.  Historically the best way around this was to
    only place a very few functions (often only a single one) in each
    source/object file; then extracting a single function is the same
    as extracting a single <filename>.o</filename> file.  For libstdc++ this
    is only possible to a certain extent; the object files in question contain
    template classes and template functions, pre-instantiated, and
    splitting those up causes severe maintenance headaches.
    </para> 
    <para>
    On supported platforms, libstdc++ takes advantage of garbage
    collection in the GNU linker to get a result similar to separating
    each symbol into a separate source and object files. On these platforms,
    GNU ld can place each function and variable into its own
    section in a <filename>.o</filename> file.  The GNU linker can then perform
    garbage collection on unused sections; this reduces the situation to only
    copying needed functions into the executable, as before, but all
    happens automatically.
    </para>
  </answer>
</qandaentry>

</qandadiv>


<!-- Platform-Specific Issues -->
<qandadiv xml:id="faq.platform-specific" xreflabel="Platform-Specific Issues">


<qandaentry xml:id="faq.other_compilers">
  <question xml:id="q-other_compilers">
    <para>
      Can libstdc++ be used with non-GNU compilers?
    </para>
  </question>
  <answer xml:id="a-other_compilers">
    <para>
    Perhaps.
    </para> 
    <para>
    Since the goal of ISO Standardization is for all C++
    implementations to be able to share code, libstdc++ should be
    usable under any ISO-compliant compiler, at least in theory.
    </para> 
    <para>
    However, the reality is that libstdc++ is targeted and optimized
    for GCC/G++. This means that often libstdc++ uses specific,
    non-standard features of G++ that are not present in older
    versions of proprietary compilers. It may take as much as a year or two
    after an official release of GCC that contains these features for
    proprietary tools to support these constructs.
    </para>
    <para>
    Recent versions of libstdc++ are known to work with the Clang compiler.
    In the near past, specific released versions of libstdc++ have
    been known to work with versions of the EDG C++ compiler, and
    vendor-specific proprietary C++ compilers such as the Intel ICC
    C++ compiler.
    </para> 

  </answer>
</qandaentry>

<qandaentry xml:id="faq.solaris_long_long">
  <question xml:id="q-solaris_long_long">
    <para>
      No '<type>long long</type>' type on Solaris?
    </para>
  </question>
  <answer xml:id="a-solaris_long_long">
    <note>
       <para>This answer is old and probably no longer be relevant.</para>
    </note>
    <para>
    By default we try to support the C99 <type>long long</type> type.
    This requires that certain functions from your C library be present.
    </para> 
    <para> 
    Up through release 3.0.2 the platform-specific tests performed by
    libstdc++ were too general, resulting in a conservative approach
    to enabling the <type>long long</type> code paths. The most
    commonly reported platform affected was Solaris.
    </para> 
    <para> 
    This has been fixed for libstdc++ releases greater than 3.0.3.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.predefined">
  <question xml:id="q-predefined">
    <para>
      <constant>_XOPEN_SOURCE</constant> and <constant>_GNU_SOURCE</constant> are always defined?
    </para>
  </question>
  <answer xml:id="a-predefined">
      <para>On Solaris, <command>g++</command> (but not <command>gcc</command>)
         always defines the preprocessor macro
	 <constant>_XOPEN_SOURCE</constant>.  On GNU/Linux, the same happens
         with <constant>_GNU_SOURCE</constant>.  (This is not an exhaustive list;
         other macros and other platforms are also affected.)
      </para>
      <para>These macros are typically used in C library headers, guarding new
         versions of functions from their older versions.  The C++98 standard
         library includes the C standard library, but it requires the C90
         version, which for backwards-compatibility reasons is often not the
         default for many vendors.
      </para>
      <para>More to the point, the C++ standard requires behavior which is only
         available on certain platforms after certain symbols are defined.
         Usually the issue involves I/O-related typedefs.  In order to
         ensure correctness, the compiler simply predefines those symbols.
      </para>
      <para>Note that it's not enough to <literal>#define</literal> them only when the library is
         being built (during installation).  Since we don't have an 'export'
         keyword, much of the library exists as headers, which means that
         the symbols must also be defined as your programs are parsed and
         compiled.
      </para>
      <para>To see which symbols are defined, look for
         <varname>CPLUSPLUS_CPP_SPEC</varname> in
         the gcc config headers for your target (and try changing them to
         see what happens when building complicated code).  You can also run
         <command>g++ -E -dM - &lt; /dev/null"</command> to display
         a list of predefined macros for any particular installation.
      </para>
      <para>This has been discussed on the mailing lists
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/cgi-bin/htsearch?method=and&amp;format=builtin-long&amp;sort=score&amp;words=_XOPEN_SOURCE+Solaris">quite a bit</link>.
      </para>
      <para>This method is something of a wart.  We'd like to find a cleaner
         solution, but nobody yet has contributed the time.
      </para>

  </answer>
</qandaentry>

<qandaentry xml:id="faq.darwin_ctype">
  <question xml:id="q-darwin_ctype">
    <para>
      Mac OS X <filename class="headerfile">ctype.h</filename> is broken! How can I fix it?
    </para>
  </question>
  <answer xml:id="a-darwin_ctype">
      <note>
         <para>This answer is old and probably no longer be relevant.</para>
      </note>
      <para>
         This was a long-standing bug in the OS X support.  Fortunately, the
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/gcc/2002-03/msg00817.html">patch</link>
	 was quite simple, and well-known.
      </para>

  </answer>
</qandaentry>

<qandaentry xml:id="faq.threads_i386">
  <question xml:id="q-threads_i386">
    <para>
      Threading is broken on i386?
    </para>
  </question>
  <answer xml:id="a-threads_i386">
      <note>
         <para>This answer is old and probably no longer be relevant.</para>
      </note>
      <para>Support for atomic integer operations was broken on i386
         platforms.  The assembly code accidentally used opcodes that are
         only available on the i486 and later.  So if you configured GCC
         to target, for example, i386-linux, but actually used the programs
         on an i686, then you would encounter no problems.  Only when
         actually running the code on a i386 will the problem appear.
      </para>
      <para>This is fixed in 3.2.2.
      </para>

  </answer>
</qandaentry>

<qandaentry xml:id="faq.atomic_mips">
  <question xml:id="q-atomic_mips">
    <para>
      MIPS atomic operations
    </para>
  </question>
  <answer xml:id="a-atomic_mips">
    <note>
      <para>This answer is old and probably no longer be relevant.</para>
    </note>
    <para>
    The atomic locking routines for MIPS targets requires MIPS II
    and later.  A patch went in just after the 3.3 release to
    make mips* use the generic implementation instead.  You can also
    configure for mipsel-elf as a workaround.
    </para>
    <para>    
    The mips*-*-linux* port continues to use the MIPS II routines, and more
    work in this area is expected.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.linux_glibc">
  <question xml:id="q-linux_glibc">
    <para>
      Recent GNU/Linux glibc required?
    </para>
  </question>
  <answer xml:id="a-linux_glibc">
      <para>When running on GNU/Linux, libstdc++ 3.2.1 (shared library version
         5.0.1) and later uses localization and formatting code from the system
         C library (glibc) version 2.2.5 which contains necessary bugfixes.
         All GNU/Linux distros make more recent versions available now.
         libstdc++ 4.6.0 and later require glibc 2.3 or later for this
         localization and formatting code.
      </para>
      <para>The guideline is simple:  the more recent the C++ library, the
         more recent the C library.  (This is also documented in the main
         GCC installation instructions.)
      </para>

  </answer>
</qandaentry>

<qandaentry xml:id="faq.freebsd_wchar">
  <question xml:id="q-freebsd_wchar">
    <para>
      Can't use <type>wchar_t</type>/<classname>wstring</classname> on FreeBSD
    </para>
  </question>
  <answer xml:id="a-freebsd_wchar">
    <note>
      <para>This answer is old and probably no longer be relevant.</para>
    </note>
    <para>
    Older versions of FreeBSD's C library do not have sufficient
    support for wide character functions, and as a result the
    libstdc++ configury decides that <type>wchar_t</type> support should be
    disabled. In addition, the libstdc++ platform checks that
    enabled <type>wchar_t</type> were quite strict, and not granular
    enough to detect when the minimal support to
    enable <type>wchar_t</type> and C++ library structures
    like <classname>wstring</classname> were present. This impacted Solaris,
    Darwin, and BSD variants, and is fixed in libstdc++ versions post 4.1.0.
    </para> 
    <para> 
    </para> 
  </answer>
</qandaentry>

</qandadiv>


<!-- Known Bugs -->
<qandadiv xml:id="faq.known_bugs" xreflabel="Known Bugs">


<qandaentry xml:id="faq.what_works">
  <question xml:id="q-what_works">
    <para>
      What works already?
    </para>
  </question>
  <answer xml:id="a-what_works">
    <para>
    Short answer: Pretty much everything <emphasis>works</emphasis>
    except for some corner cases.  Support for localization
    in <classname>locale</classname> may be incomplete on some non-GNU
    platforms. Also dependent on the underlying platform is support
    for <type>wchar_t</type> and <type>long long</type> specializations,
    and details of thread support.
    </para>
    <para>    
    Long answer: See the implementation status pages for 
    <link linkend="status.iso.1998">C++98</link>,
    <link linkend="status.iso.tr1">TR1</link>,
    <link linkend="status.iso.2011">C++11</link>,
    <link linkend="status.iso.2014">C++14</link>, and
    <link linkend="status.iso.2017">C++17</link>.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.standard_bugs">
  <question xml:id="q-standard_bugs">
    <para>
      Bugs in the ISO C++ language or library specification
    </para>
  </question>
  <answer xml:id="a-standard_bugs">
    <para>
    Unfortunately, there are some. 
    </para>
    <para>
    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 on <link xmlns:xlink="http://www.w3.org/1999/xlink"
    xlink:href="http://www.open-std.org/jtc1/sc22/wg21/">the WG21
    website</link>.
    Many of these issues have resulted in
    <link linkend="manual.intro.status.bugs.iso">code changes in libstdc++</link>.
    </para> 
    <para>
    If you think you've discovered a new bug that is not listed,
    please post a message describing your problem to the author of
    the library issues list.
    </para>
  </answer>
</qandaentry>

<qandaentry xml:id="faq.compiler_bugs">
  <question xml:id="q-compiler_bugs">
    <para>
      Bugs in the compiler (gcc/g++) and not libstdc++
    </para>
  </question>
  <answer xml:id="a-compiler_bugs">
    <para>
    On occasion, the compiler is wrong. Please be advised that this
    happens much less often than one would think, and avoid jumping to
    conclusions.
    </para>
    <para>
    First, examine the ISO C++ standard. Second, try another compiler
    or an older version of the GNU compilers. Third, you can find more
    information on the libstdc++ and the GCC mailing lists: search
    these lists with terms describing your issue.
    </para> 
    <para> 
    Before reporting a bug, please examine the
    <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://gcc.gnu.org/bugs/">bugs database</link>, with the
    component set to <quote>c++</quote>.
    </para> 
  </answer>
</qandaentry>

</qandadiv>

<!-- Known Non-Bugs -->
<qandadiv xml:id="faq.known_non-bugs" xreflabel="Known Non-Bugs">


<qandaentry xml:id="faq.stream_reopening_fails">
  <question xml:id="q-stream_reopening_fails">
    <para>
      Reopening a stream fails
    </para>
  </question>
  <answer xml:id="a-stream_reopening_fails">
    <note>
      <para>This answer is old and probably no longer be relevant.</para>
    </note>
    <para>
    Prior to GCC 4.0 this was one of the most-reported non-bug reports.
    Executing a sequence like this would fail:
    </para>

    <programlisting>
    #include &lt;fstream&gt;
    ...
    std::fstream  fs("a_file");
    // .
    // . do things with fs...
    // .
    fs.close();
    fs.open("a_new_file");
    </programlisting>
    
    <para>
    All operations on the re-opened <varname>fs</varname> would fail, or at
    least act very strangely, especially if <varname>fs</varname> reached the
    EOF state on the previous file.
    The original C++98 standard did not specify behavior in this case, and
    the <link linkend="manual.bugs.dr22">resolution of DR #22</link> was to
    leave the state flags unchanged on a successful call to
    <function>open()</function>.
    You had to insert a call to <function>fs.clear()</function> between the
    calls to <function>close()</function> and <function>open()</function>,
    and then everything will work as expected.
    <emphasis>Update:</emphasis> For GCC 4.0 we implemented the resolution
    of <link linkend="manual.bugs.dr409">DR #409</link> and
    <function>open()</function>
    now calls <function>clear()</function> on success.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.wefcxx_verbose">
  <question xml:id="q-wefcxx_verbose">
    <para>
      -Weffc++ complains too much
    </para>
  </question>
  <answer xml:id="a-wefcxx_verbose">
    <para>
    Many warnings are emitted when <option>-Weffc++</option> is used.  Making
    libstdc++ <option>-Weffc++</option>-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. The option also enforces outdated guidelines
    from old editions of the books, and the advice isn't all relevant to
    modern C++ (especially C++11 and later).
    </para> 
    <para>
    We do, however, try to have libstdc++ sources as clean as possible. If
    you see some simple changes that pacify <option>-Weffc++</option>
    without other drawbacks, send us a patch.
    </para>
  </answer>
</qandaentry>

<qandaentry xml:id="faq.ambiguous_overloads">
  <question xml:id="q-ambiguous_overloads">
    <para>
      Ambiguous overloads after including an old-style header
    </para>
  </question>
  <answer xml:id="a-ambiguous_overloads">
    <note>
      <para>This answer is old and probably no longer be relevant.</para>
    </note>
    <para>
    Another problem is the <literal>rel_ops</literal> namespace and the template
    comparison operator functions contained therein.  If they become
    visible in the same namespace as other comparison functions
    (e.g., <quote>using</quote> them and the
    <filename class="headerfile">&lt;iterator&gt;</filename> header),
    then you will suddenly be faced with huge numbers of ambiguity
    errors.  This was discussed on the mailing list; Nathan Myers
    <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/ml/libstdc++/2001-01/msg00247.html">sums
      things up here</link>.  The collisions with vector/string iterator
    types have been fixed for 3.1.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.v2_headers">
  <question xml:id="q-v2_headers">
    <para>
      The g++-3 headers are <emphasis>not ours</emphasis>
    </para>
  </question>
  <answer xml:id="a-v2_headers">
    <note>
      <para>This answer is old and probably no longer be relevant.</para>
    </note>
      <para>
	If you are using headers in
	<filename class="directory">${prefix}/include/g++-3</filename>, or if
	the installed library's name looks like
	<filename class="libraryfile">libstdc++-2.10.a</filename> or
	<filename class="libraryfile">libstdc++-libc6-2.10.so</filename>, then
	you are using the old libstdc++-v2 library, which is non-standard and
	unmaintained.  Do not report problems with -v2 to the -v3
	mailing list.
      </para>
      <para>
	For GCC versions 3.0 and 3.1 the libstdc++ header files are installed in
	<filename class="directory">${prefix}/include/g++-v3</filename>
	(see the 'v'?).  Starting with version 3.2 the headers are installed in
	<filename class="directory">${prefix}/include/c++/${version}</filename>
	as this prevents headers from previous versions being found by mistake.
      </para>

  </answer>
</qandaentry>

<qandaentry xml:id="faq.boost_concept_checks">
  <question xml:id="q-boost_concept_checks">
    <para>
      Errors about <emphasis>*Concept</emphasis> and
      <emphasis>constraints</emphasis> in the STL
    </para>
  </question>
  <answer xml:id="a-boost_concept_checks">
    <para>
    If you see compilation errors containing messages about
    <errortext>foo Concept</errortext> and something to do with a
    <errortext>constraints</errortext> 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).
    </para>
    <para>
    More information, including how to optionally enable/disable the
    checks, is available in the
    <link linkend="std.diagnostics.concept_checking">Diagnostics</link>.
    chapter of the manual.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.dlopen_crash">
  <question xml:id="q-dlopen_crash">
    <para>
      Program crashes when using library code in a
      dynamically-loaded library
    </para>
  </question>
  <answer xml:id="a-dlopen_crash">
    <para>
    If you are using the C++ library across dynamically-loaded
    objects, make certain that you are passing the correct options
    when compiling and linking:
    </para>

    <literallayout class="normal">
    Compile your library components:
    <command>g++ -fPIC -c a.cc</command>
    <command>g++ -fPIC -c b.cc</command>
    ...
    <command>g++ -fPIC -c z.cc</command>

    Create your library:
    <command>g++ -fPIC -shared -rdynamic -o libfoo.so a.o b.o ... z.o</command>

    Link the executable:
    <command>g++ -fPIC -rdynamic -o foo ... -L. -lfoo -ldl</command>
    </literallayout>
  </answer>
</qandaentry>

<qandaentry xml:id="faq.memory_leaks">
  <question xml:id="q-memory_leaks">
    <para>
      <quote>Memory leaks</quote> in containers
    </para>
  </question>
  <answer xml:id="a-memory_leaks">
    <note>
      <para>This answer is old and probably no longer be relevant.</para>
    </note>
    <para>
    A few people have reported that the standard containers appear
    to leak memory when tested with memory checkers such as
    <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://valgrind.org/"><command>valgrind</command></link>.
    Under some (non-default) configurations the library's allocators keep
    free memory in a
    pool for later reuse, rather than returning it to the OS.  Although
    this memory is always reachable by the library and is never
    lost, memory debugging tools can report it as a leak.  If you
    want to test the library for memory leaks please read
    <link linkend="debug.memory">Tips for memory leak hunting</link>
    first.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.list_size_on">
  <question xml:id="q-list_size_on">
    <para>
      <code>list::size()</code> is O(n)!
    </para>
  </question>
  <answer xml:id="a-list_size_on">
    <para>
    See
    the <link linkend="std.containers">Containers</link>
    chapter.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.easy_to_fix">
  <question xml:id="q-easy_to_fix">
    <para>
      Aw, that's easy to fix!
    </para>
  </question>
  <answer xml:id="a-easy_to_fix">
    <para>
    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 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/contribute.html">submitting
    patches</link> 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++
    <link linkend="appendix.contrib">contributors' page</link>
    also talks about how to submit patches.
    </para>
    <para>
    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 testsuite -
    but only if such a test exists.
    </para> 
  </answer>
</qandaentry>

</qandadiv>


<!-- Miscellaneous -->
<qandadiv xml:id="faq.misc" xreflabel="Miscellaneous">


<qandaentry xml:id="faq.iterator_as_pod">
  <question xml:id="faq.iterator_as_pod_q">
    <para>
      <classname>string::iterator</classname> is not <code>char*</code>;
      <classname>vector&lt;T&gt;::iterator</classname> is not <code>T*</code>
    </para>
  </question>
  <answer xml:id="faq.iterator_as_pod_a">
    <para>
    If you have code that depends on container&lt;T&gt; iterators
    being implemented as pointer-to-T, your code is broken. It's
    considered a feature, not a bug, that libstdc++ points this out.
    </para>
    <para>
    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 <type>T*</type> outweighs nearly all opposing
    arguments.
    </para>
    <para>
    Code which does assume that a vector/string iterator <varname>i</varname>
    is a pointer can often be fixed by changing <varname>i</varname> in
    certain expressions to <varname>&amp;*i</varname>.
    </para>
  </answer>
</qandaentry>

<qandaentry xml:id="faq.what_is_next">
  <question xml:id="q-what_is_next">
    <para>
      What's next after libstdc++?
    </para>
  </question>
  <answer xml:id="a-what_is_next">
      <para>
	The goal of libstdc++ is to produce a
	fully-compliant, fully-portable Standard Library.
	While the C++ Standard continues to evolve the libstdc++ will
        continue to track it.
      </para>
  </answer>
</qandaentry>

<qandaentry xml:id="faq.sgi_stl">
  <question xml:id="q-sgi_stl">
    <para>
      What about the STL from SGI?
    </para>
  </question>
  <answer xml:id="a-sgi_stl">
    <para>
    The STL (Standard Template Library) was the inspiration for large chunks
    of the C++ Standard Library, but the terms are not interchangeable and
    they don't mean the same thing. The C++ Standard Library includes lots of
    things that didn't come from the STL, and some of them aren't even
    templates, such as <classname>std::locale</classname> and
    <classname>std::thread</classname>.
    </para>
    <para>
    Libstdc++-v3 incorporates a lot of code from
    <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/">the SGI STL</link>
    (the final merge was from
    <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/whats_new.html">release 3.3</link>).
    The code in libstdc++ contains many fixes and changes compared to the
    original SGI code.
    </para>
    <para>
    In particular, <classname>string</classname> is not from SGI and makes no
    use of their "rope" class (although that is included as an optional
    extension), neither is <classname>valarray</classname> nor some others.
    Classes like <classname>vector&lt;&gt;</classname> were from SGI, but have
    been extensively modified.
    </para>
    <para>
    More information on the evolution of libstdc++ can be found at the
    <link linkend="appendix.porting.api">API
    evolution</link>
    and <link linkend="manual.appendix.porting.backwards">backwards
    compatibility</link> documentation.
    </para>
    <para>
    The <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://web.archive.org/web/20171225062613/http://www.sgi.com/tech/stl/FAQ.html">FAQ</link>
    for SGI's STL is still recommended reading.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.extensions_and_backwards_compat">
  <question xml:id="q-extensions_and_backwards_compat">
    <para>
      Extensions and Backward Compatibility
    </para>
  </question>
  <answer xml:id="a-extensions_and_backwards_compat">
    <para>
      See the <link linkend="manual.appendix.porting.backwards">link</link> on backwards compatibility and <link linkend="appendix.porting.api">link</link> on evolution.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.tr1_support">
  <question xml:id="q-tr1_support">
    <para>
      Does libstdc++ support TR1?
    </para>
  </question>
  <answer xml:id="a-tr1_support">
    <para>
    Yes.
    </para>
    <para>
    The C++ Standard Library
    <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf">
    Technical Report 1</link> added many new features to the library.
    </para>
    <para>
    The implementation status of TR1 in libstdc++ can be tracked
    <link linkend="status.iso.tr1">on the TR1 status page</link>.
    </para>
    <para>
    New code should probably not use TR1, because almost everything in it has
    been added to the main C++ Standard Library (usually with significant
    improvements).
    The TR1 implementation in libstdc++ is no longer actively maintained.
    </para>
  </answer>
</qandaentry>

<qandaentry xml:id="faq.get_iso_cxx">
  <question xml:id="q-get_iso_cxx">
    <para>How do I get a copy of the ISO C++ Standard?
    </para>
  </question>
  <answer xml:id="a-get_iso_cxx">
    <para>
    Please refer to the <link linkend="appendix.contrib">Contributing</link>
    section in our manual.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.what_is_abi">
  <question xml:id="q-what_is_abi">
    <para>
      What's an ABI and why is it so messy?
    </para>
  </question>
  <answer xml:id="a-what_is_abi">
    <para>
    <acronym>ABI</acronym> stands for <quote>Application Binary
    Interface</quote>.  Conventionally, it refers to a great
    mass of details about how arguments are arranged on the call
    stack and/or in registers, and how various types are arranged
    and padded in structs.  A single CPU design may suffer
    multiple ABIs designed by different development tool vendors
    who made different choices, or even by the same vendor for
    different target applications or compiler versions.  In ideal
    circumstances the CPU designer presents one ABI and all the
    OSes and compilers use it.  In practice every ABI omits
    details that compiler implementers (consciously or
    accidentally) must choose for themselves.
    </para>
    <para>
    That ABI definition suffices for compilers to generate code so a
    program can interact safely with an OS and its lowest-level libraries.
    Users usually want an ABI to encompass more detail, allowing libraries
    built with different compilers (or different releases of the same
    compiler!) to be linked together.  For C++, this includes many more
    details than for C, and most CPU designers (for good reasons elaborated
    below) have not stepped up to publish C++ ABIs.  Such an ABI has been
    defined for the Itanium architecture (see
    <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://itanium-cxx-abi.github.io/cxx-abi/">C++
    ABI for Itanium</link>) and that is used by G++ and other compilers
    as the de facto standard ABI on many common architectures (including x86).
    G++ can also use the ARM architecture's EABI, for embedded
    systems relying only on a <quote>free-standing implementation</quote> that
    doesn't include (much of) the standard library, and the GNU EABI for
    hosted implementations on ARM.  Those ABIs cover low-level details
    such as virtual function implementation, struct inheritance layout,
    name mangling, and exception handling.
   </para>
    <para>
    A useful C++ ABI must also incorporate many details of the standard
    library implementation.  For a C ABI, the layouts of a few structs
    (such as <type>FILE</type>, <type>stat</type>, <type>jmpbuf</type>,
    and the like) and a few macros suffice.
    For C++, the details include the complete set of names of functions
    and types used, the offsets of class members and virtual functions,
    and the actual definitions of all inlines.  C++ exposes many more
    library details to the caller than C does.  It makes defining
    a complete ABI a much bigger undertaking, and requires not just
    documenting library implementation details, but carefully designing
    those details so that future bug fixes and optimizations don't
    force breaking the ABI.
    </para>
    <para>
    There are ways to help isolate library implementation details from the
    ABI, but they trade off against speed.  Library details used in inner
    loops (e.g., <function>getchar</function>) must be exposed and frozen for
    all time, but many others may reasonably be kept hidden from user code,
    so they may later be changed.  Deciding which, and implementing
    the decisions, must happen before you can reasonably document a
    candidate C++ ABI that encompasses the standard library.
    </para> 
  </answer>
</qandaentry>

<qandaentry xml:id="faq.size_equals_capacity">
  <question xml:id="q-size_equals_capacity">
    <para>
      How do I make <code>std::vector&lt;T&gt;::capacity() == std::vector&lt;T&gt;::size</code>?
    </para>
  </question>
  <answer xml:id="a-size_equals_capacity">
    <para>
    Since C++11 just call the <function>shrink_to_fit()</function> member
    function.
    </para>
    <para>
    Before C++11, the standard idiom for deallocating a
    <classname>vector&lt;T&gt;</classname>'s
    unused memory was to create a temporary copy of the vector and swap their
    contents, e.g. for <classname>vector&lt;T&gt; v</classname>
    </para>
    <literallayout class="normal">
     std::vector&lt;T&gt;(v).swap(v);
    </literallayout>
    <para>
    The copy will take O(n) time and the swap is constant time.
    </para>
    <para>
    See <link linkend="strings.string.shrink">Shrink-to-fit
    strings</link> for a similar solution for strings.
    </para> 
  </answer>
</qandaentry>

</qandadiv>


<!-- FAQ ends here -->
</qandaset>

</article>

</book>
