<?xml version="1.0" encoding="ISO-8859-1"?>
<!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" xml:lang="en" lang="en">
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
   <meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
   <meta name="KEYWORDS" content="HOWTO, libstdc++, gcc, g++, libg++, STL" />
   <meta name="DESCRIPTION" content="HOWTO for libstdc++ chapter 17." />
   <meta name="GENERATOR" content="vi and eight fingers" />
   <title>libstdc++-v3 HOWTO:  Chapter 17: Library Introduction</title>
<link rel="StyleSheet" href="../lib3styles.css" type="text/css" />
<link rel="Start" href="../documentation.html" type="text/html"
 title="GNU C++ Standard Library" />
<link rel="Next" href="../18_support/howto.html" type="text/html"
  title="Library Support" />
<link rel="Copyright" href="license.html" type="text/html" />
<link rel="Help" href="../faq/index.html" type="text/html" title="F.A.Q." />
</head>
<body>

<h1 class="centered"><a name="top">Chapter 17:  Library Introduction</a></h1>

<p>Chapter 17 is actually a list of definitions and descriptions used
   in the following chapters of the Standard when describing the actual
   library.  Here, we use &quot;Introduction&quot; as an introduction
   to the <em>GNU implementation of</em> the ISO Standard C++ Library.
</p>


<!-- ####################################################### -->
<hr />
<h1>Contents</h1>
<ul>
   <li><a href="#2">The Standard C++ header files</a></li>
   <li><a href="#3">The Standard C++ library and multithreading</a></li>
   <li><a href="#4"><code>&lt;foo&gt;</code> vs <code>&lt;foo.h&gt;</code></a></li>
   <li><a href="porting-howto.html">Porting HOWTO</a></li>
   <li><a href="#5">Behavior specific to libstdc++-v3</a></li>
   <li><a href="#6">Preprocessor macros controlling the library</a></li>
</ul>

<hr />

<!-- ####################################################### -->

<h2><a name="2">The Standard C++ header files</a></h2>
   <p>The Standard C++ Library specifies 50 header files that must be
      available to all hosted implementations.  Actually, the word
      &quot;files&quot; is a misnomer, since the contents of the headers
      don't necessarily have to be in any kind of external file.  The
      only rule is that when you <code>#include</code> a certain header, the
      contents of that header, as defined by the Standard, become
      available to you, no matter how.
   </p>
   <p>The names of the headers can be easily seen in
      <a href="headers_cc.txt"><code>testsuite/17_intro/headers.cc</code></a>,
      which is a small testbed we use to make certain that the headers
      all compile and run.
   </p>

<hr />
<h2><a name="3">The Standard C++ library and multithreading</a></h2>
   <p>This section discusses issues surrounding the proper compilation
      of multithreaded applications which use the Standard C++
      library.  This information is GCC-specific since the C++
      standard does not address matters of multithreaded applications.
      Unless explicitly prefaced, all information in this section is
      current as of the GCC 3.0 release and all later point releases.
   </p>
   <p>Earlier GCC releases had a somewhat different approach to
      threading configuration and proper compilation.  Before GCC 3.0,
      configuration of the threading model was dictated by compiler
      command-line options and macros (both of which were somewhat
      thread-implementation and port-specific).  There were no
      guarantees related to being able to link code compiled with one
      set of options and macro setting with another set.  For GCC 3.0,
      configuration of the threading model used with libraries and
      user-code is performed when GCC is configured and built using
      the --enable-threads and --disable-threads options.  The ABI is
      stable for symbol name-mangling and limited functional
      compatibility exists between code compiled under different
      threading models.
   </p>
   <p>All normal disclaimers aside, multithreaded C++ application are
      only supported when libstdc++ and all user code was built with
      compilers which report (via <code> gcc/g++ -v </code>) the same thread
      model and that model is not <em>single</em>.  As long as your
      final application is actually single-threaded, then it should be
      safe to mix user code built with a thread model of
      <em>single</em> with a libstdc++ and other C++ libraries built
      with another thread model useful on the platform.  Other mixes
      may or may not work but are not considered supported.  (Thus, if
      you distribute a shared C++ library in binary form only, it may
      be best to compile it with a GCC configured with
      --enable-threads for maximal interchangeability and usefulness
      with a user population that may have built GCC with either
      --enable-threads or --disable-threads.)
   </p>
   <p>When you link a multithreaded application, you will probably
      need to add a library or flag to g++.  This is a very
      non-standardized area of GCC across ports.  Some ports support a
      special flag (the spelling isn't even standardized yet) to add
      all required macros to a compilation (if any such flags are
      required then you must provide the flag for all compilations not
      just linking) and link-library additions and/or replacements at
      link time.  The documentation is weak.  Here is a quick summary
      to display how ad hoc this is: On Solaris, both -pthreads and
      -threads (with subtly different meanings) are honored.  On OSF,
      -pthread and -threads (with subtly different meanings) are
      honored.  On Linux/i386, -pthread is honored.  On FreeBSD,
      -pthread is honored.  Some other ports use other switches.
      AFAIK, none of this is properly documented anywhere other than
      in ``gcc -dumpspecs'' (look at lib and cpp entries).
   </p>
   <p>See <a href="../faq/index.html#3">FAQ</a> (general overview), <a
      href="../23_containers/howto.html#3">23</a> (containers), and <a
      href="../27_io/howto.html#9">27</a> (I/O) for more information.
   </p>
   <p>The libstdc++-v3 library (unlike libstdc++-v2, all of it, not
      just the STL) has been designed so that multithreaded
      applications using it may be written.  The first problem is
      finding a <em>fast</em> method of implementation portable to all
      platforms.  Due to historical reasons, some of the library is
      written against per-CPU-architecture spinlocks and other parts
      against the gthr.h abstraction layer which is provided by gcc.
      A minor problem that pops up every so often is different
      interpretations of what &quot;thread-safe&quot; means for a
      library (not a general program).  We currently use the <a
      href="http://www.sgi.com/tech/stl/thread_safety.html">same
      definition that SGI</a> uses for their STL subset.  However, the
      exception for read-only containers only applies to the STL
      components.
   </p>
   <p>Here is a small link farm to threads (no pun) in the mail archives
      that discuss the threading problem.  Each link is to the first
      relevant message in the thread; from there you can use
      &quot;Thread Next&quot; to move down the thread.  This farm is in
      latest-to-oldest order.
   </p>
      <ul>
        <li>Our threading expert Loren gives a breakdown of
        <a href="http://gcc.gnu.org/ml/libstdc++/2001-10/msg00024.html">the
        six situations involving threads</a> for the 3.0 release series.</li>
        <li><a href="http://gcc.gnu.org/ml/libstdc++/2001-05/msg00384.html">
        This message</a> inspired a recent updating of issues with threading
        and the SGI STL library.  It also contains some example
        POSIX-multithreaded STL code.</li>
      </ul>
   <p> (A large selection of links to older messages has been removed; many
      of the messages from 1999 were lost in a disk crash, and the few
      people with access to the backup tapes have been too swamped with work
      to restore them.  Many of the points have been superseded anyhow.)
   </p>
   <p>This section will be updated as new and interesting issues come
      to light.
   </p>
   <p>Return <a href="#top">to top of page</a> or
      <a href="../faq/index.html">to the FAQ</a>.
   </p>

<hr />
<h2><a name="4"><code>&lt;foo&gt;</code> vs <code>&lt;foo.h&gt;</code></a></h2>
   <p>The new-style headers are fully supported in libstdc++-v3.  The compiler
      itself fully supports namespaces, including <code>std::</code>.
   </p>
   <p>For those of you new to ISO C++98, no, that isn't a typo, the headers
      really have new names.  Marshall Cline's C++ FAQ Lite has a good
      explanation in
<a href="http://www.parashift.com/c++-faq-lite/coding-standards.html#faq-27.4">item [27.4]</a>.
   </p>
   <p>Return <a href="#top">to top of page</a> or
      <a href="../faq/index.html">to the FAQ</a>.
   </p>

<hr />
<h2><a name="5">Behavior specific to libstdc++-v3</a></h2>
   <p>The ISO standard defines the following phrase:
   </p>
     <blockquote><dl>
     <dt><code>[1.3.5] implementation-defined behavior</code></dt>
     <dd>behavior, for a well-formed program construct and correct data, that
         depends on the implementation <strong>and that each implementation
         shall document</strong>.
     </dd>
     </dl></blockquote>
   <p>We do so here, for the C++ library only.  Behavior of the compiler,
      linker, runtime loader, and other elements of &quot;the
      implementation&quot; are documented elsewhere.  Everything listed in
      Annex B, Implemenation Qualities, are also part of the compiler, not
      the library.
   </p>
   <p>For each entry, we give the section number of the standard, when
      applicable.  This list is probably incomplet and inkorrekt.
   </p>
   <p><strong>[1.9]/11 #3</strong> If <code>isatty(3)</code> is true, then
      interactive stream support is implied.
   </p>
   <p><strong>[17.4.4.5]</strong> Non-reentrant functions are probably best
      discussed in the various sections on multithreading (see above).
   </p>
   <!-- [17.4.4.8]/3 says any function that doesn't have an exception-spec
        can throw whatever we want; see also its footnote.  Let's list those
        in the sections where the function itself occurs.
   -->
   <p><strong>[18.1]/4</strong> The type of <code>NULL</code> is described
      <a href="../18_support/howto.html#1">here</a>.
   </p>
   <p><strong>[18.3]/8</strong> Even though it's listed in the library
      sections, libstdc++-v3 has zero control over what the cleanup code hands
      back to the runtime loader.  Talk to the compiler people.  :-)
   </p>
   <p><strong>[18.4.2.1]/5</strong> (bad_alloc),<br />
      <strong>[18.5.2]/5</strong> (bad_cast),<br />
      <strong>[18.5.3]/5</strong> (bad_typeid),<br />
      <strong>[18.6.1]/8</strong> (exception),<br />
      <strong>[18.6.2.1]/5</strong> (bad_exception):  The <code>what()</code>
      member function of class <code>std::exception</code>, and these other
      classes publicly derived from it, simply returns the name of the
      class.  But they are the <em>mangled</em> names; you will need to call
      <code>c++filt</code> and pass the names as command-line parameters to
      demangle them, or call a
      <a href="../18_support/howto.html#5">runtime demangler function</a>.
      (The classes in <code>&lt;stdexcept&gt;</code> have constructors which
      require an argument to use later for <code>what()</code> calls, so the
      problem of <code>what()</code>'s value does not arise in most
      user-defined exceptions.)
   </p>
   <p><strong>[18.5.1]/7</strong> The return value of
      <code>std::type_info::name()</code> is the mangled type name (see the
      previous entry for more).
   </p>
   <p><strong>[20.1.5]/5</strong> <em>&quot;Implementors are encouraged to
      supply libraries that can accept allocators that encapsulate more
      general memory models and that support non-equal instances.  In such
      implementations, any requirements imposed on allocators by containers
      beyond those requirements that appear in Table 32, and the semantics
      of containers and algorithms when allocator instances compare
      non-equal, are implementation-defined.&quot;</em>  As yet we don't
      have any allocators which compare non-equal, so we can't describe how
      they behave.
   </p>
   <p><strong>[21.1.3.1]/3,4</strong>,<br />
      <strong>[21.1.3.2]/2</strong>,<br />
      <strong>[23.*]'s foo::iterator</strong>,<br />
      <strong>[27.*]'s foo::*_type</strong>,<br />
      <strong>others...</strong>
      Nope, these types are called implementation-defined because you
      shouldn't be taking advantage of their underlying types.  Listing them
      here would defeat the purpose.  :-)
   </p>
   <p><strong>[21.1.3.1]/5</strong> I don't really know about the mbstate_t
      stuff... see the <a href="../22_locale/howto.html">chapter 22 notes</a>
      for what does exist.
   </p>
   <p><strong>[22.*]</strong> Anything and everything we have on locale
      implemenation will be described
      <a href="../22_locale/howto.html">over here</a>.
   </p>
   <p><strong>[26.2.8]/9</strong> I have no idea what
      <code>complex&lt;T&gt;</code>'s pow(0,0) returns.
   </p>
   <p><strong>[27.4.2.4]/2</strong> Calling
      <code>std::ios_base::sync_with_stdio</code> after I/O has already been
      performed on the standard stream objects will
      flush the buffers, and <!-- this line might go away -->
      destroy and recreate the underlying buffer instances.  Whether or not
      the previously-written I/O is destroyed in this process depends mostly
      on the --enable-libio choice:  for stdio, if the written data is
      already in the stdio buffer, the data may be completely safe!
   </p>
   <p><strong>[27.6.1.1.2]</strong>,<br />
      <strong>[27.6.2.3]</strong> The I/O sentry ctor and dtor can perform
      additional work than the minimum required.  We are not currently taking
      advantage of this yet.
   </p>
   <p><strong>[27.7.1.3]/16</strong>,<br />
      <strong>[27.8.1.4]/10</strong>
      The effects of <code>pubsetbuf/setbuf</code> are described
      <a href="../27_io/howto.html#2">in this chapter</a>.
   </p>
   <p><strong>[27.8.1.4]/16</strong> Calling <code>fstream::sync</code> when
      a get area exists will... whatever <code>fflush()</code> does, I think.
   </p>
   <p>Return <a href="#top">to top of page</a> or
      <a href="../faq/index.html">to the FAQ</a>.
   </p>

<hr />
<h2><a name="6">Preprocessor macros controlling the library</a></h2>
   <p>Some of the semantics of the libstdc++-v3 implementation are
      controlled by preprocessor macros, both during build/installation and
      during compilation of user code.  Many of these choices are made when
      the library is built and installed (actually, during
      <a href="../configopts.html">the configuration step</a>, with the
      various --enable/--disable choices being translated to #define/#undef).
   </p>
   <p>All library macros begin with <code>_GLIBCPP_</code> in earlier
      versions, and <code>_GLIBCXX_</code> in later versions.  The fact that
      these symbols start with a leading underscore should give you a clue
      that (by default) they aren't meant to be changed by the user.  :-)
   </p>
   <p>These macros are all gathered in the file <code>c++config.h</code>,
      which is generated during installation.  <strong>You must assume that
      these macros cannot be redefined by your own code</strong>, unless we
      document otherwise here.  Some of the choices control code which has
      already been compiled (i.e., libstdc++.a/.so).  If you explicitly
      #define or #undef these macros, the <em>headers</em> may see different
      code paths, but the <em>libraries</em> which you link against will not.
      If you want to experiment with different values, you must change the
      config headers before building/installing the library.
   </p>
   <p>Below are macros which, for 3.1 and later, you may change yourself,
      in your own code with #define/#undef or with -D/-U compiler flags.
      The default state of the symbol is listed.  &quot;Configurable&quot;
      (or &quot;Not configurable&quot;) means that the symbol is initially
      chosen (or not) based on --enable/--disable options at configure time.
      For 3.1 through 3.3, the prefixes are <code>_GLIBCPP_</code>.
   </p>
    <dl>
    <dt><code>_GLIBCXX_DEPRECATED</code></dt>
    <dd>Undefined by default.  Not configurable.  Turning this on enables
        older ARM-style iostreams code, and other anachronisms.  This may be
        useful in updating old C++ programs which no longer meet the
        requirements of the language.
    </dd>
    <!--
     Can this actually be turned off and still produce a working lib?  Must
     check.  -pme
     No, it can't.  Hmmm.  -pme
    <dt><code>_GLIBCPP_RESOLVE_LIB_DEFECTS</code></dt>
    <dd>Defined by default.  Not configurable.  The library follows
        corrections and updates from the ISO committee, see
        <a href="../faq/index.html#5_2">here</a> and
        <a href="../ext/howto.html#5">here</a> for more on this feature.
        If you have code which depends on the first version of the standard,
        you might try undefining this macro.
    </dd>
    -->
    <dt><code>_GLIBCXX_CONCEPT_CHECKS</code></dt>
    <dd>Undefined by default.  Configurable.  When defined, performs
        compile-time checking on certain template instantiations to detect
        violations of the requirements of the standard.  This is described
        in more detail <a href="../19_diagnostics/howto.html#3">here</a>.
    </dd>
    <dt><code>_GLIBCXX_DEBUG</code></dt>
    <dd>Undefined by default. Configurable. When defined, compiles
    user code using the <a href="../debug.html#safe">libstdc++ debug
    mode</a>.
    </dd>
    <dt><code>_GLIBCXX_DEBUG_PEDANTIC</code></dt>
    <dd>Undefined by default. Configurable. When defined while
    compiling with the <a href="../debug.html#safe">libstdc++ debug
    mode</a>, makes the debug mode extremely picky by making the use
    of libstdc++ extensions and libstdc++-specific behavior into
    errors.
    </dd>
    <!--
    <dt><code></code></dt>
    <dd>
    </dd>
    -->
    </dl>
   <p>Return <a href="#top">to top of page</a> or
      <a href="../faq/index.html">to the FAQ</a>.
   </p>



<!-- ####################################################### -->

<hr />
<p class="fineprint"><em>
See <a href="license.html">license.html</a> for copying conditions.
Comments and suggestions are welcome, and may be sent to
<a href="mailto:libstdc++@gcc.gnu.org">the libstdc++ mailing list</a>.
</em></p>


</body>
</html>


