1<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE html
3          PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
6<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7<head>
8   <meta name="AUTHOR" content="pme@gcc.gnu.org (Phil Edwards)" />
9   <meta name="KEYWORDS" content="libstdc++, libstdc++-v3, GCC, g++" />
10   <meta name="DESCRIPTION" content="Explanatory notes about libstdc++-v3." />
11   <meta name="GENERATOR" content="vi and eight fingers" />
12   <title>Explanatory notes about libstdc++-v3 design</title>
13<link rel="StyleSheet" href="lib3styles.css" />
14</head>
15<body>
16
17<h1 class="centered"><a name="top">Explanatory notes about libstdc++-v3
18design</a></h1>
19
20<p class="fineprint"><em>
21   The latest version of this document is always available at
22   <a href="http://gcc.gnu.org/onlinedocs/libstdc++/explanations.html">
23   http://gcc.gnu.org/onlinedocs/libstdc++/explanations.html</a>.
24</em></p>
25
26<p><em>
27   To the <a href="http://gcc.gnu.org/libstdc++/">libstdc++-v3 homepage</a>.
28</em></p>
29
30
31<!-- ####################################################### -->
32<hr />
33<h3><a name="cstdio">&quot;I/O packages&quot;, <code>--enable-cstdio</code></a></h3>
34<p>In addition to all the nifty things which C++ can do for I/O, its library
35   also includes all of the I/O capabilites of C.  Making them work together
36   can be a challenge, not only
37   <a href="27_io/howto.html#8">for the programmer</a> but for the
38   implementors as well.
39</p>
40<p>There are two ways to do a C++ library:  the cool way, and the easy way.
41   More specifically, the cool-but-easy-to-get-wrong way, and the
42   easy-to-guarantee-correct-behavior way.  For 3.0, the easy way is used.
43</p>
44<p>Choosing 'stdio' is the easy way.  It builds a C++ library which forwards
45   all operations to the C library.  Many of the C++ I/O functions are
46   specified in the standard 'as if' they called a certain C function; the
47   easiest way to get it correct is to actually call that function.  The
48   disadvantage is that the C++ code will run slower (fortunately, the layer
49   is thin).
50</p>
51<p>Other packages are possible.  For a new package, a header must be
52   written to provide types like streamsize (usually just a typedef), as
53   well as some internal types like<code> __c_file_type </code> and
54   <code> __c_lock </code> (for the stdio case, these are FILE (as in
55   &quot;FILE*&quot;) and a simple POSIX mutex, respectively).  An
56   interface class called <code> __basic_file </code> must also be filled in;
57   as an example, for the stdio case, these member functions are all
58   inline calles to fread, fwrite, etc.
59</p>
60<p>Return <a href="#top">to the top of the page</a> or
61   <a href="http://gcc.gnu.org/libstdc++/">to the homepage</a>.
62</p>
63
64
65<hr />
66<h3><a name="alloc">Internal Allocators</a></h3>
67<p>
68</p>
69<p>Return <a href="#top">to the top of the page</a> or
70   <a href="http://gcc.gnu.org/libstdc++/">to the homepage</a>.
71</p>
72
73
74<!-- ####################################################### -->
75
76<hr />
77<p class="fineprint"><em>
78See <a href="17_intro/license.html">license.html</a> for copying conditions.
79Comments and suggestions are welcome, and may be sent to
80<a href="mailto:libstdc++@gcc.gnu.org">the libstdc++ mailing list</a>.
81</em></p>
82
83
84</body>
85</html>
86