.\" t
.\" This man page is released under the FDL as part of libstdc++.
.TH C++Intro 3 "20 May 2004" "GNU libstdc++" "Standard C++ Library"
.SH NAME
C++Intro \- Introduction to the GNU libstdc++ man pages
.SH DESCRIPTION
This man page serves as a brief introduction to the GNU implementation of
the Standard C++ Library.  For a better introduction and more complete
documentation, see the
.B libstdc++
homepage listed at the end.
.P
All standard library entities are declared within
.I namespace std
and have manual entries beginning with "std::".  For example, to see
documentation of the template class
.I std::vector
one would use "man std::vector".  Some entities do not have a separate man
page; for those see the main listing in "man Namespace_std".
.P
All the man pages are automatically generated by Doxygen.  For more
information on this tool, see the HTML counterpart to these man pages.
.P
Some man pages do not correspond to individual classes or functions.  Rather
they describe categories of the Standard Library.  (For a more thorough
introduction to the various categories, consult a text such as Josuttis'
or Austern's.)  These category pages are:
.P
.\" These are separated by ONE TAB.  Nothing else.  I don't like it either.
.TS
lB l.
C++Intro	This page.
Namespace_std	A listing of the contents of std::.
Namespace___gnu_cxx	A listing of the contents of __gnu_cxx::.
Containers	An introduction to container classes.
Sequences	Linear containers.
Assoc_containers	Key-based containers.
Iterator_types	Programatically distinguishing iterators/pointers.
Intro_functors	An introduction to function objects, or functors.
Arithmetic_functors	Functors for basic math.
Binder_functors	Functors which "remember" an argument.
Comparison_functors	Functors wrapping built-in comparisons.
Func_ptr_functors	Functors for use with pointers to functions.
Logical_functors	Functors wrapping the Boolean operations.
Member_ptr_functor	Functors for use with pointers to members.
Negation_functors	Functors which negate their contents.
SGIextensions	A list of the extensions from the SGI STL subset.

.TE
.P
The HTML documentation typically goes into much more depth.
.SH FILES
Lots!
.SS Standard Headers
These headers will be found automatically, unless you instruct the compiler
otherwise.
.TS
lB lB lB lB.
<algorithm>  <csignal>     <iomanip>   <ostream>
<bitset>     <cstdarg>     <ios>       <queue>
<cassert>    <cstddef>     <iosfwd>    <set>
<cctype>     <cstdio>      <iostream>  <sstream>
<cerrno>     <cstdlib>     <istream>   <stack>
<cfloat>     <cstring>     <iterator>  <stdexcept>
<ciso>646    <ctime>       <limits>    <streambuf>
<climits>    <cwchar>      <list>      <string>
<clocale>    <cwctype>     <locale>    <utility>
<cmath>      <deque>       <map>       <valarray>
<complex>    <fstream>     <memory>    <vector>
<csetjmp>    <functional>  <numeric>
.TE
.SS Backwards-Compatibility Headers
For GCC 3.0 these headers will be found automatically, unless you instruct
the compiler otherwise.  You should not depend on this, instead you should
read FAQ 5.4 and use a
.B backward/
prefix.
.TS
lB lB lB lB.
<algo.h>      <hash_map.h>   <map.h>       <slist.h>
<algobase.h>  <hash_set.h>   <multimap.h>  <stack.h>
<alloc.h>     <hashtable.h>  <multiset.h>  <stream.h>
<bvector.h>   <heap.h>       <new.h>       <streambuf.h>
<complex.h>   <iomanip.h>    <ostream.h>   <strstream>
<defalloc.h>  <iostream.h>   <pair.h>      <strstream.h>
<deque.h>     <istream.h>    <queue.h>     <tempbuf.h>
<fstream.h>   <iterator.h>   <rope.h>      <tree.h>
<function.h>  <list.h>       <set.h>       <vector.h>
.TE
.SS Extension Headers
These headers will only be found automatically if you include the leading
.B ext/
in the name.  Otherwise you need to read FAQ 5.4.
.\" Easy way to generate these columns of headers is to use GNU ls(1):
.\" ls -w 40 file1 file2... | sed 's=[a-z_][a-z_]*=<ext/&>=g'
.TS
lB lB.
<ext/algorithm>            <ext/numeric>            
<ext/functional>           <ext/iterator>
<ext/slist>                <ext/rb_tree>  
<ext/hash_map>             <ext/hash_set>           
<ext/rope>                 <ext/memory>               
<ext/bitmap_allocator.h>   <ext/debug_allocator.h>    
<ext/malloc_allocator.h>   <ext/mt_allocator.h>     
<ext/pool_allocator.h>     <ext/pod_char_traits.h>    
<ext/stdio_filebuf.h>      <ext/stdio_sync_filebuf.h>
.TE
.SS Libraries
.TP
.I libstdc++.a
The library implementation in static archive form.  If you did not configure
libstdc++ to use shared libraries, this will always be used.  Otherwise
it will only be used if the user requests it.
.TP
.I libsupc++.a
This library contains C++ language support routines.  Usually you will never
need to know about it, but it can be useful.  See FAQ 2.5.
.TP
.I libstdc++.so[.N]
The library implementation in shared object form.  This will be used in
preference to the static archive form by default.  N will be a number equal
to or greater than 3.  If N is in the 2.x series, then you are looking at
the old libstdc++-v2 library, which we do not maintain.
.TP
.I libstdc++.la
.TP
.I libsupc++.la
These are Libtool library files, and should only be used when working with
that tool.
.SH CONFORMING TO
Almost conforming to
.BI "International Standard ISO/IEC 14882:1998(E), " "Programming Languages --- C++"
(aka the C++ standard), in addition to corrections proposed by the Library
Working Group,
.SM JTC1/SC22/WG21.
.SH SEE ALSO
.UR
http://gcc.gnu.org/libstdc++/
.UE
for the Frequently Asked Questions, online documentation, and much, much more!
.\" vim:ts=8:noet:
