porting-howto.xml: check in v0.9.4
authorFelix Natter <fnatter@gmx.net>
Mon, 5 Nov 2001 21:54:43 +0000 (21:54 +0000)
committerPhil Edwards <pme@gcc.gnu.org>
Mon, 5 Nov 2001 21:54:43 +0000 (21:54 +0000)
2001-11-05  Felix Natter  <fnatter@gmx.net>

* docs/html/17_intro/porting-howto.xml:  check in v0.9.4
* docs/html/17_intro/porting-howto.html:  regenerate

From-SVN: r46793

libstdc++-v3/ChangeLog
libstdc++-v3/docs/html/17_intro/porting-howto.html
libstdc++-v3/docs/html/17_intro/porting-howto.xml

index dac1b00..0b42000 100644 (file)
@@ -1,3 +1,8 @@
+2001-11-05  Felix Natter  <fnatter@gmx.net>
+
+       * docs/html/17_intro/porting-howto.xml:  check in v0.9.4
+       * docs/html/17_intro/porting-howto.html:  regenerate
+
 2001-11-02  Loren J. Rittle  <ljrittle@acm.org>
 
        * include/bits/stl_threads.h (_Atomic_swap): Only enable path
index 582d4a6..c9a45c3 100644 (file)
@@ -13,8 +13,8 @@
 <div><div class="legalnotice">
 <p class="legalnotice-title"><b>Legal Notice</b></p>
 <p>
-               This document can be distributed under the FDL
-               (<a href="http://www.gnu.org" target="_top">www.gnu.org</a>)
+       This document can be distributed under the FDL
+       (<a href="http://www.gnu.org" target="_top">www.gnu.org</a>)
       </p>
 </div></div>
 <div><p class="pubdate">Tue Jun  5 20:07:49 2001</p></div>
@@ -32,8 +32,8 @@
 <td align="left">fnatter</td>
 </tr>
 <tr><td align="left" colspan="3">First released version using docbook-xml
-                 + second upload to libstdc++-page.
-               </td></tr>
+         + second upload to libstdc++-page.
+       </td></tr>
 <tr>
 <td align="left">Revision 0.9</td>
 <td align="left">Wed Sep  6 02:59:32 2000</td>
 <td align="left">fnatter</td>
 </tr>
 <tr><td align="left" colspan="3">added information about why file-descriptors are not in the
-                 standard</td></tr>
+         standard</td></tr>
 <tr>
 <td align="left">Revision 0.9.2</td>
 <td align="left">Tue Jun  5 20:07:49 2001</td>
 <td align="left">fnatter</td>
 </tr>
 <tr><td align="left" colspan="3">
-                 a fix, added hint on increased portability of C-shadow-headers,
-                 added autoconf-test HAVE_CONTAINER_AT
-               </td></tr>
+         a fix, added hint on increased portability of C-shadow-headers,
+         added autoconf-test HAVE_CONTAINER_AT
+       </td></tr>
 <tr>
 <td align="left">Revision 0.9.3</td>
 <td align="left">Fri Jun 29 16:15:56 2001</td>
 <td align="left">fnatter</td>
 </tr>
 <tr><td align="left" colspan="3">
-                       changed signature of nonstandard filebuf-constructor and
-                 update the section on filebuf::attach to point to ../ext/howto.html,
-                 added link to ../21/strings/howto.html
-                 in sec-stringstream, changed &lt;link&gt;-tags to have content
-                       (so that these links work),
-                 replace &quot;user-space&quot; by &quot;global namespace&quot;
-                       add note about gcc 3.0 and shadow-headers                       
-                       add section about ostream::form and istream::scan
-                       sec-vector-at: remove hint to modify headers
-                       fix spelling error in sec-stringstream
-               </td></tr>
+         changed signature of nonstandard filebuf-constructor and
+         update the section on filebuf::attach to point to ../ext/howto.html,
+         added link to ../21/strings/howto.html
+         in sec-stringstream, changed &lt;link&gt;-tags to have content
+         (so that these links work),
+         replace &quot;user-space&quot; by &quot;global namespace&quot;
+         add note about gcc 3.0 and shadow-headers                     
+         add section about ostream::form and istream::scan
+         sec-vector-at: remove hint to modify headers
+         fix spelling error in sec-stringstream
+       </td></tr>
+<tr>
+<td align="left">Revision 0.9.4</td>
+<td align="left">Mon Nov  5 17:01:04 2001</td>
+<td align="left">fnatter</td>
+</tr>
+<tr><td align="left" colspan="3">
+         rewrite section 1.1.3 because of gnu.gcc.help-post by
+         Juergen Heinzl
+       </td></tr>
 </table></div></div>
 <div><div class="abstract">
 <p>
-<a name="id2695641"></a><b>Abstract</b>
+<a name="id2697062"></a><b>Abstract</b>
 </p>
 <p>
        Some notes on porting applications from libstdc++-2.90 (or earlier
       things:
       <div class="itemizedlist"><ul>
 <li><p>
-<a name="id2695691"></a>wrap your code in <b>namespace std {
+<a name="id2697113"></a>wrap your code in <b>namespace std {
              ... }</b> =&gt; This is not an option because only symbols
            from the standard c++-library are defined in namespace std::.
          </p></li>
 <li><p>
-<a name="id2695698"></a>put a kind of
+<a name="id2697126"></a>put a kind of
            <i>using-declaration</i> in your source (either
            <b>using namespace std;</b> or i.e. <b>using
              std::string;</b>) =&gt; works well for source-files, but
            cannot be used in header-files.
          </p></li>
 <li><p>
-<a name="id2695717"></a>use a <i>fully qualified name</i> for
+<a name="id2697047"></a>use a <i>fully qualified name</i> for
            each libstdc++-symbol (i.e. <b>std::string</b>,
            <b>std::cout</b>) =&gt; can always be used
          </p></li>
 <p>
        If some compilers complain about <b>using
          std::string;</b>, and if the &quot;hack&quot; for gtk-- mentioned above
-       does not work, then it might be a good idea to define a macro
-       NS_STD, which is defined to either &quot;&quot; or &quot;std&quot;
-       based on an autoconf-test. Then you should be able to use
-       <b>NS_STD::string</b>, which will evaluate to
-       <b>::string</b> (&quot;string in the global namespace&quot;) on
-       systems that do not put string in std::.  (This is untested)
+       does not work, then I see two solutions:
+       
+       <div class="itemizedlist"><ul>
+<li><p>
+<a name="id2698648"></a>
+             Define <b>std::</b> as a macro if the compiler
+             doesn't know about <b>std::</b>.
+             <pre class="programlisting">
+               #ifdef OLD_COMPILER
+               #define std
+               #endif
+             </pre>
+             (thanks to Juergen Heinzl who posted this solution on
+             gnu.gcc.help)
+           </p></li>
+<li><p>
+<a name="id2698680"></a>
+             Define a macro NS_STD, which is defined to
+             either &quot;&quot; or &quot;std&quot;
+             based on an autoconf-test. Then you should be able to use
+             <b>NS_STD::string</b>, which will evaluate to
+             <b>::string</b> (&quot;string in the global namespace&quot;) on
+             systems that do not put string in std::.  (This is untested)
+           </p></li>
+</ul></div>
+         
       </p>
 </div>
 <div class="section">
       </p>
 <div class="table">
 <p>
-<a name="id2696268"></a><b>Table 1. Namespace std:: in Open-Source programs</b>
+<a name="id2698746"></a><b>Table 1. Namespace std:: in Open-Source programs</b>
 </p>
 <table summary="Namespace std:: in Open-Source programs" border="1">
 <colgroup>
 </div>
 <div class="table">
 <p>
-<a name="id2696334"></a><b>Table 2. Notations for categories</b>
+<a name="id2698876"></a><b>Table 2. Notations for categories</b>
 </p>
 <table summary="Notations for categories" border="1">
 <colgroup>
     </p>
 <p>
       When using libstdc++-v3, you can use
-      <div class="funcsynopsis" id="id2696909">
+      <div class="funcsynopsis" id="id2692860">
 <p>
-<a name="id2696909"></a><pre class="funcsynopsisinfo">
+<a name="id2692860"></a><pre class="funcsynopsisinfo">
          #include &lt;fstream&gt;
        </pre>
 <p><code><code class="funcdef">
-                 <b class="fsfunc">basic_filebuf&lt;...&gt;::basic_filebuf&lt;...&gt;
-                       </b>
-               </code>(<var class="pdparam">file</var>, <var class="pdparam">mode</var>, <var class="pdparam">size</var>);<br>__c_file_type* <var class="pdparam">file</var>;<br>ios_base::open_mode <var class="pdparam">mode</var>;<br>int <var class="pdparam">size</var>;</code></p>
+           <b class="fsfunc">basic_filebuf&lt;...&gt;::basic_filebuf&lt;...&gt;
+           </b>
+         </code>(<var class="pdparam">file</var>, <var class="pdparam">mode</var>, <var class="pdparam">size</var>);<br>__c_file_type* <var class="pdparam">file</var>;<br>ios_base::open_mode <var class="pdparam">mode</var>;<br>int <var class="pdparam">size</var>;</code></p>
 <p>
 </div>
       but the the signature of this constructor has changed often, and
       it might change again. For the current state of this, check
-         <a href="../ext/howto.html" target="_top">the howto for extensions</a>.
-       </p>
+      <a href="../ext/howto.html" target="_top">the howto for extensions</a>.
+    </p>
 <p>
       For a portable solution (among systems which use
       filedescriptors), you need to implement a subclass of
        source-code</a>.
     </p>
 <p>
-    The old C++-headers (iostream.h etc.) are available, but gcc generates
-    a warning that you are using deprecated headers.
+      The old C++-headers (iostream.h etc.) are available, but gcc generates
+      a warning that you are using deprecated headers.
     </p>
 <div class="section">
 <a name="sec-cheaders"></a><div class="titlepage"><div><h3 class="title">
        For more information on this, and for information on how the
        GNU C++ implementation might reuse (&quot;shadow&quot;) the C
        library-functions, have a look at <a href="http://www.cantrip.org/cheaders.html" target="_top">
-       www.cantrip.org</a>.
+         www.cantrip.org</a>.
       </p>
 </div>
 <div class="section">
        In earlier versions of the standard,
        <tt>&lt;fstream.h&gt;</tt>,
        <tt>&lt;ostream.h&gt;</tt>
-        and <tt>&lt;istream.h&gt;</tt>
-         used to define
+       and <tt>&lt;istream.h&gt;</tt>
+       used to define
        <b>cout</b>, <b>cin</b> and so on. Because
        of the templatized iostreams in libstdc++-v3, you need to include
        <tt>&lt;iostream&gt;</tt>
       fixes for existing uses of iterators.
       <div class="itemizedlist"><ul>
 <li><p>
-<a name="id2692127"></a>you cannot do
+<a name="id2693156"></a>you cannot do
            <b>ostream::operator&lt;&lt;(iterator)</b> to
            print the address of the iterator =&gt; use
            <b>operator&lt;&lt; &amp;*iterator</b> instead ?
          </p></li>
 <li><p>
-<a name="id2697070"></a>you cannot clear an iterator's reference
+<a name="id2693255"></a>you cannot clear an iterator's reference
            (<b>iterator = 0</b>) =&gt; use
            <b>iterator = iterator_type();</b> ?
          </p></li>
 <li><p>
-<a name="id2697221"></a><b>if (iterator)</b> won't work any
+<a name="id2693277"></a><b>if (iterator)</b> won't work any
            more =&gt; use <b>if (iterator != iterator_type())</b>
            ?</p></li>
 </ul></div>
       <tt>&lt;ctype.h&gt;</tt>
       -functionality as macros (isspace, isalpha etc.). Libstdc++-v3
       &quot;shadows&quot; these macros as described in the <a href="#sec-cheaders">section about
-      c-headers</a>.
+       c-headers</a>.
     </p>
 <p>
       Older implementations of libstdc++ (g++-2 for egcs 1.x and g++-3
        --enable-cshadow-headers is currently broken. As a result, shadow
        headers are not being searched....
       '
-                       This is now outdated, but gcc 3.0 still does not have fully
-                       compliant &quot;shadow headers&quot;.
+      This is now outdated, but gcc 3.0 still does not have fully
+      compliant &quot;shadow headers&quot;.
     </p>
 </div>
 <div class="section">
 <a name="sec-scan-form"></a><span class="label">11.</span> <span class="title">GNU Extensions ostream::form and istream::scan</span>
 </h2></div></div>
 <p>
-               These   are not supported any more - use
-               <a href="#sec-stringstream">
-               stringstreams</a> instead.      
-               </p>
+      These    are not supported any more - use
+      <a href="#sec-stringstream">
+       stringstreams</a> instead.      
+    </p>
 </div>
 <div class="section">
 <a name="sec-stringstream"></a><div class="titlepage"><div><h2 class="title" style="clear: all">
       </pre>
       <div class="itemizedlist"><ul>
 <li><p>
-<a name="id2692504"></a> <b>strstream</b> is considered to be
+<a name="id2693683"></a> <b>strstream</b> is considered to be
            deprecated
          </p></li>
 <li><p>
-<a name="id2692452"></a> <b>strstream</b> is limited to
+<a name="id2693629"></a> <b>strstream</b> is limited to
            <b>char</b>
          </p></li>
 <li><p>
-<a name="id2692539"></a> with <b>ostringstream</b> you don't
+<a name="id2693718"></a> with <b>ostringstream</b> you don't
            have to take care of terminating the string or freeing its
            memory
          </p></li>
 <li><p>
-<a name="id2692552"></a> <b>istringstream</b> can be re-filled
+<a name="id2693735"></a> <b>istringstream</b> can be re-filled
            (clear(); str(input);)
          </p></li>
 </ul></div>
        void fromString(const string&amp; input, X&amp; any)
        {
        #ifdef HAVE_SSTREAM
-         std::istringstream iss(input);
+       std::istringstream iss(input);
        #else
-         std::istrstream iss(input.c_str());
+       std::istrstream iss(input.c_str());
        #endif
-         X temp;
-         iss &gt;&gt; temp;
-         if (iss.fail())
-           throw runtime_error(..)
-         any = temp;
+       X temp;
+       iss &gt;&gt; temp;
+       if (iss.fail())
+       throw runtime_error(..)
+       any = temp;
        }
       </pre>
-         Another example of using stringstreams is in <a href="../21_strings/howto.html" target="_top">this howto</a>.
+      Another example of using stringstreams is in <a href="../21_strings/howto.html" target="_top">this howto</a>.
     </p>
 <p>
       I have read the Josuttis book on Standard C++, so some information
index f00d047..1c02843 100644 (file)
@@ -22,6 +22,7 @@
 <!-- TODO:
 o remove //@label: use automatic numbering
 o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/>.
+o clean up the section-numbering
 -->
 
 <article class = "whitepaper" id = "libstdc++-porting-howto" lang = "en">
@@ -36,63 +37,72 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
     </address>
     <revhistory>
       <revision>
-               <revnumber>0.5</revnumber>
-               <date>Thu Jun  1 13:06:50 2000</date>
-               <authorinitials>fnatter</authorinitials>
-               <revremark>First docbook-version.</revremark>
+       <revnumber>0.5</revnumber>
+       <date>Thu Jun  1 13:06:50 2000</date>
+       <authorinitials>fnatter</authorinitials>
+       <revremark>First docbook-version.</revremark>
       </revision>
       <revision>
-               <revnumber>0.8</revnumber>
-               <date>Sun Jul 30 20:28:40 2000</date>
-               <authorinitials>fnatter</authorinitials>
-               <revremark>First released version using docbook-xml
-                 + second upload to libstdc++-page.
-               </revremark>
+       <revnumber>0.8</revnumber>
+       <date>Sun Jul 30 20:28:40 2000</date>
+       <authorinitials>fnatter</authorinitials>
+       <revremark>First released version using docbook-xml
+         + second upload to libstdc++-page.
+       </revremark>
       </revision>
       <revision>
-               <revnumber>0.9</revnumber>
-               <date>Wed Sep  6 02:59:32 2000</date>
-               <authorinitials>fnatter</authorinitials>
-               <revremark>5 new sections.</revremark>
+       <revnumber>0.9</revnumber>
+       <date>Wed Sep  6 02:59:32 2000</date>
+       <authorinitials>fnatter</authorinitials>
+       <revremark>5 new sections.</revremark>
       </revision>
       <revision>
-               <revnumber>0.9.1</revnumber>
-               <date>Sat Sep 23 14:20:15 2000</date>
-               <authorinitials>fnatter</authorinitials>
-               <revremark>added information about why file-descriptors are not in the
-                 standard</revremark>
+       <revnumber>0.9.1</revnumber>
+       <date>Sat Sep 23 14:20:15 2000</date>
+       <authorinitials>fnatter</authorinitials>
+       <revremark>added information about why file-descriptors are not in the
+         standard</revremark>
       </revision>
       <revision>
-               <revnumber>0.9.2</revnumber>
-               <date>Tue Jun  5 20:07:49 2001</date>
-               <authorinitials>fnatter</authorinitials>
-               <revremark>
-                 a fix, added hint on increased portability of C-shadow-headers,
-                 added autoconf-test HAVE_CONTAINER_AT
-               </revremark>
+       <revnumber>0.9.2</revnumber>
+       <date>Tue Jun  5 20:07:49 2001</date>
+       <authorinitials>fnatter</authorinitials>
+       <revremark>
+         a fix, added hint on increased portability of C-shadow-headers,
+         added autoconf-test HAVE_CONTAINER_AT
+       </revremark>
       </revision>
       <revision>
-               <revnumber>0.9.3</revnumber>
-               <date>Fri Jun 29 16:15:56 2001</date>
-               <authorinitials>fnatter</authorinitials>
-               <revremark>
-                       changed signature of nonstandard filebuf-constructor and
-                 update the section on filebuf::attach to point to ../ext/howto.html,
-                 added link to ../21/strings/howto.html
-                 in sec-stringstream, changed &lt;link&gt;-tags to have content
-                       (so that these links work),
-                 replace "user-space" by "global namespace"
-                       add note about gcc 3.0 and shadow-headers                       
-                       add section about ostream::form and istream::scan
-                       sec-vector-at: remove hint to modify headers
-                       fix spelling error in sec-stringstream
-               </revremark>
+       <revnumber>0.9.3</revnumber>
+       <date>Fri Jun 29 16:15:56 2001</date>
+       <authorinitials>fnatter</authorinitials>
+       <revremark>
+         changed signature of nonstandard filebuf-constructor and
+         update the section on filebuf::attach to point to ../ext/howto.html,
+         added link to ../21/strings/howto.html
+         in sec-stringstream, changed &lt;link&gt;-tags to have content
+         (so that these links work),
+         replace "user-space" by "global namespace"
+         add note about gcc 3.0 and shadow-headers                     
+         add section about ostream::form and istream::scan
+         sec-vector-at: remove hint to modify headers
+         fix spelling error in sec-stringstream
+       </revremark>
+      </revision>
+      <revision>
+       <revnumber>0.9.4</revnumber>
+       <date>Mon Nov  5 17:01:04 2001</date>
+       <authorinitials>fnatter</authorinitials>
+       <revremark>
+         rewrite section 1.1.3 because of gnu.gcc.help-post by
+         Juergen Heinzl
+       </revremark>
       </revision>
     </revhistory>
     <legalnotice><title>Legal Notice</title>
       <para>
-               This document can be distributed under the FDL
-               (<ulink url = "http://www.gnu.org">www.gnu.org</ulink>)
+       This document can be distributed under the FDL
+       (<ulink url = "http://www.gnu.org">www.gnu.org</ulink>)
       </para>
     </legalnotice>
     
@@ -216,12 +226,31 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
       <para>
        If some compilers complain about <command>using
          std::string;</command>, and if the "hack" for gtk-- mentioned above
-       does not work, then it might be a good idea to define a macro
-       <symbol>NS_STD</symbol>, which is defined to either "" or "std"
-       based on an autoconf-test. Then you should be able to use
-       <command>NS_STD::string</command>, which will evaluate to
-       <command>::string</command> ("string in the global namespace") on
-       systems that do not put string in std::.  (This is untested)
+       does not work, then I see two solutions:
+       
+       <itemizedlist>
+         <listitem><para>
+             Define <command>std::</command> as a macro if the compiler
+             doesn't know about <command>std::</command>.
+             <programlisting>
+               #ifdef OLD_COMPILER
+               #define std
+               #endif
+             </programlisting>
+             (thanks to Juergen Heinzl who posted this solution on
+             gnu.gcc.help)
+           </para></listitem>
+         
+         <listitem><para>
+             Define a macro <symbol>NS_STD</symbol>, which is defined to
+             either "" or "std"
+             based on an autoconf-test. Then you should be able to use
+             <command>NS_STD::string</command>, which will evaluate to
+             <command>::string</command> ("string in the global namespace") on
+             systems that do not put string in std::.  (This is untested)
+           </para></listitem>
+       </itemizedlist>
+         
       </para>
     </section>
     
@@ -288,7 +317,7 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
        As you can see, this currently lacks an example of a project
        which uses libstdc++-symbols in headers in a back-portable way
        (except for Gtk--: see the <link linkend="sec-gtkmm-hack"
-       endterm="sec-gtkmm-hack.title">section on the gtkmm-hack</link>).
+         endterm="sec-gtkmm-hack.title">section on the gtkmm-hack</link>).
       </para>
     </section>         
   </section> <!-- end of namespace-section -->
@@ -330,19 +359,19 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
        </funcsynopsisinfo>
        <funcprototype>
          <funcdef>
-                 <function>basic_filebuf&lt;...&gt;::basic_filebuf&lt;...&gt;
-                       </function>
-               </funcdef>
-               <paramdef>__c_file_type* <parameter>file</parameter></paramdef>
+           <function>basic_filebuf&lt;...&gt;::basic_filebuf&lt;...&gt;
+           </function>
+         </funcdef>
+         <paramdef>__c_file_type* <parameter>file</parameter></paramdef>
          <paramdef>ios_base::open_mode <parameter>mode</parameter></paramdef>
          <paramdef>int <parameter>size</parameter></paramdef>
        </funcprototype>
       </funcsynopsis>
       but the the signature of this constructor has changed often, and
       it might change again. For the current state of this, check
-         <ulink url="../ext/howto.html">the howto for extensions</ulink>.
-       </para>
-       <para>
+      <ulink url="../ext/howto.html">the howto for extensions</ulink>.
+    </para>
+    <para>
       For a portable solution (among systems which use
       filedescriptors), you need to implement a subclass of
       <command>std::streambuf</command> (or
@@ -359,8 +388,8 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
        source-code</ulink>.
     </para>
     <para>
-    The old C++-headers (iostream.h etc.) are available, but gcc generates
-    a warning that you are using deprecated headers.
+      The old C++-headers (iostream.h etc.) are available, but gcc generates
+      a warning that you are using deprecated headers.
     </para>
 
     <section id = "sec-cheaders" label = "4.1">
@@ -372,13 +401,13 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
        omitting the extension (.h). For example, instead of using
        <filename class="headerfile">&lt;math.h&gt;</filename>, you
        should use <filename class =
-       "headerfile">&lt;cmath&gt;</filename>. In some cases this has
+         "headerfile">&lt;cmath&gt;</filename>. In some cases this has
        the advantage that the C++-header is more standardized than
        the C-header (i.e. <filename
-       class="headerfile">&lt;ctime&gt;</filename> (almost)
+         class="headerfile">&lt;ctime&gt;</filename> (almost)
        corresponds to either <filename class =
-       "headerfile">&lt;time.h&gt;</filename> or <filename class =
-       "headerfile">&lt;sys/time.h&gt;</filename>).
+         "headerfile">&lt;time.h&gt;</filename> or <filename class =
+         "headerfile">&lt;sys/time.h&gt;</filename>).
 
        The standard specifies that if you include the C-style header
        (<filename class = "headerfile">&lt;math.h&gt;</filename> in
@@ -386,7 +415,7 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
        namespace and in namespace <command>std::</command> (but
        libstdc++ does not yet have fully compliant headers) On the
        other hand, if you include only the new header (i.e. <filename
-       class = "headerfile">&lt;cmath&gt;</filename>), the symbols
+         class = "headerfile">&lt;cmath&gt;</filename>), the symbols
        will only be defined in namespace <command>std::</command>
        (and macros will be converted to inline-functions).
       </para>
@@ -394,8 +423,8 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
        For more information on this, and for information on how the
        GNU C++ implementation might reuse ("shadow") the C
        library-functions, have a look at <ulink
-       url="http://www.cantrip.org/cheaders.html">
-       www.cantrip.org</ulink>.
+         url="http://www.cantrip.org/cheaders.html">
+         www.cantrip.org</ulink>.
       </para>
     </section>
     
@@ -408,8 +437,8 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
        In earlier versions of the standard,
        <filename class="headerfile">&lt;fstream.h&gt;</filename>,
        <filename class="headerfile">&lt;ostream.h&gt;</filename>
-        and <filename class="headerfile">&lt;istream.h&gt;</filename>
-         used to define
+       and <filename class="headerfile">&lt;istream.h&gt;</filename>
+       used to define
        <command>cout</command>, <command>cin</command> and so on. Because
        of the templatized iostreams in libstdc++-v3, you need to include
        <filename class = "headerfile">&lt;iostream&gt;</filename>
@@ -452,8 +481,8 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
       <filename class="headerfile">&lt;ctype.h&gt;</filename>
       -functionality as macros (isspace, isalpha etc.). Libstdc++-v3
       "shadows" these macros as described in the <link
-      linkend="sec-cheaders" endterm="sec-cheaders.title">section about
-      c-headers</link>.
+       linkend="sec-cheaders" endterm="sec-cheaders.title">section about
+       c-headers</link>.
     </para>
     <para>
       Older implementations of libstdc++ (g++-2 for egcs 1.x and g++-3
@@ -478,7 +507,7 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
       Another solution which would fix g++ is to tell the user to modify a
       header-file so that g++-2 (egcs 1.x) and g++-3 (gcc 2.95.x) define a
       macro which tells <filename
-                                 class="headerfile">&lt;ctype.h&gt;</filename> to define functions
+       class="headerfile">&lt;ctype.h&gt;</filename> to define functions
       instead of macros:
       <programlisting>
        // This keeps isalnum, et al from being propagated as macros.
@@ -492,7 +521,7 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
     <para>
       Another problem arises if you put a <command>using namespace
        std;</command> declaration at the top, and include <filename class
-                                                                    = "headerfile">&lt;ctype.h&gt;</filename>. This will result in
+       = "headerfile">&lt;ctype.h&gt;</filename>. This will result in
       ambiguities between the definitions in the global namespace
       (<filename class = "headerfile">&lt;ctype.h&gt;</filename>) and the
       definitions in namespace <command>std::</command>
@@ -506,8 +535,8 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
        --enable-cshadow-headers is currently broken. As a result, shadow
        headers are not being searched....
       </quote>
-                       This is now outdated, but gcc 3.0 still does not have fully
-                       compliant "shadow headers".
+      This is now outdated, but gcc 3.0 still does not have fully
+      compliant "shadow headers".
     </para>
   </section>
 
@@ -593,12 +622,12 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
   </section>
 
   <section id="sec-scan-form" label="11">
-         <title>GNU Extensions ostream::form and istream::scan</title>
-               <para>
-               These   are not supported any more - use
-               <link   linkend="sec-stringstream" endterm="sec-stringstream.title">
-               stringstreams</link> instead.   
-               </para>
+    <title>GNU Extensions ostream::form and istream::scan</title>
+    <para>
+      These    are not supported any more - use
+      <link    linkend="sec-stringstream" endterm="sec-stringstream.title">
+       stringstreams</link> instead.   
+    </para>
   </section>
 
   <section id="sec-stringstream" label="12">
@@ -606,10 +635,10 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
     <para>
       Libstdc++-v3 provides the new
       <command>i/ostringstream</command>-classes, (<filename
-      class="headerfile">&lt;sstream&gt;</filename>), but for compatibility
+       class="headerfile">&lt;sstream&gt;</filename>), but for compatibility
       with older implementations you still have to use
       <command>i/ostrstream</command> (<filename
-      class="headerfile">&lt;strstream&gt;</filename>):
+       class="headerfile">&lt;strstream&gt;</filename>):
       <programlisting>
        #ifdef HAVE_SSTREAM
        #include &lt;sstream&gt;
@@ -689,19 +718,19 @@ o make this work: <link linkend="sec-gtkmm-hack" endterm="sec-gtkmm-hack.title"/
        void fromString(const string&amp; input, X&amp; any)
        {
        #ifdef HAVE_SSTREAM
-         std::istringstream iss(input);
+       std::istringstream iss(input);
        #else
-         std::istrstream iss(input.c_str());
+       std::istrstream iss(input.c_str());
        #endif
-         X temp;
-         iss >> temp;
-         if (iss.fail())
-           throw runtime_error(..)
-         any = temp;
+       X temp;
+       iss >> temp;
+       if (iss.fail())
+       throw runtime_error(..)
+       any = temp;
        }
       </programlisting>
-         Another example of using stringstreams is in <ulink
-         url="../21_strings/howto.html">this howto</ulink>.
+      Another example of using stringstreams is in <ulink
+       url="../21_strings/howto.html">this howto</ulink>.
     </para>
     <para>
       I have read the Josuttis book on Standard C++, so some information