summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobody <nobody@localhost>2000-09-09 10:20:25 +0000
committernobody <nobody@localhost>2000-09-09 10:20:25 +0000
commita340c71456a820985b425580218b1daeb9960f2f (patch)
treea4eb2510b15d3714f211e5fa963c4ca64fc8f7b8
parentce5e16b6ae28e66369cdcfc6c416db64fd0298ba (diff)
downloadboost-a340c71456a820985b425580218b1daeb9960f2f.tar.gz
This commit was manufactured by cvs2svn to create branch
'boost-graph-library'. [SVN r7698]
-rw-r--r--.gitmodules48
-rw-r--r--c++boost.gifbin0 -> 8819 bytes
-rw-r--r--index.htm148
-rw-r--r--libraries.htm88
m---------libs/array0
-rw-r--r--libs/compiler_status.htm57
m---------libs/compose0
m---------libs/config0
m---------libs/conversion0
-rw-r--r--libs/cs-linux2.html99
-rw-r--r--libs/cs-win32.html150
m---------libs/functional0
m---------libs/integer0
m---------libs/iterator0
m---------libs/random0
m---------libs/rational0
-rw-r--r--libs/regrtest.py212
m---------libs/smart_ptr0
m---------libs/timer0
m---------libs/type_traits0
m---------libs/utility0
-rw-r--r--more/count_bdy.htm1166
-rw-r--r--more/faq.htm118
-rw-r--r--more/feature_model_diagrams.htm103
-rw-r--r--more/formal_review_process.htm94
-rw-r--r--more/header.htm102
-rw-r--r--more/imp_vars.htm201
-rw-r--r--more/index.htm62
-rw-r--r--more/lib_guide.htm268
-rw-r--r--more/submission_process.htm169
-rw-r--r--more/use_other_libs.htm52
-rw-r--r--people.htm103
-rw-r--r--people/aleksey_gurtovoy.htm50
-rw-r--r--people/aleksey_gurtovoy.jpgbin0 -> 12871 bytes
-rw-r--r--people/aleksey_gurtovoy_small.jpgbin0 -> 2698 bytes
-rw-r--r--people/beman_dawes.html36
-rw-r--r--people/beman_dawes.jpgbin0 -> 24875 bytes
-rw-r--r--people/beman_dawes_small.jpgbin0 -> 3207 bytes
-rw-r--r--people/darin_adler.htm48
-rw-r--r--people/darin_adler.jpgbin0 -> 30416 bytes
-rw-r--r--people/darin_adler_small.jpgbin0 -> 8651 bytes
-rw-r--r--people/dave_abrahams.htm29
-rw-r--r--people/dave_abrahams.jpgbin0 -> 30926 bytes
-rw-r--r--people/dave_abrahams_small.jpgbin0 -> 2383 bytes
-rw-r--r--people/dietmar_kuehl.htm42
-rw-r--r--people/dietmar_kuehl.jpgbin0 -> 30510 bytes
-rw-r--r--people/dietmar_kuehl_small.jpgbin0 -> 3349 bytes
-rw-r--r--people/ed_brey.htm60
-rw-r--r--people/ed_brey.jpgbin0 -> 13913 bytes
-rw-r--r--people/ed_brey_small.jpgbin0 -> 3082 bytes
-rw-r--r--people/gavin_collings.htm31
-rw-r--r--people/gavin_collings.jpgbin0 -> 16739 bytes
-rw-r--r--people/gavin_collings_small.jpgbin0 -> 2748 bytes
-rw-r--r--people/greg_colvin.htm28
-rw-r--r--people/greg_colvin.jpgbin0 -> 25661 bytes
-rw-r--r--people/greg_colvin_small.jpgbin0 -> 2603 bytes
-rw-r--r--people/howard_hinnant.htm34
-rw-r--r--people/howard_hinnant.jpgbin0 -> 19817 bytes
-rw-r--r--people/howard_hinnant_small.jpgbin0 -> 2531 bytes
-rw-r--r--people/jens_maurer.htm39
-rw-r--r--people/jens_maurer.jpgbin0 -> 15698 bytes
-rw-r--r--people/jens_maurer_small.jpgbin0 -> 2371 bytes
-rw-r--r--people/jeremy_siek.htm36
-rw-r--r--people/jeremy_siek.jpgbin0 -> 12867 bytes
-rw-r--r--people/jeremy_siek_small.jpgbin0 -> 1993 bytes
-rw-r--r--people/john_maddock.htm41
-rw-r--r--people/john_maddock.jpgbin0 -> 14611 bytes
-rw-r--r--people/john_maddock_small.jpgbin0 -> 1614 bytes
-rw-r--r--people/kevlin_henney.htm49
-rw-r--r--people/kevlin_henney.jpgbin0 -> 18107 bytes
-rw-r--r--people/kevlin_henney_small.jpgbin0 -> 2816 bytes
-rw-r--r--people/mark_rodgers.htm36
-rw-r--r--people/mark_rodgers.jpgbin0 -> 23035 bytes
-rw-r--r--people/mark_rodgers_small.jpgbin0 -> 2345 bytes
-rw-r--r--people/nicolai_josuttis.jpgbin0 -> 19499 bytes
-rw-r--r--people/nicolai_josuttis_small.jpgbin0 -> 2580 bytes
-rw-r--r--people/paul_moore.htm38
-rw-r--r--people/paul_moore.jpgbin0 -> 12023 bytes
-rw-r--r--people/paul_moore_small.jpgbin0 -> 2318 bytes
-rw-r--r--people/sean_corfield.jpgbin0 -> 27187 bytes
-rw-r--r--people/sean_corfield_small.jpgbin0 -> 3032 bytes
-rw-r--r--people/valentin_bonnard.htm27
-rw-r--r--people/valentin_bonnard.jpgbin0 -> 10547 bytes
-rw-r--r--people/valentin_bonnard_small.jpgbin0 -> 2237 bytes
84 files changed, 3864 insertions, 0 deletions
diff --git a/.gitmodules b/.gitmodules
index d72a772305..9385b51e5b 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -2,3 +2,51 @@
path = libs/smart_ptr
url = ../smart_ptr.git
fetchRecurseSubmodules = on-demand
+[submodule "random"]
+ path = libs/random
+ url = ../random.git
+ fetchRecurseSubmodules = on-demand
+[submodule "timer"]
+ path = libs/timer
+ url = ../timer.git
+ fetchRecurseSubmodules = on-demand
+[submodule "utility"]
+ path = libs/utility
+ url = ../utility.git
+ fetchRecurseSubmodules = on-demand
+[submodule "functional"]
+ path = libs/functional
+ url = ../functional.git
+ fetchRecurseSubmodules = on-demand
+[submodule "integer"]
+ path = libs/integer
+ url = ../integer.git
+ fetchRecurseSubmodules = on-demand
+[submodule "compose"]
+ path = libs/compose
+ url = ../compose.git
+ fetchRecurseSubmodules = on-demand
+[submodule "conversion"]
+ path = libs/conversion
+ url = ../conversion.git
+ fetchRecurseSubmodules = on-demand
+[submodule "rational"]
+ path = libs/rational
+ url = ../rational.git
+ fetchRecurseSubmodules = on-demand
+[submodule "config"]
+ path = libs/config
+ url = ../config.git
+ fetchRecurseSubmodules = on-demand
+[submodule "array"]
+ path = libs/array
+ url = ../array.git
+ fetchRecurseSubmodules = on-demand
+[submodule "iterator"]
+ path = libs/iterator
+ url = ../iterator.git
+ fetchRecurseSubmodules = on-demand
+[submodule "type_traits"]
+ path = libs/type_traits
+ url = ../type_traits.git
+ fetchRecurseSubmodules = on-demand
diff --git a/c++boost.gif b/c++boost.gif
new file mode 100644
index 0000000000..58be431a3f
--- /dev/null
+++ b/c++boost.gif
Binary files differ
diff --git a/index.htm b/index.htm
new file mode 100644
index 0000000000..229b50e9d0
--- /dev/null
+++ b/index.htm
@@ -0,0 +1,148 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Boost C++ Libraries</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<h1>Welcome to Boost.org!</h1>
+<p>The Boost web site provides free, peer-reviewed, C++ <a href="libraries.htm">libraries</a>.
+The emphasis is on portable libraries which work well with the C++ Standard
+Library.</p>
+<p><a href="more/lib_guide.htm">Library Requirements and Guidelines</a> and <a href="more/submission_process.htm">Library
+Submission Process</a> provides basic information for library authors.</p>
+<p>If you are interested in who writes the libraries and maintains the web site,
+check out <a href="people.htm">people</a>.</p>
+<p>The <a href="more/faq.htm">FAQ</a> answers questions we hope someone will
+bother to ask.</p>
+<p>You may <a href="file:///c:/boost/site/boost_all.zip">download all of boost</a>
+as a single ZIP file. Click here for <a href="libraries.htm#Download">download</a>
+details.&nbsp; The source code is also publicly accessible in a CVS <a href="http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/?cvsroot=boost">repository</a>.</p>
+<p>See <a href="libs/compiler_status.htm">Compiler Status</a> to find out what
+library works with which compiler.</p>
+<h2><a name="Mailing List">Membership</a></h2>
+<p>If you are interested in Boost.org, please join our mailing list for
+discussions of both technical and site-related issues, and to participate in
+library reviews. Discussions can be received via email in summary or in full, or
+viewed online via a web browser. We use the <a href="http://www.egroups.com">eGroups</a>
+list hosting service. Subscribe or unsubscribe by sending email to <a href="mailto:boost-subscribe@egroups.com">boost-subscribe@egroups.com</a>&nbsp;
+or <a href="mailto:boost-unsubscribe@egroups.com">boost-unsubscribe@egroups.com</a>
+respectively, or go to the eGroups <a href="http://www.egroups.com/list/boost">list
+manager home page</a>.&nbsp; Dave Abrahams and Beman Dawes are the list
+moderators.</p>
+<p>For mailing list members only, preliminary libraries under discussion are
+available from the eGroups <a href="http://www.egroups.com/files/boost/">Files
+section</a> (formerly called the &quot;vault&quot;).</p>
+<p>Beman Dawes is the Boost <a name="webmaster">webmaster</a>; email him at <a href="mailto:beman@boost.org">beman@boost.org</a>
+with any concerns you don't want to just post to the mailing list.</p>
+<h2>Latest News</h2>
+<p>August 3, 2000 - Version 1.17.0</p>
+<ul>
+ <li><a href="libs/array/array.htm">Array Library</a> added - An STL compliant
+ container wrapper for arrays of constant size from Nicolai Josuttis.</li>
+ <li><a href="libs/array_traits/index.html">array traits</a> header renamed
+ array_traits.hpp (was array.hpp).</li>
+ <li><a href="libs/random/index.html">Random Number Library</a>: more minor
+ changes to support more compilers.</li>
+ <li><a href="libs/smart_ptr/index.htm">Smart Pointer Library</a>: performance
+ reducing exception-specifications removed.</li>
+ <li><a href="libs/utility/index.htm">Utility Library</a>: compiler and test
+ program fixes for call_traits, compressed_pair, and type_traits.</li>
+ <li><a href="libs/utility/index.htm">Utility Library</a>: updated <a href="boost/cast.hpp">cast.hpp</a>
+ to clear compiler warning messages..</li>
+ <li>Linux <a href="libs/compiler_status.htm">Compiler Status</a> added.</li>
+ <li>Boost source code now lives in a publicly accessible Concurrent Versions
+ System (CVS) <a href="http://cvs.sourceforge.net/cgi-bin/cvsweb.cgi/?cvsroot=boost">repository</a>.</li>
+</ul>
+<p>July 5, 2000 - Version 1.16.1</p>
+<ul>
+ <li><a href="libs/integer/index.htm">Integer</a> library: fixed <a href="boost/cstdint.hpp">cstdint.hpp</a>
+ bug, added <a href="libs/integer/cstdint_test.cpp">cstdint_test.cpp</a>,
+ updated <a href="libs/integer/cstdint.htm">docs</a>.</li>
+ <li><a href="libs/random/index.html">Random Number Library</a>: minor fixes to
+ <a href="boost/random.hpp">random.hpp</a> and <a href="libs/random/random_test.cpp">random_test.cpp</a>
+ to support more compilers.</li>
+ <li><a href="libs/utility/index.htm">Utility Library</a>: updated <a href="boost/cast.hpp">cast.hpp</a>
+ with more Microsoft compiler workarounds.</li>
+ <li><a href="libs/utility/index.htm">Utility Library</a>: updated <a href="libs/utility/call_traits.htm">call_traits
+ docs</a>, added <a href="libs/utility/call_traits_test.cpp">call_traits_test.cpp</a></li>
+ <li><a href="libs/utility/index.htm">Utility Library</a>: cleanup and bug
+ fixes for <a href="boost/operators.hpp">operators.hpp</a> and <a href="libs/utility/operators_test.cpp">operators_test.cpp</a></li>
+</ul>
+<p>June 28, 2000 - Version 1.16.0:</p>
+<ul>
+ <li>Added <a href="libs/functional/index.html">Functional Library</a> -
+ Enhanced function object adaptors from Mark Rodgers.</li>
+ <li>Added missing <a href="libs/random/index.html">Random Number Library</a>
+ files.</li>
+ <li>Updated <a href="libs/utility/operators.htm">operators docs</a> and <a href="boost/operators.hpp">operators.hpp</a>.</li>
+ <li>New <a href="boost/iterator.hpp">iterator.hpp</a> header.</li>
+ <li>Minor <a href="boost/rational.hpp">rational.hpp</a>, <a href="libs/rational/rational_example.cpp">rational_example.cpp</a>,
+ and <a href="libs/integer/integer_traits_test.cpp">integer_traits_test.cpp</a>
+ changes to support more compilers.</li>
+ <li>Revised <a href="boost/cast.hpp">cast.hpp</a>; removed implicit_cast, plus
+ fixes for broken compilers.</li>
+ <li>Minor <a href="boost/smart_ptr.hpp">smart_ptr.hpp</a> workaround for some
+ GCC builds</li>
+ <li>Several <a href="boost/config.hpp">config.hpp</a> changes for Microsoft,
+ Intel, and other compilers.</li>
+ <li>Added <a href="libs/config/index.htm">Configuration Header</a> page and
+ test program.</li>
+ <li>Added Experimental <a href="libs/compiler_status.htm">Compiler Status</a>
+ page showing what library works with which compilers.</li>
+</ul>
+<p>June 21, 2000 - Version 1.15.1 - Fixes to <a href="boost/cast.hpp">cast.hpp</a>
+and <a href="libs/utility/operators.htm">operators</a> fix. Minor additions to <a href="boost/config.hpp">config.hpp</a>
+for Microsoft compilers. The 1.15.0 operators changes seem to have introduced
+incompatibilities.&nbsp; We are working on fixing them, and have started to
+build a regression test to prevent similar future problems.</p>
+<p>June 17, 2000 - Version 1.15.0 - <a href="libs/random/index.html">Random
+Number Library</a> from Jens Maurer added. Updated utility library <a href="libs/utility/operators.htm">operators</a>
+eliminates code bloat. Minor additions to <a href="boost/config.hpp">config.hpp</a>
+and <a href="boost/cast.hpp">cast.hpp</a> for Microsoft compilers.</p>
+<p>May 29, 2000 - Version 1.14.3 - Minor additions to <a href="boost/config.hpp">config.hpp</a>
+for Borland compilers. Minor fix to <a href="libs/utility/type_traits.htm">type_traits</a>
+example. Minor web site fixes. <a href="more/formal_review_process.htm">Library
+Formal Review Process</a> page added.</p>
+<p>May 9, 2000 - Version 1.14.2 - No libraries updated. <a href="more/lib_guide.htm">Library
+Requirements and Guidelines</a> expanded, <a href="more/submission_process.htm">Library
+Submission Process</a> added.</p>
+<p>March 17, 2000 - Version 1.14.1 - Minor fix to <a href="boost/rational.hpp">rational.hpp</a>.
+Minor documentation changes to the <a href="libs/smart_ptr/index.htm">Smart
+Pointer</a> Library and <a href="libs/utility/call_traits.htm">call_traits</a>, <a href="libs/utility/compressed_pair.htm">compressed_pair</a>,
+and <a href="libs/utility/type_traits.htm">type_traits</a>. Updated <a href="more/lib_guide.htm">Library
+Guidelines</a> and <a href="people.htm">People</a> page.</p>
+<p>March 5, 2000 - Version 1.14.0 -&nbsp; <a href="libs/integer/index.htm">Integer
+Library</a> status upgraded after removing bin_bun.hpp. The
+&quot;Experimental&quot; library category has been removed; the boost
+files/vault now serves the purpose. Minor fix to <a href="boost/smart_ptr.hpp">smart_ptr.hpp</a>
+line endings.</p>
+<p>February 29, 2000 - Version 1.13.0 - Adds <a href="libs/utility/index.htm">Utility
+Library</a>&nbsp; <a href="libs/utility/type_traits.htm">type_traits</a>, <a href="libs/utility/call_traits.htm">call_traits</a>,
+and <a href="libs/utility/compressed_pair.htm">compressed_pair</a> headers from
+John Maddock, Steve Cleary and Howard Hinnant.</p>
+<p>February 23, 2000 - Version 1.12.0 - Adds a <a href="libs/integer/integer_traits.html">integer_traits</a>
+header from Jens Maurer to the <a href="libs/integer/index.htm">Integer Library</a>.</p>
+<p>February 21, 2000 - Version 1.11.2 - <a href="libs/smart_ptr/smarttests.htm">Smart
+pointer timings</a> added (thanks to Gavin Collings). Minor fix <a href="libs/min_rand/index.htm">min_rand</a>
+sample program. Minor fixes to <a href="boost/config.hpp">config.hpp</a>.</p>
+<hr>
+<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B %Y" startspan -->03 August 2000<!--webbot bot="Timestamp" endspan i-checksum="31242" --></p>
+
+</body>
+
+</html>
diff --git a/libraries.htm b/libraries.htm
new file mode 100644
index 0000000000..185f10ba98
--- /dev/null
+++ b/libraries.htm
@@ -0,0 +1,88 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Libraries</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta name="Microsoft Border" content="none, default">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<h1>Boost Libraries</h1>
+<ul>
+ <li><a href="libs/array/index.htm">array</a> - STL compliant container wrapper
+ for arrays of constant size from Nicolai Josuttis.</li>
+ <li><a href="libs/compose/index.htm">compose</a> - functional composition
+ adapters for the STL from Nicolai Josuttis.</li>
+ <li><a href="libs/dir_it/index.htm">dir_it</a> - a set of file system
+ directory level iterators from Dietmar Kühl.</li>
+ <li><a href="libs/functional/index.html">functional</a> - enhanced function
+ object adaptors from Mark Rodgers.</li>
+ <li><a href="libs/integer/index.htm">integer</a> - headers for dealing with
+ integral types.</li>
+ <li><a href="libs/random/index.html">random</a> - a complete system for random
+ number generation from Jens Maurer.</li>
+ <li><a href="libs/rational/index.html">rational</a> - a rational number class
+ from Paul Moore.</li>
+ <li><a href="libs/smart_ptr/index.htm">smart_ptr</a> - four smart pointer
+ classes from Greg Colvin and Beman Dawes.</li>
+ <li><a href="libs/timer/index.htm">timer</a> - event timer, progress timer,
+ and progress display classes from Beman Dawes</li>
+ <li><a href="libs/utility/index.htm">utility</a> - various utility classes and
+ functions:
+ <ul>
+ <li><a href="libs/utility/call_traits.htm">call_traits</a> Defines types
+ for passing parameters from John Maddock, Howard Hinnant, et al.</li>
+ <li><a href="libs/utility/compressed_pair.htm">compressed_pair</a> Empty
+ member optimization from John Maddock, Howard Hinnant, et al.</li>
+ <li><a href="libs/utility/operators.htm">operators</a> Templates ease
+ arithmetic classes and iterators from Dave Abrahams and Jeremy Siek</li>
+ <li><a href="libs/utility/type_traits.htm">type_traits</a> Templates for
+ fundamental properties of types from John Maddock, Steve Cleary, et al.</li>
+ <li><a href="libs/utility/utility.htm">utility</a> Class <b>noncopyable</b>
+ plus <b>next()</b> and <b>prior()</b> template functions from Dave
+ Abrahams</li>
+ </ul>
+ </li>
+</ul>
+<p>See <a href="libs/compiler_status.htm">Compiler Status</a> to find out what
+library works with which compiler.</p>
+<h2>Obsolete Libraries</h2>
+<ul>
+ <li><a href="libs/min_rand/index.htm">min_rand</a> - a random number generator
+ class from Beman Dawes. Replaced by <a href="libs/random/index.html">random</a>.</li>
+</ul>
+<h2>Beta Libraries</h2>
+<ul>
+ <li><a href="libs/array_traits/index.html">array_traits</a> - tools to treat
+ built-in arrays more like STL containers from Dietmar Kühl. Also see <a href="libs/array/index.htm">array</a>.</li>
+ <li><a href="libs/utility/cast.htm">casts</a> - cast templates improve clarity
+ and safety; utility library contribution from Dave Abrahams and Kevlin
+ Henney.</li>
+ <li><a href="libs/pri_queue/index.html">heaps</a> - a heap of priority queues
+ from Dietmar Kühl.</li>
+</ul>
+<h2><a name="Download">Download</a></h2>
+<p>You may <a href="boost_all.zip">download all of boost</a> as a single ZIP
+file.&nbsp; As many boost headers include other boost headers, installing one at
+at time is painful. This is a first try at making installation easier.&nbsp;</p>
+<p>If you don't already have a ZIP file decoder, download one from the <a href="http://www.info-zip.org/pub/infozip/">Info-ZIP</a>
+web site.</p>
+<hr>
+<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan -->03 Aug 2000<!--webbot bot="Timestamp" endspan i-checksum="14750" --></p>
+
+</body>
+
+</html>
diff --git a/libs/array b/libs/array
new file mode 160000
+Subproject 2a876cf76e77735d28fdd6ad29227f8ea632a7c
diff --git a/libs/compiler_status.htm b/libs/compiler_status.htm
new file mode 100644
index 0000000000..744ae72ca2
--- /dev/null
+++ b/libs/compiler_status.htm
@@ -0,0 +1,57 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Compiler Status Report</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<h1>Compiler Status</h1>
+<p>Will all boost libraries work with your compiler?&nbsp; Unfortunately, the
+answer is &quot;it depends.&quot;.</p>
+<p>Boost libraries rely on modern C++ features such as templates and the C++
+Standard Library.&nbsp; But even today, years after the adoption of the C++
+Standard, some compilers still don't support important features like partial
+template specialization.</p>
+<p>Boost library authors often expend a great deal of effort trying to work
+around compiler deficiencies.&nbsp; Nevertheless, some libraries will not
+compile at all with certain compilers or may have crippled functionality.&nbsp;
+Even if the current release of a compiler supports a boost library, older
+version of the compiler may not work properly.</p>
+<h2>Compiler Status Tables</h2>
+<ul>
+ <li><a href="cs-linux2.html">Linux/x86</a> Contributed by Jens Maurer</li>
+ <li><a href="cs-win32.html">Windows NT / Windows 2000</a> Contributed by Beman
+ Dawes</li>
+</ul>
+<p>Boost releases are run through a regression test which automatically
+generates the above tables. Unless otherwise indicated, the C++ Standard Library
+implementation is the one shipped with the compiler.</p>
+<p><b>Warning:</b> These tables are not a good indication of a particular
+compiler's compliance with the C++ Standard.&nbsp; The boost libraries often
+contain workarounds which mask compiler deficiencies.</p>
+<p><b>Warning: </b>The regression test is under development and cannot yet be
+relied upon.&nbsp; The current version is a compile only test; the programs are
+not executed or otherwise tested.&nbsp; Even the compilation results may be
+spurious; many negative results stem from problems with the immature test suite
+rather that with the library or compiler.&nbsp; Furthermore, some library tests
+have not yet been included.</p>
+<hr>
+<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B %Y" startspan -->03 August 2000<!--webbot bot="Timestamp" endspan i-checksum="31242" --></p>
+
+</body>
+
+</html>
diff --git a/libs/compose b/libs/compose
new file mode 160000
+Subproject 37a6c2a159861851baafadee4da3e6eab1648bb
diff --git a/libs/config b/libs/config
new file mode 160000
+Subproject 1036984586fdca215ca5963fe9bc2f2a8b18f12
diff --git a/libs/conversion b/libs/conversion
new file mode 160000
+Subproject 66834ebe526b30900ea54c18559ef49b1879e40
diff --git a/libs/cs-linux2.html b/libs/cs-linux2.html
new file mode 100644
index 0000000000..85fe77262e
--- /dev/null
+++ b/libs/cs-linux2.html
@@ -0,0 +1,99 @@
+<html>
+<head>
+<title>
+Compiler Status: Linux/x86
+</title>
+</head><body bgcolor="#FFFFFF" text="#000000">
+<h1><img border="0" src="../c++boost.gif" width="277" height="86"></h1>
+<h1>Compiler Status: Linux/x86</h1>
+<p><b>Run Date:</b> 04 Sep 2000 GMT</p>
+<p>
+<table border="1" cellspacing="0" cellpadding="5">
+<tr>
+<td>Program</td>
+<td>GNU<br>GCC<br>2.95.2</td>
+<td>GNU<br>GCC<br>2.95.2<br>STLport<br>4.0 beta 8</td>
+</tr>
+<tr>
+<td><a href="config/config_test.cpp">config/config_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="array/array1.cpp">array/array1.cpp</a></td>
+<td>no</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="functional/function_test.cpp">functional/function_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="integer/cstdint_test.cpp">integer/cstdint_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="integer/integer_test.cpp">integer/integer_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="integer/integer_traits_test.cpp">integer/integer_traits_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="rational/rational_example.cpp">rational/rational_example.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="random/random_test.cpp">random/random_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="random/random_demo.cpp">random/random_demo.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="smart_ptr/smart_ptr_test.cpp">smart_ptr/smart_ptr_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="utility/call_traits_test.cpp">utility/call_traits_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="utility/cast_test.cpp">utility/cast_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="utility/compressed_pair_test.cpp">utility/compressed_pair_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="utility/iterators_test.cpp">utility/iterators_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="utility/operators_test.cpp">utility/operators_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="utility/type_traits_test.cpp">utility/type_traits_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/libs/cs-win32.html b/libs/cs-win32.html
new file mode 100644
index 0000000000..9ece1bd96a
--- /dev/null
+++ b/libs/cs-win32.html
@@ -0,0 +1,150 @@
+<html>
+<head>
+<title>
+Compiler Status: Windows NT / Windows 2000
+</title>
+</head><body bgcolor="#FFFFFF" text="#000000">
+<h1><img border="0" src="../c++boost.gif" width="277" height="86"></h1>
+<h1>Compiler Status: Windows NT / Windows 2000</h1>
+<p><b>Run Date:</b> 03 Aug 2000 GMT</p>
+<p>
+<table border="1" cellspacing="0" cellpadding="5">
+<tr>
+<td>Program</td>
+<td>Borland<br>BCC<br>5.4</td>
+<td>Borland<br>BCC<br>5.5</td>
+<td>Metrowerks<br>CodeWarrior<br>5.3</td>
+<td>Microsoft<br>VC++<br>6.0 SP3</td>
+<td>Microsoft<br>VC++<br>6.0 SP3<br>STLport<br>3.2.1</td>
+</tr>
+<tr>
+<td><a href="config/config_test.cpp">config/config_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="array/array1.cpp">array/array1.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>no</td>
+<td>no</td>
+</tr>
+<tr>
+<td><a href="functional/function_test.cpp">functional/function_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>no</td>
+<td>yes</td>
+<td>no</td>
+</tr>
+<tr>
+<td><a href="integer/cstdint_test.cpp">integer/cstdint_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="integer/integer_test.cpp">integer/integer_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>no</td>
+</tr>
+<tr>
+<td><a href="integer/integer_traits_test.cpp">integer/integer_traits_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="rational/rational_example.cpp">rational/rational_example.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="random/random_test.cpp">random/random_test.cpp</a></td>
+<td>no</td>
+<td>yes</td>
+<td>no</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="random/random_demo.cpp">random/random_demo.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>no</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="smart_ptr/smart_ptr_test.cpp">smart_ptr/smart_ptr_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="utility/call_traits_test.cpp">utility/call_traits_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>no</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="utility/cast_test.cpp">utility/cast_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="utility/compressed_pair_test.cpp">utility/compressed_pair_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>no</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="utility/iterators_test.cpp">utility/iterators_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="utility/operators_test.cpp">utility/operators_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+<tr>
+<td><a href="utility/type_traits_test.cpp">utility/type_traits_test.cpp</a></td>
+<td>yes</td>
+<td>yes</td>
+<td>no</td>
+<td>yes</td>
+<td>yes</td>
+</tr>
+</table>
+</body>
+</html>
diff --git a/libs/functional b/libs/functional
new file mode 160000
+Subproject 2fea553297e9f4fb8657ae88672652ae821dc69
diff --git a/libs/integer b/libs/integer
new file mode 160000
+Subproject 0101ecf6efce51c6bc917af2d43999ebd54d8bd
diff --git a/libs/iterator b/libs/iterator
new file mode 160000
+Subproject 65ad89dd5845bac8108092a75327e6ca7b29157
diff --git a/libs/random b/libs/random
new file mode 160000
+Subproject 2ec49b3e5a2c262d2f8af051d003b44bb2f7c08
diff --git a/libs/rational b/libs/rational
new file mode 160000
+Subproject 815153068b62c5839c8fb07ae475ad060b16f6a
diff --git a/libs/regrtest.py b/libs/regrtest.py
new file mode 100644
index 0000000000..d4b1286c91
--- /dev/null
+++ b/libs/regrtest.py
@@ -0,0 +1,212 @@
+#!/usr/bin/python
+
+# boost compilation regression test
+
+# Usage: regrtest [*|compiler] [*|library/program]
+#
+# Default: regrtest * *
+#
+# Compilers: bcc54 = Borland 5.4
+# bcc55 = Borland 5.5
+# cw = Metrowerks CodeWarrior
+# gcc = GNU GCC/egcs
+# vc = Microsoft Visual C++
+# vcstlport = Microsoft Visual C++ with STLport library
+#
+# Examples: regrtest
+# regrtest
+# regrtest gcc
+# regrtest * smart_ptr/smart_ptr_test.cpp
+# regrtest gcc smart_ptr/smart_ptr_test.cpp
+#
+# Note: use the following command line syntax if output is to be redirected:
+# python regrtest.py [*|compiler] [*|library/program] >log 2>&1
+
+# Revision history:
+# 21 Jun 00 Redesign to allow specifying compiler and program (Beman Dawes)
+# 18 Jun 00 Initial Version (Beman Dawes)
+
+# The Metrowerks and Microsoft compilers require various environment variables be set.
+# See mwcc -help
+# See http://msdn.microsoft.com/library/devprods/vs6/visualc/vccore/_core_building_on_the_command_line.3a_.overview.htm
+# Others:
+# See bcb4.hlp. Don't bother with bcb4tools.hlp; it has a bad link to the command line options
+
+import sys
+import os
+import time
+
+#------------------------------------------------------------------------------#
+
+def invoke( desc, command ):
+
+ print " ", desc
+ f.write( "<td>" )
+ print " ", command #script debugging aid
+ sys.stdout.flush()
+ rs=os.system( command )
+ print " return status: ", rs
+ if rs==0:
+ f.write( "yes" )
+ else:
+ f.write( "no" )
+ f.write( "</td>\n" )
+
+#------------------------------------------------------------------------------#
+
+def compile( program ):
+
+ fullpath= path + "/libs/" + program
+
+ print
+ print "*****", program, "*****"
+
+ f.write( "<tr>\n" )
+ f.write( "<td><a href=\"" + program + "\">" + program + "</a></td>\n" )
+
+ if sys.platform == "linux2":
+ if compiler_arg == "*" or compiler_arg == "gcc":
+ invoke( "GCC 2.95.2", 'g++ -ftemplate-depth-30 -I' + path + ' ' + fullpath )
+ if compiler_arg == "*" or compiler_arg == "gcc-stlport":
+ invoke( "GCC 2.95.2 STLport 4.0b8", 'g++ -V 2.95.2-stlport -ftemplate-depth-30 -I' + path + ' ' + fullpath )
+# if compiler_arg == "*" or compiler_arg == "gcc-exp":
+# invoke( "GCC pre-2.96 experimental", '/opt/exp/gcc/bin/g++ -ftemplate-depth-30 -I' + path + ' ' + fullpath )
+ else:
+ if compiler_arg=="*" or compiler_arg=="bcc54":
+ bcc54_path=os.environ["BOOST_BCC54_PATH"]
+ invoke( "Borland C++ 5.4", "\"" + bcc54_path + "/bcc32\" -I" + path + " -j10 -q " + fullpath )
+ if compiler_arg=="*" or compiler_arg=="bcc55":
+ bcc55_path=os.environ["BOOST_BCC55_PATH"]
+ invoke( "Borland C++ 5.5", "\"" + bcc55_path + "/bcc32\" -I" + path + " -j10 -q " + fullpath )
+
+ # GCC 2.95.2 is looping on some tests, so only invoke if asked for by name
+ #if compiler_arg=="*" or compiler_arg=="gcc":
+ if compiler_arg=="gcc":
+ # TODO: fix the absolute STLport paths
+ invoke( "GNU GCC", "c++ -ftemplate-depth-30 -I" + path + " -IC:/stl/STLport-4.0b8/stlport " + fullpath + " c:/stl/STLport-4.0b8/lib/libstlport_gcc.a" )
+
+ if compiler_arg=="*" or compiler_arg=="cw":
+ invoke( "Metrowerks CodeWarrior", "mwcc -maxerrors 10 -I- -I" + path + " " + fullpath )
+
+#John Maddock says use /Zm400 switch; it increases compiler memory
+ if compiler_arg=="*" or compiler_arg=="vc":
+ invoke( "VC++ with MS library", 'cl /nologo /Zm400 /MDd /W3 /GR /GX /Zi /Od /GZ /I "' + path + '" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" ' + fullpath )
+ if compiler_arg=="*" or compiler_arg=="vcstlport":
+ stl=os.environ["BOOST_STLPORT_PATH"]
+ invoke( "VC++ with STLport library", 'cl /nologo /Zm400 /MDd /W3 /GR /GX /Zi /Od /GZ /I "' + stl + '" /I "' + path + '" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_CONSOLE" ' + fullpath )
+
+
+ f.write( "</tr>\n" )
+
+#------------------------------------------------------------------------------#
+
+def library():
+
+ print
+ print "***** Boost Library *****"
+
+ f.write( "<tr>\n" )
+ f.write( "<td>Boost library build</td>\n" )
+
+ #if compiler_arg=="*" or compiler_arg=="bcc32":
+ #if compiler_arg=="*" or compiler_arg=="gcc":
+ #if compiler_arg=="*" or compiler_arg=="cw":
+
+ #if compiler_arg=="*" or compiler_arg=="vc":
+ # command='cl /nologo /MDd /W3 /GR /GX /Zi /Od /GZ /I "' + path + '" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB /c"'
+ # command=command + " " + path + "/libs/" + ...
+ # invoke( "VC++ with MS library", command )
+
+# invoke( "MS Lib with MS library", 'lib /nologo /out:"boost_vc.lib" boost_timer_vc.obj boost_prg_timer_vc.obj boost_prg_display_vc.obj' )
+
+ #if compiler_arg=="*" or compiler_arg=="vcstlport":
+
+ f.write( "</tr>\n" )
+
+#---------------------------------- main ------------------------------------#
+
+# set up environment variables
+
+path=os.environ["BOOST_PATH"]
+
+compiler_arg="*"
+if len(sys.argv)>1:
+ compiler_arg=sys.argv[1]
+
+program_arg="*"
+if len(sys.argv)>2:
+ program_arg=sys.argv[2]
+
+if sys.platform == "linux2":
+ platform = "Linux/x86"
+elif sys.platform == "win32":
+ platform = "Windows"
+ if os.name == "nt":
+ platform = platform + " NT / Windows 2000"
+else:
+ print "**** Error: unknown platform ****"
+ sys.exit(1)
+
+f=open( "cs-" + sys.platform + ".html", "w" )
+
+f.write( "<html>\n<head>\n<title>\nCompiler Status: " + platform + "\n</title>\n</head>" )
+f.write( "<body bgcolor=\"#FFFFFF\" text=\"#000000\">\n" )
+f.write( "<h1><img border=\"0\" src=\"../c++boost.gif\" width=\"277\" height=\"86\"></h1>\n" )
+f.write( "<h1>Compiler Status: " + platform + "</h1>\n" )
+f.write( "<p><b>Run Date:</b> " + time.strftime("%d %b %Y GMT", time.gmtime(time.time())) + "</p>\n" )
+f.write( "<p>\n" )
+f.write( "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n" )
+f.write( "<tr>\n" )
+f.write( "<td>Program</td>\n" )
+
+if sys.platform == "linux2":
+ if compiler_arg == "*" or compiler_arg == "gcc":
+ f.write( "<td>GNU<br>GCC<br>2.95.2</td>\n" )
+ if compiler_arg == "*" or compiler_arg == "gcc-stlport":
+ f.write( "<td>GNU<br>GCC<br>2.95.2<br>STLport<br>4.0 beta 8</td>\n" )
+# if compiler_arg == "*" or compiler_arg == "gcc-exp":
+# f.write( "<td>GNU<br>GCC<br>pre-2.96 experimental</td>\n" )
+else:
+ if compiler_arg=="*" or compiler_arg=="bcc54":
+ f.write( "<td>Borland<br>BCC<br>5.4</td>\n" )
+ if compiler_arg=="*" or compiler_arg=="bcc55":
+ f.write( "<td>Borland<br>BCC<br>5.5</td>\n" )
+
+ # GCC 2.95.2 is looping on some tests, so only invoke if asked for by name
+ #if compiler_arg=="*" or compiler_arg=="gcc":
+ if compiler_arg=="gcc":
+ f.write( "<td>GNU<br>GCC<br>2.95.2<br>STLport<br>4.0 beta 8</td>\n" )
+ if compiler_arg=="*" or compiler_arg=="cw":
+ f.write( "<td>Metrowerks<br>CodeWarrior<br>5.3</td>\n" )
+ if compiler_arg=="*" or compiler_arg=="vc":
+ f.write( "<td>Microsoft<br>VC++<br>6.0 SP3</td>\n" )
+ if compiler_arg=="*" or compiler_arg=="vcstlport":
+ f.write( "<td>Microsoft<br>VC++<br>6.0 SP3<br>STLport<br>3.2.1</td>\n" )
+
+f.write( "</tr>\n" )
+
+if program_arg=="*":
+ compile( "config/config_test.cpp" )
+ compile( "array/array1.cpp" )
+# compile( "compose/compose1.cpp" )
+ compile( "functional/function_test.cpp" )
+ compile( "integer/cstdint_test.cpp" )
+ compile( "integer/integer_test.cpp" )
+ compile( "integer/integer_traits_test.cpp" )
+ compile( "rational/rational_example.cpp" )
+ compile( "random/random_test.cpp" )
+ compile( "random/random_demo.cpp" )
+ compile( "smart_ptr/smart_ptr_test.cpp" )
+# compile( "utility/algo_opt_examples.cpp" )
+ compile( "utility/call_traits_test.cpp" )
+ compile( "utility/cast_test.cpp" )
+ compile( "utility/compressed_pair_test.cpp" )
+ compile( "utility/iterators_test.cpp" )
+ compile( "utility/operators_test.cpp" )
+ compile( "utility/type_traits_test.cpp" )
+else:
+ compile( program_arg )
+
+f.write( "</table>\n</body>\n</html>\n" )
+
+# end
diff --git a/libs/smart_ptr b/libs/smart_ptr
-Subproject c47f309991b83794f0f037a320dc223939d65b0
+Subproject cfece50d17566a12660f1c1f0037698163419ac
diff --git a/libs/timer b/libs/timer
new file mode 160000
+Subproject afa8614e39f476fe14c8b8ddb57ff52c29b41a1
diff --git a/libs/type_traits b/libs/type_traits
new file mode 160000
+Subproject f729d1b593836bfd1470bb24bd5d2be14988df3
diff --git a/libs/utility b/libs/utility
new file mode 160000
+Subproject be4b817c83a879c2ae1493bde837b0e78e59112
diff --git a/more/count_bdy.htm b/more/count_bdy.htm
new file mode 100644
index 0000000000..0dd6f0bc79
--- /dev/null
+++ b/more/count_bdy.htm
@@ -0,0 +1,1166 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
+
+<HTML>
+
+<HEAD>
+
+ <TITLE>Counted Body Techniques</TITLE>
+
+ <META NAME="GENERATOR" CONTENT="Microsoft FrontPage 4.0">
+
+ <META NAME="Author" CONTENT="Kevlin Henney">
+
+ <META NAME="KeyWords" CONTENT="C++, Reference Counting, Advanced Techniques, Smart Pointers, Patterns">
+
+</HEAD>
+
+<BODY bgcolor="#FFFFFF" text="#000000">
+
+
+
+<H1 ALIGN=CENTER><I><FONT SIZE=+4>Counted Body Techniques</FONT></I></H1>
+
+
+
+<CENTER><P><B><FONT SIZE=+1><a href="../people/kevlin_henney.htm">Kevlin Henney</a><BR>
+
+</FONT>(<A HREF="mailto:kevlin@acm.org">kevlin@acm.org</A>, <a HREF="mailto:khenney@qatraining.com">khenney@qatraining.com</a>)</B></P></CENTER>
+
+
+
+<UL>
+
+<P>Reference counting techniques? Nothing new, you might think. Every good
+
+C++ text that takes you to an intermediate or advanced level will introduce
+
+the concept. It has been explored with such thoroughness in the past that
+
+you might be forgiven for thinking that everything that can be said has
+
+been said. Well, let's start from first principles and see if we can unearth
+
+something new....</P>
+
+</UL>
+
+
+
+
+<HR WIDTH="100%">
+<H2>And then there were none...</H2>
+
+
+<UL>
+
+<P>The principle behind reference counting is to keep a running usage count
+
+of an object so that when it falls to zero we know the object is unused.
+
+This is normally used to simplify the memory management for dynamically
+
+allocated objects: keep a count of the number of references held to that
+
+object and, on zero, delete the object.</P>
+
+
+
+<P>How to keep a track of the number of users of an object? Well, normal
+
+pointers are quite dumb, and so an extra level of indirection is required
+
+to manage the count. This is essentially the P<FONT SIZE=-1>ROXY</FONT>
+
+pattern described in <I>Design Patterns</I> [Gamma, Helm, Johnson &amp;
+
+Vlissides, Addison-Wesley, <FONT SIZE=-1>ISBN </FONT>0-201-63361-2]. The
+
+intent is given as</P>
+
+
+
+<UL>
+
+<P><I>Provide a surrogate or placeholder for another object to control
+
+access to it.</I></P>
+
+</UL>
+
+
+
+<P>Coplien [<I>Advanced C++ Programming Styles and Idioms</I>, Addison-Wesley,
+
+<FONT SIZE=-1>ISBN </FONT>0-201-56365-7] defines a set of idioms related
+
+to this essential separation of a handle and a body part. The <I>Taligent
+
+Guide to Designing Programs </I>[Addison-Wesley, <FONT SIZE=-1>ISBN </FONT>0-201-40888-0]
+
+identifies a number of specific categories for proxies (aka surrogates).
+
+Broadly speaking they fall into two general categories:</P>
+
+
+
+<UL>
+
+<LI><I>Hidden</I>: The handle is the object of interest, hiding the body
+
+itself. The functionality of the handle is obtained by delegation to the
+
+body, and the user of the handle is unaware of the body. Reference counted
+
+strings offer a transparent optimisation. The body is shared between copies
+
+of a string until such a time as a change is needed, at which point a copy
+
+is made. Such a C<FONT SIZE=-1>OPY</FONT> <FONT SIZE=-1>ON</FONT> W<FONT SIZE=-1>RITE</FONT>
+
+pattern (a specialisation of L<FONT SIZE=-1>AZY</FONT> E<FONT SIZE=-1>VALUATION</FONT>)
+
+requires the use of a hidden reference counted body.</LI>
+
+
+
+<LI><I>Explicit</I>: Here the body is of interest and the handle merely
+
+provides intelligence for its access and housekeeping. In C++ this is often
+
+implemented as the S<FONT SIZE=-1>MART</FONT> P<FONT SIZE=-1>OINTER</FONT>
+
+idiom. One such application is that of reference counted smart pointers
+
+that collaborate to keep a count of an object, deleting it when the count
+
+falls to zero.</LI>
+
+</UL>
+
+</UL>
+
+
+
+
+<HR WIDTH="100%">
+<H2>Attached vs detached</H2>
+
+
+<UL>
+
+<P>For reference counted smart pointers there are two places the count
+
+can exist, resulting in two different patterns, both outlined in <I>Software
+
+Patterns</I> [Coplien, SIGS, <FONT SIZE=-1>ISBN </FONT>0-884842-50-X]:</P>
+
+
+
+<UL>
+
+<LI>C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> or A<FONT SIZE=-1>TTACHED</FONT>
+
+C<FONT SIZE=-1>OUNTED</FONT> H<FONT SIZE=-1>ANDLE</FONT>/B<FONT SIZE=-1>ODY</FONT>
+
+places the count within the object being counted. The benefits are that
+
+countability is a part of the object being counted, and that reference
+
+counting does not require an additional object. The drawbacks are clearly
+
+that this is intrusive, and that the space for the reference count is wasted
+
+when the object is not heap based. Therefore the reference counting ties
+
+you to a particular implementation and style of use.</LI>
+
+
+
+<LI>D<FONT SIZE=-1>ETACHED</FONT> C<FONT SIZE=-1>OUNTED</FONT> H<FONT SIZE=-1>ANDLE</FONT>/B<FONT SIZE=-1>ODY</FONT>
+
+places the count outside the object being counted, such that they are handled
+
+together. The clear benefit of this is that this technique is completely
+
+unintrusive, with all of the intelligence and support apparatus in the
+
+smart pointer, and therefore can be used on classes created independently
+
+of the reference counted pointer. The main disadvantage is that frequent
+
+use of this can lead to a proliferation of small objects, i.e. the counter,
+
+being created on the heap.</LI>
+
+</UL>
+
+
+
+<P>Even with this simple analysis, it seems that the D<FONT SIZE=-1>ETACHED</FONT>
+
+C<FONT SIZE=-1>OUNTED</FONT> H<FONT SIZE=-1>ANDLE</FONT>/B<FONT SIZE=-1>ODY</FONT>
+
+approach is ahead. Indeed, with the increasing use of templates this is
+
+often the favourite, and is the principle behind the common - but not standard
+
+- <TT><FONT SIZE=+1>counted_ptr</FONT></TT>.
+<I>[The Boost name is <a href="../libs/smart_ptr/shared_ptr.htm"><TT><FONT SIZE=+1>shared_ptr</FONT></TT></a>
+
+rather than <TT><FONT SIZE=+1>counted_ptr</FONT></TT>.]</I></P>
+
+
+
+<P>A common implementation of C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT>
+
+is to provide the counting mechanism in a base class that the counted type
+
+is derived from. Either that, or the reference counting mechanism is provided
+
+anew for each class that needs it. Both of these approaches are unsatisfactory
+
+because they are quite closed, coupling a class into a particular framework.
+
+Added to this the non-cohesiveness of having the count lying dormant in
+
+a non-counted object, and you get the feeling that excepting its use in
+
+widespread object models such as COM and CORBA the C<FONT SIZE=-1>OUNTED</FONT>
+
+B<FONT SIZE=-1>ODY</FONT> approach is perhaps only of use in specialised
+
+situations.</P>
+
+</UL>
+
+
+
+<HR WIDTH="100%">
+<H2>A requirements based approach</H2>
+
+
+<UL>
+
+<P>It is the question of openness that convinced me to revisit the problems
+
+with the C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> idiom.
+
+Yes, there is a certain degree of intrusion expected when using this idiom,
+
+but is there anyway to minimise this and decouple the choice of counting
+
+mechanism from the smart pointer type used?</P>
+
+
+
+<P>In recent years the most instructive body of code and specification
+
+for constructing open general purpose components has been the Stepanov
+
+and Lee's STL (Standard Template Library), now part of the C++ standard
+
+library. The STL approach makes extensive use of compile time polymorphism
+
+based on well defined operational requirements for types. For instance,
+
+each container, contained and iterator type is defined by the operations
+
+that should be performable on an object of that type, often with annotations
+
+describing additional constraints. Compile time polymorphism, as its name
+
+suggests, resolves functions at compile time based on function name and
+
+argument usage, i.e. overloading. This is less intrusive, although less
+
+easily diagnosed if incorrect, than runtime poymorphism that is based on
+
+types, names and function signatures.</P>
+
+
+
+<P>This requirements based approach can be applied to reference counting.
+
+The operations we need for a type to be <I>Countable</I> are loosely:</P>
+
+
+
+<UL>
+
+<LI>An <TT><FONT SIZE=+1>acquire</FONT></TT> operation that registers interest
+
+in a <I>Countable </I>object.</LI>
+
+
+
+<LI>A <TT><FONT SIZE=+1>release</FONT></TT> operation unregisters interest
+
+in a <I>Countable </I>object.</LI>
+
+
+
+<LI>An <TT><FONT SIZE=+1>acquired</FONT></TT> query that returns whether
+
+or not a <I>Countable </I>object is currently acquired.</LI>
+
+
+
+<LI>A <TT><FONT SIZE=+1>dispose</FONT></TT> operation that is responsible
+
+for disposing of an object that is no longer acquired.</LI>
+
+</UL>
+
+
+
+<P>Note that the count is deduced as a part of the abstract state of this
+
+type, and is not mentioned or defined in any other way. The openness of
+
+this approach derives in part from the use of global functions, meaning
+
+that no particular member functions are implied; a perfect way to wrap
+
+up an existing counted body class without modifying the class itself. The
+
+other aspect to the openness comes from a more precise specification of
+
+the operations.</P>
+
+
+
+<P>For a type to be <I>Countable</I> it must satisfy the following requirements,
+
+where <TT><FONT SIZE=+1>ptr</FONT></TT> is a non-null pointer to a single
+
+object (i.e. not an array) of the type, and <I><TT><FONT SIZE=+1>#function</FONT></TT></I>
+
+indicates number of calls to <TT><FONT SIZE=+1><I>function(</I>ptr<I>)</I></FONT></TT>:</P>
+
+
+
+<CENTER><TABLE BORDER=1 CELLSPACING=2 CELLPADDING=2 >
+
+<TR>
+
+<TD><I>Expression</I></TD>
+
+
+
+<TD><I>Return type</I></TD>
+
+
+
+<TD><I>Semantics and notes</I></TD>
+
+</TR>
+
+
+
+<TR>
+
+<TD><TT><FONT SIZE=+1>acquire(ptr)</FONT></TT></TD>
+
+
+
+<TD>no requirement</TD>
+
+
+
+<TD><I>post</I>: <TT><FONT SIZE=+1>acquired(ptr)</FONT></TT></TD>
+
+</TR>
+
+
+
+<TR>
+
+<TD><TT><FONT SIZE=+1>release(ptr)</FONT></TT></TD>
+
+
+
+<TD>no requirement</TD>
+
+
+
+<TD><I>pre</I>: <TT><FONT SIZE=+1>acquired(ptr)<BR>
+
+</FONT></TT><I>post</I>: <TT><FONT SIZE=+1>acquired(ptr) == #acquire -
+
+#release</FONT></TT></TD>
+
+</TR>
+
+
+
+<TR>
+
+<TD><TT><FONT SIZE=+1>acquired(ptr)</FONT></TT></TD>
+
+
+
+<TD>convertible to <TT><FONT SIZE=+1>bool</FONT></TT></TD>
+
+
+
+<TD><I>return</I>: <TT><FONT SIZE=+1>#acquire &gt; #release</FONT></TT></TD>
+
+</TR>
+
+
+
+<TR>
+
+<TD><TT><FONT SIZE=+1>dispose(ptr, ptr)</FONT></TT></TD>
+
+
+
+<TD>no requirement</TD>
+
+
+
+<TD><I>pre</I>: <TT><FONT SIZE=+1>!acquired(ptr)<BR>
+
+</FONT></TT><I>post</I>: <TT><FONT SIZE=+1>*ptr</FONT></TT> no longer usable</TD>
+
+</TR>
+
+</TABLE></CENTER>
+
+
+
+<P>Note that the two arguments to <TT><FONT SIZE=+1>dispose</FONT></TT>
+
+are to support selection of the appropriate type safe version of the function
+
+to be called. In the general case the intent is that the first argument
+
+determines the type to be deleted, and would typically be templated, while
+
+the second selects which template to use, e.g. by conforming to a specific
+
+base class.</P>
+
+
+
+<P>In addition the following requirements must also be satisfied, where
+
+<TT><FONT SIZE=+1>null</FONT></TT> is a null pointer to the <I>Countable</I>
+
+type:</P>
+
+
+
+<CENTER><TABLE BORDER=1 >
+
+<TR>
+
+<TD><I>Expression</I></TD>
+
+
+
+<TD><I>Return type</I></TD>
+
+
+
+<TD><I>Semantics and notes</I></TD>
+
+</TR>
+
+
+
+<TR>
+
+<TD><TT><FONT SIZE=+1>acquire(null)</FONT></TT></TD>
+
+
+
+<TD>no requirement</TD>
+
+
+
+<TD><I>action</I>: none</TD>
+
+</TR>
+
+
+
+<TR>
+
+<TD><TT><FONT SIZE=+1>release(null)</FONT></TT></TD>
+
+
+
+<TD>no requirement</TD>
+
+
+
+<TD><I>action</I>: none</TD>
+
+</TR>
+
+
+
+<TR>
+
+<TD><TT><FONT SIZE=+1>acquired(null)</FONT></TT></TD>
+
+
+
+<TD>convertible to <TT><FONT SIZE=+1>bool</FONT></TT></TD>
+
+
+
+<TD><I>return</I>: <TT><FONT SIZE=+1>false</FONT></TT></TD>
+
+</TR>
+
+
+
+<TR>
+
+<TD><TT><FONT SIZE=+1>dispose(null, null)</FONT></TT></TD>
+
+
+
+<TD>no requirement</TD>
+
+
+
+<TD><I>action</I>: none</TD>
+
+</TR>
+
+</TABLE></CENTER>
+
+
+
+<P>Note that there are no requirements on these functions in terms of exceptions
+
+thrown or not thrown, except that if exceptions are thrown the functions
+
+themselves should be exception safe.</P>
+
+</UL>
+
+
+
+<HR WIDTH="100%">
+<H2>Getting smart</H2>
+
+
+<UL>
+
+<P>Given the <I>Countable</I> requirements for a type, it is possible to
+
+define a generic smart pointer type that uses them for reference counting:</P>
+
+
+
+<UL>
+<PRE><TT>template&lt;typename countable_type&gt;
+class countable_ptr
+{
+public: // construction and destruction
+
+ explicit countable_ptr(countable_type *);
+ countable_ptr(const countable_ptr &amp;);
+ ~countable_ptr();
+
+public: // access
+
+ countable_type *operator-&gt;() const;
+ countable_type &amp;operator*() const;
+ countable_type *get() const;
+
+public: // modification
+
+ countable_ptr &amp;clear();
+ countable_ptr &amp;assign(countable_type *);
+ countable_ptr &amp;assign(const countable_ptr &amp;);
+ countable_ptr &amp;operator=(const countable_ptr &amp;);
+
+private: // representation
+
+ countable_type *body;
+
+};
+</TT></PRE>
+
+</UL>
+
+
+
+<P>The interface to this class has been kept intentionally simple, e.g.
+
+member templates and <TT><FONT SIZE=+1>throw</FONT></TT> specs have been
+
+omitted, for exposition. The majority of the functions are quite simple
+
+in implementation, relying very much on the <TT><FONT SIZE=+1>assign</FONT></TT>
+
+member as a keystone function:</P>
+
+
+
+<UL>
+
+<PRE><TT>template&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt;::countable_ptr(countable_type *initial)
+ : body(initial)
+{
+ acquire(body);
+}
+
+template&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt;::countable_ptr(const countable_ptr &amp;other)
+ : body(other.body)
+{
+ acquire(body);
+}
+
+template&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt;::~countable_ptr()
+{
+ clear();
+}
+
+template&lt;typename countable_type&gt;
+countable_type *countable_ptr&lt;countable_type&gt;::operator-&gt;() const
+{
+ return body;
+}
+
+template&lt;typename countable_type&gt;
+countable_type &amp;countable_ptr&lt;countable_type&gt;::operator*() const
+{
+ return *body;
+}
+
+template&lt;typename countable_type&gt;
+countable_type *countable_ptr&lt;countable_type&gt;::get() const
+{
+ return body;
+}
+
+template&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt; &amp;countable_ptr&lt;countable_type&gt;::clear()
+{
+ return assign(0);
+}
+
+template&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt; &amp;countable_ptr&lt;countable_type&gt;::assign(countable_type *rhs)
+{
+ // set to rhs (uses Copy Before Release idiom which is self assignment safe)
+ acquire(rhs);
+ countable_type *old_body = body;
+ body = rhs;
+
+ // tidy up
+ release(old_body);
+ if(!acquired(old_body))
+ {
+ dispose(old_body, old_body);
+ }
+
+ return *this;
+}
+
+template&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt; &amp;countable_ptr&lt;countable_type&gt;::assign(const countable_ptr &amp;rhs)
+{
+ return assign(rhs.body);
+}
+
+template&lt;typename countable_type&gt;
+countable_ptr&lt;countable_type&gt; &amp;countable_ptr&lt;countable_type&gt;::operator=(const countable_ptr &amp;rhs)
+{
+ return assign(rhs);
+}
+</TT></PRE>
+
+</UL>
+
+</UL>
+
+
+
+<HR WIDTH="100%">
+<H2>Public accountability</H2>
+
+
+<UL>
+
+<P>Conformance to the requirements means that a type can be used with <TT><FONT SIZE=+1>countable_ptr</FONT></TT>.
+
+Here is an implementation mix-in class (<I>mix-imp</I>) that confers countability
+
+on its derived classes through member functions. This class can be used
+
+as a class adaptor:</P>
+
+
+
+<UL>
+
+<PRE><TT>class countability
+{
+public: // manipulation
+
+ void acquire() const;
+ void release() const;
+ size_t acquired() const;
+
+protected: // construction and destruction
+
+ countability();
+ ~countability();
+
+private: // representation
+
+ mutable size_t count;
+
+private: // prevention
+
+ countability(const countability &amp;);
+ countability &amp;operator=(const countability &amp;);
+
+};
+</TT></PRE>
+
+</UL>
+
+
+
+<P>Notice that the manipulation functions are <TT><FONT SIZE=+1>const</FONT></TT>
+
+and that the <TT><FONT SIZE=+1>count</FONT></TT> member itself is <TT><FONT SIZE=+1>mutable</FONT></TT>.
+
+This is because countability is not a part of an object's abstract state:
+
+memory management does not depend on the <TT><FONT SIZE=+1>const</FONT></TT>-ness
+
+or otherwise of an object. I won't include the definitions of the member
+
+functions here as you can probably guess them: increment, decrement and
+
+return the current count, respectively for the manipulation functions.
+
+In a multithreaded environment you should ensure that such read and write
+
+operations are atomic.</P>
+
+
+
+<P>So how do we make this class <I>Countable</I>? A simple set of forwarding
+
+functions does the job:</P>
+
+
+
+<UL>
+
+<PRE><TT>void acquire(const countability *ptr)
+{
+ if(ptr)
+ {
+ ptr-&gt;acquire();
+ }
+}
+
+void release(const countability *ptr)
+{
+ if(ptr)
+ {
+ ptr-&gt;release();
+ }
+}
+
+size_t acquired(const countability *ptr)
+{
+ return ptr ? ptr-&gt;acquired() : 0;
+}
+
+template&lt;class countability_derived&gt;
+void dispose(const countability_derived *ptr, const countability *)
+{
+ delete ptr;
+}
+</TT></PRE>
+
+</UL>
+
+
+
+<P>Any type that now derives from <TT><FONT SIZE=+1>countability</FONT></TT>
+
+may now be used with <TT><FONT SIZE=+1>countable_ptr</FONT></TT>:</P>
+
+
+
+<UL>
+
+<PRE><TT>class example : public countability
+{
+ ...
+};
+
+void simple()
+{
+ countable_ptr&lt;example&gt; ptr(new example);
+ countable_ptr&lt;example&gt; qtr(ptr);
+ ptr.clear(); // set ptr to point to null
+} // allocated object deleted when qtr destructs
+</TT></PRE>
+</UL>
+</UL>
+
+
+
+
+<HR WIDTH="100%">
+<H2>Runtime mixin</H2>
+
+
+<UL>
+
+<P>The challenge is to apply C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT>
+
+in a non-intrusive fashion, such that there is no overhead when an object
+
+is not counted. What we would like to do is confer this capability on a
+
+per object rather than on a per class basis. Effectively we are after <I>Countability
+
+</I>on any object, i.e. anything pointed to by a <TT><FONT SIZE=+1>void
+
+*</FONT></TT>! It goes without saying that <TT><FONT SIZE=+1>void</FONT></TT>
+
+is perhaps the least committed of any type.</P>
+
+
+
+<P>The forces to resolve on this are quite interesting, to say the least.
+
+Interesting, but not insurmountable. Given that the class of a runtime
+
+object cannot change dynamically in any well defined manner, and the layout
+
+of the object must be fixed, we have to find a new place and time to add
+
+the counting state. The fact that this must be added only on heap creation
+
+suggests the following solution:</P>
+
+
+
+<UL>
+
+<PRE><TT>struct countable_new;
+extern const countable_new countable;
+
+void *operator new(size_t, const countable_new &amp;);
+void operator delete(void *, const countable_new &amp;);</TT></PRE>
+</UL>
+
+
+
+<P>We have overloaded <TT><FONT SIZE=+1>operator new</FONT></TT> with a
+
+dummy argument to distinguish it from the regular global <TT><FONT SIZE=+1>operator
+
+new</FONT></TT>. This is comparable to the use of the <TT><FONT SIZE=+1>std::nothrow_t</FONT></TT>
+
+type and <TT><FONT SIZE=+1>std::nothrow</FONT></TT> object in the standard
+
+library. The placement <TT><FONT SIZE=+1>operator delete</FONT></TT> is
+
+there to perform any tidy up in the event of failed construction. Note
+
+that this is not yet supported on all that many compilers.</P>
+
+
+
+<P>The result of a <TT><FONT SIZE=+1>new</FONT></TT> expression using <TT><FONT SIZE=+1>countable</FONT></TT>
+
+is an object allocated on the heap that has a header block that holds the
+
+count, i.e. we have extended the object by prefixing it. We can provide
+
+a couple of features in an anonymous namespace (not shown) in the implementation
+
+file for for supporting the count and its access from a raw pointer:</P>
+
+
+
+<UL>
+
+<PRE><TT>struct count
+{
+ size_t value;
+};
+
+count *header(const void *ptr)
+{
+ return const_cast&lt;count *&gt;(static_cast&lt;const count *&gt;(ptr) - 1);
+}
+</TT></PRE>
+
+</UL>
+
+
+
+<P>An important constraint to observe here is the alignment of <TT><FONT SIZE=+1>count</FONT></TT>
+
+should be such that it is suitably aligned for any type. For the definition
+
+shown this will be the case on almost all platforms. However, you may need
+
+to add a padding member for those that don't, e.g. using an anonymous <TT><FONT SIZE=+1>union</FONT></TT>
+
+to coalign <TT><FONT SIZE=+1>count</FONT></TT> and the most aligned type.
+
+Unfortunately, there is no portable way of specifying this such that the
+
+minimum alignment is also observed - this is a common problem when specifying
+
+your own allocators that do not directly use the results of either <TT><FONT SIZE=+1>new</FONT></TT>
+
+or <TT><FONT SIZE=+1>malloc</FONT></TT>.</P>
+
+
+
+<P>Again, note that the count is not considered to be a part of the logical
+
+state of the object, and hence the conversion from <TT><FONT SIZE=+1>const</FONT></TT>
+
+to non-<TT><FONT SIZE=+1>const</FONT></TT> - <TT><FONT SIZE=+1>count</FONT></TT>
+
+is in effect a <TT><FONT SIZE=+1>mutable</FONT></TT> type.</P>
+
+
+
+<P>The allocator functions themselves are fairly straightforward:</P>
+
+
+
+<UL>
+
+<PRE><TT>void *operator new(size_t size, const countable_new &amp;)
+{
+ count *allocated = static_cast&lt;count *&gt;(::operator new(sizeof(count) + size));
+ *allocated = count(); // initialise the header
+ return allocated + 1; // adjust result to point to the body
+}
+
+void operator delete(void *ptr, const countable_new &amp;)
+{
+ ::operator delete(header(ptr));
+}
+</TT></PRE>
+
+</UL>
+
+
+
+<P>Given a correctly allocated header, we now need the <I>Countable </I>functions
+
+to operate on <TT><FONT SIZE=+1>const void *</FONT></TT> to complete the
+
+picture:</P>
+
+
+
+<UL>
+
+<PRE><TT>void acquire(const void *ptr)
+{
+ if(ptr)
+ {
+ ++header(ptr)-&gt;value;
+ }
+}
+
+void release(const void *ptr)
+{
+ if(ptr)
+ {
+ --header(ptr)-&gt;value;
+ }
+}
+
+size_t acquired(const void *ptr)
+{
+ return ptr ? header(ptr)-&gt;value : 0;
+}
+
+template&lt;typename countable_type&gt;
+void dispose(const countable_type *ptr, const void *)
+{
+ ptr-&gt;~countable_type();
+ operator delete(const_cast&lt;countable_type *&gt;(ptr), countable);
+}
+</TT></PRE>
+
+</UL>
+
+
+
+<P>The most complex of these is the <TT><FONT SIZE=+1>dispose</FONT></TT>
+
+function that must ensure that the correct type is destructed and also
+
+that the memory is collected from the correct offset. It uses the value
+
+and type of first argument to perform this correctly, and the second argument
+
+merely acts as a strategy selector, i.e. the use of <TT><FONT SIZE=+1>const
+
+void *</FONT></TT> distinguishes it from the earlier dispose shown for
+
+<TT><FONT SIZE=+1>const countability *</FONT></TT>.</P>
+
+</UL>
+
+
+
+
+<HR WIDTH="100%">
+<H2>Getting smarter</H2>
+
+
+
+<UL>
+
+<P>Now that we have a way of adding countability at creation for objects
+
+of any type, what extra is needed to make this work with the <TT><FONT SIZE=+1>countable_ptr</FONT></TT>
+
+we defined earlier? Good news: nothing!</P>
+
+
+
+<UL>
+
+<PRE><TT>class example
+{
+ ...
+};
+
+void simple()
+{
+ countable_ptr&lt;example&gt; ptr(new(countable) example);
+ countable_ptr&lt;example&gt; qtr(ptr);
+ ptr.clear(); // set ptr to point to null
+} // allocated object deleted when qtr destructs
+</TT></PRE>
+
+</UL>
+
+
+
+<P>The <TT><FONT SIZE=+1>new(countable)</FONT></TT> expression defines
+
+a different policy for allocation and deallocation and, in common with
+
+other allocators, any attempt to mix your allocation policies, e.g. call
+
+<TT><FONT SIZE=+1>delete</FONT></TT> on an object allocated with <TT><FONT SIZE=+1>new(countable)</FONT></TT>,
+
+results in undefined behaviour. This is similar to what happens when you
+
+mix <TT><FONT SIZE=+1>new[]</FONT></TT> with <TT><FONT SIZE=+1>delete</FONT></TT>
+
+or <TT><FONT SIZE=+1>malloc</FONT></TT> with <TT><FONT SIZE=+1>delete</FONT></TT>.
+
+The whole point of <I>Countable </I>conformance is that <I>Countable </I>objects
+
+are used with <TT><FONT SIZE=+1>countable_ptr</FONT></TT>, and this ensures
+
+the correct use.</P>
+
+
+
+<P>However, accidents will happen, and inevitably you may forget to allocate
+
+using <TT><FONT SIZE=+1>new(countable)</FONT></TT> and instead use <TT><FONT SIZE=+1>new</FONT></TT>.
+
+This error and others can be detected in most cases by extending the code
+
+shown here to add a check member to the <TT><FONT SIZE=+1>count</FONT></TT>,
+
+validating the check on every access. A benefit of ensuring clear separation
+
+between header and implementation source files means that you can introduce
+
+a checking version of this allocator without having to recompile your code.</P>
+
+</UL>
+
+
+
+
+<HR WIDTH="100%">
+<H2>Conclusion</H2>
+
+
+
+<UL>
+
+<P>There are two key concepts that this article has introduced:</P>
+
+
+
+<UL>
+
+<LI>The use of a generic requirements based approach to simplify and adapt
+
+the use of the C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> pattern.</LI>
+
+
+
+<LI>The ability, through control of allocation, to dynamically and non-intrusively
+
+add capabilities to fixed types using the R<FONT SIZE=-1>UNTIME</FONT>
+
+M<FONT SIZE=-1>IXIN</FONT> pattern.</LI>
+
+</UL>
+
+
+
+<P>The application of the two together gives rise to a new variant of the
+
+essential C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT> pattern,
+
+U<FONT SIZE=-1>NINTRUSIVE</FONT> C<FONT SIZE=-1>OUNTED</FONT> B<FONT SIZE=-1>ODY</FONT>.
+
+You can take this theme even further and contrive a simple garbage collection
+
+system for C++.</P>
+
+
+
+<P>The complete code for <TT><FONT SIZE=+1>countable_ptr</FONT></TT>, <TT><FONT SIZE=+1>countability</FONT></TT>,
+
+and the <TT><FONT SIZE=+1>countable new</FONT></TT> is also available.</P>
+
+</UL>
+
+
+
+<DIV ALIGN=right><P>
+
+<HR WIDTH="100%"><FONT SIZE=-1><I>First published in </I><a href="http://www.accu.org/c++sig/public/Overload.html">Overload</a> <I>25,
+
+April 1998, ISSN 1354-3172<BR>
+
+&copy; Copyright Kevlin Henney, 1998, 1999</I></FONT></DIV>
+
+
+
+</BODY>
+
+</HTML>
+
diff --git a/more/faq.htm b/more/faq.htm
new file mode 100644
index 0000000000..3315268506
--- /dev/null
+++ b/more/faq.htm
@@ -0,0 +1,118 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>FAQ</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="Microsoft Theme" content="none, default">
+<meta name="Microsoft Border" content="none, default">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277"
+ HEIGHT="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td>
+ <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td>
+ <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td>
+ </tr>
+</table>
+
+<h1>Frequently Asked Questions</h1>
+
+<p><b>How is a library accepted for posting on the site?</b> An initial review by the
+library master filters out libraries which do not meet the absolute requirements (must be
+C++, ownership clear, reasonable format, etc.)&nbsp; The author is free to rework and
+resubmit libraries which do not pass initial muster. This is encouraged, particularly when
+reviewers like the idea behind a library but feel that details are lacking.</p>
+
+<p><b>Is there any assurance libraries actually work as claimed?</b> No. The review
+process will hopefully eliminate the most seriously flawed libraries, but a well
+constructed library with hidden defects is likely to slip through. Encouraging ordinary
+users to report their experience with a library is intended to address such concerns. </p>
+
+<p><b>How does someone submit a comment?</b>&nbsp; Send email to <a
+href="mailto:boost@egroups.com">boost@egroups.com</a>. </p>
+
+<p><strong>How does someone submit a library?</strong> See <a href="lib_guide.htm">Library
+Guidelines</a></p>
+
+<p><b>Are commercial libraries requiring a fee acceptable?</b> No. However, a library that
+a commercial enterprise makes available without fee is acceptable. If the description of
+the library makes a low-key plug for the supplier, that is acceptable as long as the
+library delivers real value and isn&#146;t just a Trojan horse for the plug.</p>
+
+<p><b>Are shareware libraries acceptable?</b> No. At least initially, only free libraries
+will be accepted.</p>
+
+<p><strong>Are open source license libraries acceptable?</strong>&nbsp; No, not currently.
+Open source licenses often require redistribution or availability of source code,
+inclusion of license document with machine-executable redistribution, give the initial
+developer rights to licensee modifications, and need a lawyer to understand.&nbsp; These
+would be immediate disqualifications for many business, commercial, and consumer
+applications. Boost aims to avoid subjecting users to hard-to-comply-with license terms.<br>
+<br>
+This is subject to review for a particularly important piece of software, or as the
+industry changes.</p>
+
+<p><b>Must full source code be provided?</b> Yes, these are source code libraries.</p>
+
+<p><b>What about documentation?</b> A very simple library might be accepted with only a
+well commented header file. For more substantial libraries, some form of documentation is
+certainly going to be expected.&nbsp; HTML is the preferred form.</p>
+
+<p><b>Are platform specific libraries acceptable?</b> There is a preference for portable
+libraries. Libraries will be accepted that have portable interfaces but require platform
+specific implementations, as long as the author supplies implementations for a couple of
+disparate major operating systems.</p>
+
+<p><b>Must a library do useful work? </b>No. A library meant as a teaching example or
+demonstration might not actually do any work.</p>
+
+<p><b>Who owns the libraries?</b> Presumably many authors will copyright their libraries.
+Others authors may wish to place their libraries in the public domain. The Boost.org
+policy is to only accept libraries with a clear copyright notice.&nbsp; It is up to
+potential users to decide if they find the copyright terms acceptable, and to not use
+libraries with unacceptable copyrights.</p>
+
+<p><b>What support is available for the libraries?</b>&nbsp; Try the <a
+href="mailto:boost@egroups.com">boost@egroups.com</a> mailing list. </p>
+
+<p><b>Is there a relationship between Boost.org and the C++ Standards Committee?</b>
+&nbsp; No. The people who started Boost.org were all on the committee, but that was just
+happenstance.</p>
+
+<p><b>Will the Boost.org libraries become part of the next C++ Standard?</b>&nbsp; Some
+might, someday off in the future, but that is up to the standards committee.&nbsp; To the
+extent a library becomes &quot;existing practice&quot;, the likelihood increases that
+someone will propose it for future standardization. Submitting a library to Boost.org is
+one way to establish existing practice - as long as enough people are interested to
+download and use it!</p>
+
+<p><b>Is the site a commercial business?</b> No. It is just some people getting together
+as a kind of cyberspace civic association. If it ever needs to incorporate, it would be as
+non-profit organization.</p>
+
+<p><b>Is there any charge for submitting libraries or reviews to Boost.org?</b> No. Unlike
+the standards committees, you don&#146;t have to pay to volunteer!</p>
+
+<p><b>Will the site include material beyond libraries?</b> The main focus is on libraries,
+but if people contribute occasional articles or other material to make the site more
+interesting, that could be a nice fit.</p>
+
+<p><strong>How do I unzip the distribution files on my [whatever] computer?</strong>
+&nbsp; The .zip format is used for distribution because there are free decoders and
+encoders available for many, many different platforms. See the <a
+HREF="http://www.info-zip.org/pub/infozip/">Info-ZIP</a> web site, which includes a FAQ and
+much other useful information about the .zip format. Many commercial compressor-archiver
+utilities also support this format.</p>
+
+<p>-- End of FAQ --</p>
+
+<p>Revised May 17, 1999</p>
+</body>
+</html>
diff --git a/more/feature_model_diagrams.htm b/more/feature_model_diagrams.htm
new file mode 100644
index 0000000000..40e807be3b
--- /dev/null
+++ b/more/feature_model_diagrams.htm
@@ -0,0 +1,103 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Feature Model Diagrams</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<h1>Feature Model Diagrams in text and HTML</h1>
+<p>By <a href="../people/beman_dawes.html">Beman Dawes</a></p>
+<h2>Introduction</h2>
+<p>In their seminal book, Generative Programming, Czarnecki and Eisenecker (<a href="#Generative Programming">C&amp;E</a>)
+describe how to build feature models [C&amp;E 4.4] consisting of a feature
+diagram plus semantic, rationale, and other attributes.&nbsp; Feature models are
+then used to drive design cycles which eventually lead to manual or automatic
+assembly of configurations.</p>
+<p>Feature models provide a language to describe the library variability that is
+often such an issue in boost.org discussions. The Whorf hypothesis that
+&quot;Language shapes the way we think, and determines what we can think
+about&quot; seems to apply.&nbsp; In discussion of library variability issues,
+we have been crippled by lack of a good language. With feature models we now
+have a language to carry on the dialog.</p>
+<p>The graphical feature diagrams presented by C&amp;E are not in a suitable
+form for the email discussions boost.org depends upon. The hierarchical nature
+of feature diagrams can be represented by a simple text-based feature diagram
+language.&nbsp; A feature model can also take advantage of the hyperlinks
+inherent in HTML.</p>
+<h2><a name="Grammar">Grammar</a></h2>
+<p>The grammar for the feature diagram language is expressed in Extended
+Bakus-Naur Form; ::= represents productions, [...] represents options, {...}
+represents zero or more instances, and represents | alternatives.</p>
+<blockquote>
+ <pre>feature-model ::= concept-name details { feature }</pre>
+ <pre>feature ::= feature-name [details]</pre>
+ <pre>details ::= &quot;(&quot; feature-list &quot;)&quot; // required features
+ | &quot;[&quot; feature-list &quot;]&quot; // optional features</pre>
+ <pre>feature-list ::= element { &quot;|&quot; element } // one only
+ | element { &quot;+&quot; element } // one or more
+ | element { &quot;,&quot; element } // all
+ // [a+b] equivalent to [a,b]</pre>
+ <pre>element ::= feature
+ | details</pre>
+ <pre>concept-name ::= name</pre>
+ <pre>feature-name ::= name</pre>
+</blockquote>
+<p>The usual lexical conventions apply. Names are case-insensitive and consist
+of a leading letter, followed by letters, digits, underscores or hyphens, with
+no spaces allowed.</p>
+<p>At least one instance of each name should be hyperlinked to the corresponding
+<a href="#Feature Descriptions">Feature Description</a>.</p>
+<p>While the grammar is intended for written communication between people, it
+may also be trivially machine parsed for use by automatic tools.</p>
+<h2><a name="Feature Descriptions">Feature Description</a></h2>
+<p>Descriptive information is associated with each concept or feature. According
+to [C&amp;E 4.4.2] this includes:</p>
+<ul>
+ <li>Semantic descriptions.</li>
+ <li>Rationale.</li>
+ <li>Stakeholders and client programs.</li>
+ <li>Exemplar systems.</li>
+ <li>Constraints and default dependency rules.</li>
+ <li>Availability sites, binding sites, and binding mode.</li>
+ <li>Open/Closed attribute.</li>
+</ul>
+<h2>What is a Feature?</h2>
+<p>A feature [C&amp;E 4.9.1] is &quot;anything users or client programs might
+want to control about a concept.&nbsp; Thus, during feature modeling, we
+document no only functional features ... but also implementation features, ...,
+various optimizations, alternative implementation techniques, and so on.&quot;</p>
+<h2>Example</h2>
+<blockquote>
+ <pre>special-container ( organization,
+ performance,
+ interface ) // all required</pre>
+ <pre>organization [ ordered + indexed ] // zero or more (4 configurations)</pre>
+ <pre>indexed [ hash-function ] // zero or one (2 configurations)</pre>
+ <pre>performance ( fast | small | balanced ) // exactly one (3 configurations)</pre>
+ <pre>interface ( STL-style + cursor-style ) // one or more (3 configurations)</pre>
+</blockquote>
+<p>There should be feature descriptions for <code>some-container, organization,
+ordered, indexed, hash-function, performance, fast, small, balanced, interface,
+STL-style, and cursor-style</code>.</p>
+<p>The number of possible configurations is&nbsp; (2 + 2*2) * 3 * 3 = 54,
+assuming no constraints.</p>
+<p>There are equivalent representations. For example:</p>
+<blockquote>
+ <pre>special-container ( organization[ ordered+indexed[ hash-function ]],
+ performance( fast|small|balanced ),
+ interface( STL-style+cursor-style ) )</pre>
+</blockquote>
+<h2>References</h2>
+<p>Krzysztof Czarnecki and Ulrich W. Eisenecker, <a name="Generative Programming" href="http://www.generative-programming.org">Generative
+Programming</a>, Addison-Wesley, 2000, ISBN 0-210-30977-7</p>
+<hr>
+<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B %Y" startspan -->23 July 2000<!--webbot bot="Timestamp" endspan i-checksum="18762" --></p>
+<p>© Copyright Beman Dawes, 2000</p>
+
+</body>
+
+</html>
diff --git a/more/formal_review_process.htm b/more/formal_review_process.htm
new file mode 100644
index 0000000000..a552056649
--- /dev/null
+++ b/more/formal_review_process.htm
@@ -0,0 +1,94 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Formal Review Process</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<h1>Formal Review Process</h1>
+<p>The Formal Review process determines if a proposed library should be accepted
+as a Boost library.</p>
+<p>The final &quot;accept&quot; or &quot;reject&quot; decision is made by the
+Review Manager, based on review comments received from boost mailing list
+members.</p>
+<p>Members only can see <a href="http://www.egroups.com/files/boost/Members+Only/formal_review_schedule.htm">Formal
+Review Schedule</a> for the current review schedule.&nbsp;</p>
+<h2>Comments</h2>
+<p>All Boost mailing list members are encouraged to submit Formal Review
+comments:</p>
+<blockquote>
+ <ul>
+ <li>Publicly on the mailing list.</li>
+ <li>Privately to the Review Manager. (See Formal Review Status page )</li>
+ <li>Privately to the library submitter.</li>
+ </ul>
+</blockquote>
+<p>Private comments to a library submitter may be helpful to her or him, but
+won't help the Review Manager reach a decision, so the other forms are
+preferred.</p>
+<h2>Preparing review comments</h2>
+<p>Comments may be brief or lengthy, but basically the Review Manager needs your
+answers to several questions.&nbsp; If you identify problems along the way,
+please note if they are minor, serious, or showstoppers.</p>
+<ul>
+ <li>What is your evaluation of the design?<br>
+ </li>
+ <li>What is your evaluation of the implementation?<br>
+ </li>
+ <li>What is your evaluation of the documentation?<br>
+ </li>
+ <li>What is your evaluation of the potential usefulness of the library?<br>
+ </li>
+ <li>Did you try to use the library?&nbsp; With what compiler?&nbsp; Did you
+ have any problems?<br>
+ </li>
+ <li>How much effort did you put into your evaluation? A glance? A quick
+ reading? In-depth study?<br>
+ </li>
+ <li>Are you knowledgeable about the problem domain?<br>
+ </li>
+ <li>Finally, do you think the library should be accepted as a Boost
+ library?&nbsp; Be sure to say this explicitly so that your other comments
+ don't obscure your overall opinion.</li>
+</ul>
+<h2>Results</h2>
+<p>At the conclusion of the comment period, the Review Manager will post a
+message to the mailing list saying if the library has been accepted or
+rejected.&nbsp; A rationale should be provided, but its extent is up to the
+Review Manager.</p>
+<h2>Notes for Review Managers</h2>
+<p>Consider writing a Review page for posting on the web site.</p>
+<p>In Review pages or mailing list postings, do quote review comments if you
+wish, but don't identify authors of private comments.</p>
+<h2>Notes for Library Authors</h2>
+<p>A proposed library should remain stable during the review period; it is just
+going to confuse and irritate reviewers if there are numerous changes.&nbsp; It
+is, however, useful to upload fixes for serious bugs right away, particularly
+those which prevent reviewers from fully evaluating the library.&nbsp; Post a
+notice of such fixes on the mailing list.</p>
+<p>Library improvements suggested by reviewers should be held until after the
+completion of review period. Such changes can then be incorporated in the <a href="submission_process.htm#Final">final
+submission file</a> sent to the webmaster for posting.&nbsp; If the suggested
+changes might affect reviewer's judgments,&nbsp; post a notice of the pending
+change on the mailing list.</p>
+<hr>
+<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->13 June, 2000<!--webbot bot="Timestamp" endspan i-checksum="19835" --></p>
+<p>&nbsp;</p>
+
+</body>
+
+</html>
diff --git a/more/header.htm b/more/header.htm
new file mode 100644
index 0000000000..e4d4c269d4
--- /dev/null
+++ b/more/header.htm
@@ -0,0 +1,102 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Header policy</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta name="Microsoft Border" content="none, default">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<h1>Header Policy</h1>
+<p>Header files are the place where a library comes into contact with user code
+and other libraries.&nbsp; To co-exist peacefully and productively, headers must
+be &quot;good neighbors&quot;.</p>
+<p>Here are the standards for namespace boost headers.&nbsp;&nbsp;&nbsp; Many of
+these are also reasonable guidelines for general use.
+<ul>
+ <li>Headers should have a .hpp (lowercase) filename extension.&nbsp;</li>
+ <li>Identify the file with an initial comment line.&nbsp; The sample header
+ identifies both the name of the header and the library it is a part of.</li>
+ <li>Specify copyright ownership and any restrictions on use.&nbsp; If you
+ don't want to retain ownership, say something like &quot;Written by Jane
+ Programmer and placed in the public domain&quot;.</li>
+ <li>Supply version information, possibly generated automatically by your
+ version control system.</li>
+ <li>Macro names should be all uppercase, and begin with the namespace
+ name.&nbsp; Underscores separate words.</li>
+ <li>Wrap the header in #ifndef guards so that multiple inclusion is
+ benign.&nbsp; Use a naming convention that minimizes the chance of clashes
+ with macro names from other's code.&nbsp; The <a href="#Sample header">sample
+ header</a> uses the Boost convention of all uppercase letters, with the
+ header name prefixed by the namespace name, and suffixed with HPP, separated
+ by underscores.</li>
+ <li>Wrap the header contents in a namespace to prevent global namespace
+ pollution. The namespace approach to pollution control is strongly preferred
+ to older approaches such as adding funny prefixes to global names.&nbsp;
+ Libraries which are designed to work well with other Boost libraries should
+ be placed namespace <tt>boost</tt>.</li>
+ <li>Place the header file in a sub-directory to prevent conflict with
+ identically named header files in other libraries.&nbsp; The parent
+ directory is added to the compiler's include search path.&nbsp; Then both
+ your code and user code specifies the sub-directory in <tt>#include</tt>
+ directives.&nbsp; Thus the header <a href="#Sample header">sample header</a>&nbsp;
+ would be included by <tt>#include &lt;boost/furball.hpp&gt;</tt></li>
+ <li>The preferred ordering for class definitions is public members, protected
+ members, and finally private members.</li>
+ <li>Include the boost/config.hpp <a href="../libs/config/index.htm">configuration
+ header</a> if there is a need to deal with compiler or platform
+ configuration issues.</li>
+</ul>
+<h2><a name="Sample header"></a>Sample Header</h2>
+<pre><tt>//&nbsp; Boost general library furball.hpp header file&nbsp; ---------------------------//
+
+//&nbsp; (C) Copyright Your Name 1998. Permission to copy, use, modify, sell and
+//&nbsp; distribute this software is granted provided this copyright notice appears
+//&nbsp; in all copies. This software is provided &quot;as is&quot; without express or implied
+//&nbsp; warranty, and with no claim as to its suitability for any purpose.
+
+//&nbsp; $Id$ or other version information
+
+#ifndef BOOST_FURBALL_HPP
+#define BOOST_FURBALL_HPP
+
+namespace boost {
+
+//&nbsp; Furball class declaration&nbsp; -----------------------------------------------//
+
+&nbsp; class furball
+ {
+ public:
+&nbsp; void throw_up();
+ private:
+ int whatever;
+&nbsp;&nbsp;};&nbsp; // furball
+
+} // namespace
+
+#endif&nbsp; // BOOST_FURBALL_HPP</tt></pre>
+<h2>Coding Style</h2>
+<p>The alert reader will have noticed that the <a href="#Sample header">sample
+header</a> employs a certain coding style for indentation, positioning braces,
+commenting ending braces, and similar formatting issues.&nbsp; These stylistic
+issues are viewed as personal preferences and are not part of the Boost Header
+Policy.</p>
+<hr>
+<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->27 July, 2000<!--webbot bot="Timestamp" endspan i-checksum="21060" --></p>
+
+</body>
+
+</html>
diff --git a/more/imp_vars.htm b/more/imp_vars.htm
new file mode 100644
index 0000000000..9d1a191135
--- /dev/null
+++ b/more/imp_vars.htm
@@ -0,0 +1,201 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Implementation Variations</title>
+</head>
+
+<body link="#0000ff" vlink="#800080" bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<h1>Implementation Variations</h1>
+<h2>Separation of interface and implementation</h2>
+<p>The interface specifications for boost.org library components (as well as for
+quality software in general) are conceptually separate from implementations of
+those interfaces. This may not be obvious, particularly when a component is
+implemented entirely within a header, but this separation of interface and
+implementation is always assumed. From the perspective of those concerned with
+software design, portability, and standardization, the interface is what is
+important, while the implementation is just a detail.</p>
+<p>Dietmar Kühl, one of the original boost.org contributors, comments &quot;The
+main contribution is the interface, which is augmented with an implementation,
+proving that it is possible to implement the corresponding class and providing a
+free implementation.&quot;</p>
+<b>
+<h2>Implementation variations</h2>
+</b>
+<p>There may be a need for multiple implementations of an interface, to
+accommodate either platform dependencies or performance tradeoffs. Examples of
+platform dependencies include compiler shortcomings, file systems, thread
+mechanisms, and graphical user interfaces. The classic example of a performance
+tradeoff is a fast implementation which uses a lot of memory versus a slower
+implementation which uses less memory.</p>
+<p>Boost libraries generally use a <a href="../libs/config/index.htm">configuration
+header</a>, boost/config.hpp, to capture compiler and platform
+dependencies.&nbsp; Although the use of boost/config.hpp is not required, it is
+the preferred approach for simple configuration problems.&nbsp;&nbsp;</p>
+<h2>Boost policy</h2>
+<p>The Boost policy is to avoid platform dependent variations in interface
+specifications, but supply implementations which are usable over a wide range of
+platforms and applications.&nbsp; That means boost libraries will use the
+techniques below described as appropriate for dealing with platform
+dependencies.</p>
+<p>The Boost policy toward implementation variations designed to enhance
+performance is to avoid them unless the benefits greatly exceed the full
+costs.&nbsp; The term &quot;full costs&quot; is intended to include both
+tangible costs like extra maintenance, and intangible cost like increased
+difficulty in user understanding.</p>
+<b>
+<h2>Techniques for providing implementation variations</h2>
+</b>
+<p>Several techniques may be used to provide implementation variations. Each is
+appropriate in some situations, and not appropriate in other situations.</p>
+<h3>Single general purpose implementation</h3>
+<p>The first technique is to simply not provide implementation variation at
+all.&nbsp; Instead, provide a single general purpose implementation, and forgo
+the increased complexity implied by all other techniques.</p>
+<p><b>Appropriate:</b>&nbsp; When it is possible to write a single portable
+implementation which has reasonable performance across a wide range of
+platforms. Particularly appropriate when alternative implementations differ only
+in esoteric ways.</p>
+<p><b>Not appropriate:</b> When implementation requires platform specific
+features, or when there are multiple implementation possible with widely
+differing performance characteristics.</p>
+<p>Beman Dawes comments &quot;In design discussions some implementation is often
+alleged to be much faster than another, yet&nbsp; a timing test discovers no
+significant difference. The lesson is that while algorithmic differences may
+affect speed dramatically, coding differences such as changing a class from
+virtual to non-virtual members or removing a level of indirection are unlikely
+to make any measurable difference unless deep in an inner loop. And even in an
+inner loop, modern CPU’s often execute such competing code sequences in the
+same number of clock cycles!&nbsp; A single general purpose implementation is
+often just fine.&quot;</p>
+<p>Or as Donald Knuth said, &quot;Premature optimization is the root of all
+evil.&quot; (Computing Surveys, vol 6, #4, p 268).</p>
+<h3>Macros</h3>
+<p>While the evils of macros are well known, there remain a few cases where
+macros are the preferred solution:</p>
+<blockquote>
+ <ul>
+ <li>&nbsp;Preventing multiple inclusion of headers via #include guards.</li>
+ <li>&nbsp;Passing minor configuration information from a configuration
+ header to other files.</li>
+ </ul>
+</blockquote>
+<p><b>Appropriate:</b>&nbsp; For small compile-time variations which would
+otherwise be costly or confusing to install, use, or maintain. More appropriate
+to communicate within and between library components than to communicate with
+library users.</p>
+<p><b>Not appropriate:&nbsp;</b> If other techniques will do.</p>
+<p>To minimize the negative aspects of macros:</p>
+<blockquote>
+ <ul>
+ <li>Only use macros when they are clearly superior to other
+ techniques.&nbsp; They should be viewed as a last resort.</li>
+ <li>Names should be all uppercase, and begin with the namespace name. This
+ will minimize the chance of name collisions. For example, the #include
+ guard for a boost header called foobar.h might be named BOOST_FOOBAR_H.</li>
+ </ul>
+</blockquote>
+<h3>Separate files</h3>
+<p>A library component can have multiple variations, each contained in its own
+separate file or files.&nbsp; The files for the most appropriate variation are
+copied to the appropriate include or implementation directories at installation
+time.</p>
+<p>The way to provide this approach in boost libraries is to include specialized
+implementations as separate files in separate sub-directories in the .ZIP
+distribution file. For example, the structure within the .ZIP distribution file
+for a library named foobar which has both default and specialized variations
+might look something like:</p>
+<blockquote>
+ <pre>foobar.h // The default header file
+foobar.cpp // The default implementation file
+readme.txt // Readme explains when to use which files
+self_contained/foobar.h // A variation with everything in the header
+linux/foobar.cpp // Implementation file to replace the default
+win32/foobar.h // Header file to replace the default
+win32/foobar.cpp // Implementation file to replace the default</pre>
+</blockquote>
+<p><b>Appropriate:</b>&nbsp; When different platforms require different
+implementations, or when there are major performance differences between
+possible implementations.&nbsp;</p>
+<p><b>Not appropriate:</b>&nbsp; When it makes sense to use more that one of the
+variations in the same installation.</p>
+<h3>Separate components</h3>
+<p>Rather than have several implementation variations of a single component,
+supply several separate components. For example, the Boost library currently
+supplies <code>scoped_ptr</code> and <code>shared_ptr</code> classes rather than
+a single <code>smart_ptr</code> class parameterized to distinguish between the
+two cases.&nbsp; There are several ways to make the component choice:</p>
+<blockquote>
+ <ul>
+ <li>Hardwired by the programmer during coding.</li>
+ <li>Chosen by programmer written runtime logic (trading off some extra
+ space, time, and program complexity for the ability to select the
+ implementation at run-time.)</li>
+ </ul>
+</blockquote>
+<p><b>Appropriate: </b>When the interfaces for the variations diverge, and when
+it is reasonably to use more than one of the variations. When run-time selection
+of implementation is called for.</p>
+<p><b>Not appropriate:</b> When the variations are data type, traits, or
+specialization variations which can be better handled by making the component a
+template. Also not appropriate when choice of variation is best done by some
+setup or installation mechanism outside of the program itself.&nbsp; Thus
+usually not appropriate to cope with platform differences.</p>
+<p><b>Note:</b> There is a related technique where the interface is specified as
+an abstract (pure virtual) base class (or an interface definition language), and
+the implementation choice is passed off to some third-party, such as a
+dynamic-link library or object-request broker. While that is a powerful
+technique, it is way beyond the scope of this discussion.</p>
+<h3>Template-based approaches</h3>
+<p>Turning a class or function into a template is often an elegant way to cope
+with variations.&nbsp; Template-based approaches provide optimal space and time
+efficiency in return for constraining the implementation selection to compile
+time.&nbsp;</p>
+<p>Important template techniques include:</p>
+<blockquote>
+ <ul>
+ <li>Data type parameterization.&nbsp; This allows a single component to
+ operate on a variety of data types, and is why templates were originally
+ invented.</li>
+ <li>Traits parameterization.&nbsp; If parameterization is complex, bundling
+ up aspects into a single traits helper class can allow great variation
+ while hiding messy details.&nbsp; The C++ Standard Library provides
+ several examples of this idiom, such as <code>iterator_traits&lt;&gt;</code>
+ (24.3.1 lib.iterator.traits) and <tt>char_traits&lt;&gt;</tt> (21.2
+ lib.char.traits).</li>
+ <li>Specialization.&nbsp; A template parameter can be used purely for the
+ purpose of selecting a specialization. For example:</li>
+ </ul>
+ <blockquote>
+ <blockquote>
+ <pre>SomeClass&lt;fast&gt; my_fast_object; // fast and small are empty classes
+SomeClass&lt;small&gt; my_small_object; // used just to select specialization</pre>
+ </blockquote>
+ </blockquote>
+</blockquote>
+<p><b>Appropriate: </b>When the need for variation is due to data type or
+traits, or is performance related like selecting among several algorithms, and
+when a program might reasonably use more than one of the variations.</p>
+<p><b>Not appropriate:</b>&nbsp; When the interfaces for variations are
+different, or when choice of variation is best done by some mechanism outside of
+the program itself.&nbsp; Thus usually not appropriate to cope with platform
+differences.</p>
+<hr>
+<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->23 June, 2000<!--webbot bot="Timestamp" endspan i-checksum="19836" --></p>
+
+</body>
+
+</html>
diff --git a/more/index.htm b/more/index.htm
new file mode 100644
index 0000000000..1c97f2d736
--- /dev/null
+++ b/more/index.htm
@@ -0,0 +1,62 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>More Information</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<h1>More Information</h1>
+<h2>Boost Policies</h2>
+<p>These policies explain what is expected of boost libraries and the process
+for library submissions.</p>
+<blockquote>
+ <p><b><a href="lib_guide.htm">Library Requirements and Guidelines</a></b>.&nbsp;
+ Basic standards for those preparing a submission.</p>
+ <p><a href="submission_process.htm"><b>Library Submission Process</b></a>.&nbsp;
+ How to submit a library to Boost.</p>
+ <p><b><a href="formal_review_process.htm">Library Formal Review Process</a></b>.
+ Including how to submit a review comment.</p>
+ <p><b><a href="header.htm">Header Policy</a></b>.&nbsp; Headers are where a
+ library contacts its users, so programming practices are particularly
+ important.</p>
+ <p><b><a href="imp_vars.htm">Implementation Variations</a></b>.&nbsp;
+ Sometimes one size fits all, sometimes it doesn't.&nbsp; This page deals with
+ the trade-offs.</p>
+</blockquote>
+<h2>Links</h2>
+<blockquote>
+ <p>The C++ Standard (ISO/IEC 14882) is available online as a PDF file from the
+ <a href="http://www.ansi.org">ANSI</a> (American National Standards Institute)
+ Electronic Standards Store.&nbsp; The price is $US 18.00. The document is
+ certainly not a tutorial, but is interesting to those who care about the
+ precise specification of the language and the standard library.</p>
+</blockquote>
+<h2>Articles and Papers</h2>
+<blockquote>
+ <p><b><a href="count_bdy.htm">Counted Body Techniques</a></b> by <a href="../people/kevlin_henney.htm">Kevlin
+ Henney</a> is must reading for those interested in reference counting, a
+ widely used object management idiom.&nbsp; Originally published in <a href="http://www.accu.org/c++sig/public/Overload.html">Overload</a>
+ magazine.</p>
+ <p><b><a href="feature_model_diagrams.htm">Feature Model Diagrams in text and
+ HTML</a></b> describes how to represent feature model diagrams in text form.</p>
+</blockquote>
+<hr>
+<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->16 July, 2000<!--webbot bot="Timestamp" endspan i-checksum="21057" --></p>
+
+</body>
+
+</html>
diff --git a/more/lib_guide.htm b/more/lib_guide.htm
new file mode 100644
index 0000000000..260ea55f25
--- /dev/null
+++ b/more/lib_guide.htm
@@ -0,0 +1,268 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Library Requirements and Guidelines</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta name="Microsoft Border" content="none, default">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<h1 align="left">Boost Library Requirements and Guidelines</h1>
+<p align="left">This page describes requirements and guidelines for the content
+of a library submitted to Boost.</p>
+<p align="left">See the <a href="submission_process.htm">Boost Library
+Submission Process</a> page for a description of the process involved.</p>
+<h2 align="left">Requirements</h2>
+<p>To avoid the frustration and wasted time of a proposed library being
+rejected, it must meets these requirements:</p>
+<ul>
+ <li>The license must meet the <a href="#License">license requirements</a>
+ below. Restricted licenses like the GPL and LGPL are not acceptable. The
+ copyright <a href="#Ownership">ownership</a> must be clear.<br>
+ </li>
+ <li>The library must be generally useful and not restricted to a narrow
+ problem domain.<br>
+ </li>
+ <li>The library must meet the <a href="#Portability">portability requirements</a>
+ below.&nbsp;<br>
+ </li>
+ <li>The library must come reasonably close to meeting the <a href="#Guidelines">Guidelines</a>
+ below.<br>
+ </li>
+ <li>The author must be willing to participate in discussions on the mailing
+ list, and to refine the library accordingly.</li>
+</ul>
+<p>There's no requirement that an author read the mailing list for a time before
+making a submission. It has been noted, however, that submissions which begin
+&quot;I just started to read this mailing list ...&quot; seem to fail, often
+embarrassingly.</p>
+<h3 align="left"><a name="License">License</a> requirements</h3>
+<ul>
+ <li>Must be simple to read and understand.<br>
+ </li>
+ <li>Must grant permission to copy, use and modify the software for any use
+ (commercial and non-commercial) for no fee.<br>
+ </li>
+ <li>Must require that the license appear on all copies of the software source
+ code.<br>
+ </li>
+ <li>Must not require that the license appear with executables or other binary
+ uses of the library.&nbsp;&nbsp; Must not require that the source code be
+ available for execution or other binary uses of the library.<br>
+ </li>
+ <li>May restrict the use of the name and description of the library to the
+ standard version found on the Boost web site.</li>
+</ul>
+<h3 align="left"><a name="Portability">Portability</a> requirements</h3>
+<ul>
+ <li>
+ <p align="left">A library's interface must portable and not restricted to a
+ particular compiler or operating system.<br>
+ </li>
+ <li>
+ <p align="left">A library's implementation must if possible be portable and
+ not restricted to a particular compiler or operating system.&nbsp; If a
+ portable implementation is not possible, non-portable constructions are
+ acceptable if reasonably easy to port to other environments.<br>
+ </li>
+ <li>
+ <p align="left">There is no requirement that a library run on all C++
+ compilers.&nbsp;&nbsp;<br>
+ </li>
+ <li>
+ <p align="left">There is no requirement that a library run on any particular
+ C++ compiler.&nbsp; Boost contributors often try to ensure their libraries
+ work with popular compilers.&nbsp; The boost/config.hpp <a href="../libs/config/index.htm">configuration
+ header</a> is the preferred mechanism for working around compiler
+ deficiencies.</li>
+</ul>
+<p align="left">Since there is no absolute way to prove portability, many boost
+submissions demonstrate practical portability by compiling and executing
+correctly with two different C++ compilers, often under different operating
+systems.&nbsp; Otherwise reviewers may disbelieve that porting is in fact
+practical.</p>
+<h3 align="left"><a name="Ownership">Ownership</a></h3>
+<p align="left">Are you sure you own the library you are thinking of
+submitting?&nbsp;&nbsp; &quot;How to Copyright Software&quot; by MJ Salone, Nolo
+Press, 1990 says:</p>
+<blockquote>
+ <p align="left">Doing work on your own time that is very similar to
+ programming you do for your employer on company time can raise nasty legal
+ problems.&nbsp; In this situation, it's best to get a written release from
+ your employer in advance.</p>
+</blockquote>
+<p align="left">Place a copyright notice in all the important files you submit.
+Boost.org won't accept libraries without clear copyright information.</p>
+<h2 align="left"><a name="Guidelines">Guidelines</a></h2>
+<p align="left">Please use these guidelines as a checklist for preparing the
+content a library submission.&nbsp; Not every guideline applies to every
+library, but a reasonable effort to comply is expected.</p>
+<h3>Design and Programming</h3>
+<ul>
+ <li>Aim for ISO Standard C++. Than means making effective use of the standard
+ features of the language, and avoiding non-standard compiler extensions. It
+ also means using the C++ Standard Library where applicable.</li>
+</ul>
+<ul>
+ <li>Headers should be good neighbors. See the <a href="header.htm">header
+ policy</a>.</li>
+</ul>
+<ul>
+ <li>Follow the <a href="imp_vars.htm">implementation variation policy</a>.&nbsp;</li>
+</ul>
+<ul>
+ <li>Follow quality programming practices. See, for example, &quot;Effective
+ C++&quot; 2nd Edition, and &quot;More Effective C++&quot;, both by Scott
+ Meyers, published by Addison Wesley.</li>
+</ul>
+<ul>
+ <li>Use the lowercase/underscore <a href="#Naming">naming conventions</a> of
+ the C++ standard library.&nbsp; Template parameter names begin with an
+ uppercase letter. Macro (gasp!) names should be all uppercase and begin with
+ BOOST_.</li>
+</ul>
+<ul>
+ <li>Use exceptions to report errors where appropriate, and write code that is
+ safe in the face of exceptions.</li>
+</ul>
+<ul>
+ <li>Avoid exception-specifications. See <a href="#Exception-specification">exception-specification
+ rationale</a>.</li>
+</ul>
+<ul>
+ <li>Provide sample programs, confidence tests, or regression tests so
+ potential users can see how to use your library and verify that it has
+ compiled correctly.</li>
+</ul>
+<ul>
+ <li>Although some boost members use proportional fonts, tabs, and unrestricted
+ line lengths in their own code, boost's widely distributed source code
+ should follow more conservative guidelines:
+ <ul>
+ <li>Use fixed-width fonts.&nbsp; See <a href="#code fonts">fonts rationale</a>.</li>
+ <li>Use spaces rather than tabs.</li>
+ <li>Limit line lengths to 80 characters.</li>
+ </ul>
+ </li>
+</ul>
+<h3>Documentation</h3>
+<p>Even the simplest library needs some documentation; the amount should be
+proportional to the need.&nbsp; The documentation should assume the readers have
+a basic knowledge of C++, but are not necessarily experts.</p>
+<p>The format for documentation should be HTML, and should not require an
+advanced browser or server-side extensions.</p>
+<p>There is no single right way to do documentation. HTML documentation is often
+organized quite differently from traditional printed documents. Task-oriented
+styles differ from reference oriented styles. In the end, it comes down to the
+question: Is the documentation sufficient for the mythical &quot;average&quot;
+C++ programmer to use the library successfully?</p>
+<p>Appropriate topics for documentation often include:
+<ul>
+ <li>General introduction to the library.</li>
+ <li>Description of each class.</li>
+ <li>Relationship between classes.</li>
+ <li>For each function, as applicable, description, requirements
+ (preconditions), effects, post-conditions, returns, and throws.</li>
+ <li>Discussion of error detection and recovery strategy.</li>
+ <li>How to use including description of typical uses.</li>
+ <li>How to compile and link.</li>
+ <li>How to test.</li>
+ <li>Version or revision history.</li>
+ <li>Rationale for design decisions.&nbsp; See <a href="#Rationale">Rationale
+ rationale</a>.</li>
+ <li>Acknowledgements.&nbsp; See <a href="#Acknowledgements">Acknowledgments
+ rationale.</a></li>
+</ul>
+<h2>Rationale</h2>
+<p>Rationale for some of the requirements and guidelines follows.</p>
+<h3><a name="Exception-specification">Exception-specification</a> rationale</h3>
+<p>Exception specifications [ISO 15.4] are sometimes coded to indicate what
+exceptions may be thrown, or because the programmer hopes they will improved
+performance.&nbsp; But consider the follow member from a smart pointer:</p>
+<pre> T&amp; operator*() const throw() { return *ptr; }</pre>
+<p>This function calls no other functions; it only manipulates fundamental data
+types like pointers Therefore, no runtime behavior of the
+exception-specification can ever be invoked.&nbsp; The function is completely
+exposed to the compiler; indeed it is declared inline Therefore, a smart
+compiler can easily deduce that the functions are incapable of throwing
+exceptions, and make the same optimizations it would have made based on the
+empty exception-specification. A &quot;dumb&quot; compiler, however, may make
+all kinds of pessimizations.</p>
+<p>For example, some compilers turn off inlining if there is an
+exception-specification.&nbsp; Some compilers add try/catch blocks. Such
+pessimizations can be a performance disaster which makes the code unusable in
+practical applications.</p>
+<p>Although initially appealing, an exception-specification tends to have
+consequences that require <b>very</b> careful thought to understand. The biggest
+problem with exception-specifications is that programmers use them as though
+they have the effect the programmer would like, instead of the effect they
+actually have.</p>
+<p>A non-inline function is the one place a &quot;throws nothing&quot;
+exception-specification may have some benefit with some compilers.</p>
+<hr>
+<h3><a name="Naming">Naming</a> conventions rationale</h3>
+<p>The C++ standard committee's Library Working Group discussed this issue in
+detail, and over a long period of time. The discussion was repeated again in
+early boost postings. A short summary:</p>
+<ul>
+ <li>Naming conventions are contentious, and although several are widely used,
+ no one style predominates.<br>
+ </li>
+ <li>Given the intent to propose portions of boost for the next revision of the
+ C++ standard library, boost decided to follow the standard library's
+ conventions.<br>
+ </li>
+ <li>Once a library settles on a particular convention, a vast majority of
+ stakeholders want that style to be consistently used.<br>
+ </li>
+ <li>There is a strong preference for clear and descriptive names, even if
+ lengthy.</li>
+</ul>
+<hr>
+<h3>Source <a name="code fonts">code fonts</a> rationale</h3>
+<p>Dave Abrahams comments: An important purpose (I daresay the primary purpose)
+of source code is communication: the documentation of intent. This is a doubly
+important goal for boost, I think. Using a fixed-width font allows us to
+communicate with more people, in more ways (diagrams are possible) right there
+in the source. Code written for fixed-width fonts using spaces will read
+reasonably well when viewed with a variable-width font, and as far as I can tell
+every editor supporting variable-width fonts also supports fixed width. I don't
+think the converse is true.</p>
+<hr>
+<h3><a name="Rationale">Rationale</a> rationale</h3>
+<p>Rationale is defined as &quot;The fundamental reasons for something;
+basis.&quot; by the American Heritage Dictionary.</p>
+<p>Beman Dawes comments:&nbsp; Failure to supply contemporaneous rationale for
+design decisions is a major defect in many software projects. Lack of accurate
+rationale causes issues to revisited endlessly, causes maintenance bugs when a
+maintainer changes something without realizing it was done a certain way for
+some purpose, and shortens the useful lifetime of software.</p>
+<p>Rationale is fairly easy to provide at the time decisions are made, but very
+hard to accurately recover even a short time later.</p>
+<hr>
+<h3><a name="Acknowledgements">Acknowledgements</a> rationale</h3>
+<p>As a library matures, it almost always accumulates improvements suggested to
+the authors by other boost members.&nbsp; It is a part of the culture of
+boost.org to acknowledge such contributions, identifying the person making the
+suggestion.&nbsp; Major contributions are usually acknowledged in the
+documentation, while minor fixes are often mentioned in comments within the code
+itself.</p>
+<hr>
+<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->24 July, 2000<!--webbot bot="Timestamp" endspan i-checksum="21054" --></p>
+
+</body>
+
+</html>
diff --git a/more/submission_process.htm b/more/submission_process.htm
new file mode 100644
index 0000000000..63d722b23d
--- /dev/null
+++ b/more/submission_process.htm
@@ -0,0 +1,169 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Library Submission Process</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<h1>Boost Library Submission Process</h1>
+<p>This page describes the process of getting a library accepted by Boost.&nbsp;
+The process is still evolving, so if you have suggestions for improvement by all
+means post them on the mailing list.</p>
+<p>See the <a href="lib_guide.htm">Boost Library Requirements and Guidelines</a>
+page for issues of content.</p>
+<h3><b>Steps for getting a library accepted by Boost:</b></h3>
+<ul>
+ <li><a href="#Learn">Learn about Boost</a>.</li>
+ <li><a href="#interest">Determine interest</a>.</li>
+ <li><a href="#Preliminary">Preliminary submission</a>.</li>
+ <li><a href="#Refinement">Refinement</a>.</li>
+ <li><a href="#Review">Formal Review</a>.</li>
+ <li><a href="#site posting">Web site posting</a>.</li>
+ <li><a href="#Lifecycle">Lifecycle</a>.</li>
+</ul>
+<h2><a name="Learn">Learn</a> about Boost</h2>
+<p>Subscribe to the <a href="../index.htm#Mailing List">mailing list</a> for a
+while, or look through the <a href="http://www.egroups.com/messages/boost">archives</a>.&nbsp;
+Click around the <a href="../index.htm">web site</a>.&nbsp; Understand the <a href="lib_guide.htm">Requirements</a>.&nbsp;
+Read the rest of this page to learn about the process.&nbsp; Otherwise, you will
+just end up wasting everyone's time.</p>
+<p>There is a culture associated with Boost, aimed at encouraging high quality
+libraries by a process of discussion and refinement.</p>
+<p>If what you really want is a site that will just post your library without
+even looking at it, you should go elsewhere.</p>
+<h2>Determine <a name="interest">interest</a></h2>
+<p>Potential library submitters should use the <a href="../index.htm#Mailing List">mailing
+list</a> as a forum to gauge interest a possible submission.</p>
+<p>A message might be as simple as &quot;Is there any interest in a library
+which solves Traveling Salesperson problems in linear time?&quot;</p>
+<p>A bit of further description or snippet of code may be helpful. Messages
+should be plain text; not rich text, HTML, etc.</p>
+<p>Please don't post lengthy descriptions, documentation, or code to the mailing
+list, and no attachments, even small ones.&nbsp; Please post lengthy material in
+the eGroups boost <a href="http://www.egroups.com/files/boost/">Files section</a>
+(formerly called the &quot; vault&quot;).&nbsp;</p>
+<h2><a name="Preliminary">Preliminary</a> submission</h2>
+<p>If response to an initial query indicates interest, then post preliminary
+files in the <a href="http://www.egroups.com/files/boost/">Files section</a> of
+the boost eGroups web site if you haven't already done so.</p>
+<h2><a name="Refinement">Refinement</a></h2>
+<p>Discuss, refine, resubmit.&nbsp; Repeat until satisfied.</p>
+<p>The exact details of this process varies a lot.&nbsp; Sometimes it is public,
+on the mailing list, sometimes a lot of discussion happens in private
+emails.&nbsp; For some libraries the process is over quickly, for others it goes
+on for months.&nbsp; It's often challenging, and sometimes leads off in
+completely unexpected directions.&nbsp;&nbsp;</p>
+<p>The <a href="http://www.egroups.com/messages/boost">archive</a> of past
+messages is one way to see how this process worked for other boost
+libraries.&nbsp;</p>
+<h2>Formal <a name="Review">Review</a></h2>
+<p><i>[The Formal Review procedure is new as of 9 May, 2000, and will be refined
+as experience dictates.]</i></p>
+<p>Once a library author feels a submission (which presumably is now in the
+files/vault) has matured enough for formal review, the author sends a message
+requesting a formal review to the mailing list.&nbsp; Please use a subject in
+the form &quot;Review Request: library&quot; where <i>library</i> is replaced by
+the library name.</p>
+<p>Reviews are scheduled so that:</p>
+<ul>
+ <li>Each library gets review time proportional to its size, complexity, and
+ importance.</li>
+ <li>Only a small number of libraries are under active review at any one time.</li>
+ <li>Members know ahead of time when a particular library will be under active
+ review.&nbsp;</li>
+</ul>
+<p>Before a library can be scheduled for review, an active boost member not
+connected with the library submission must volunteer to be the &quot;Review
+Manager&quot; for that library. The review manager decides on the schedule,
+posts a notice when the review period starts, how long it lasts, and how boost
+members can contribute their comments. The review manager collects comments,
+chairs any discussions, and then when the review period is over, decides if
+there is enough consensus to accept the library.</p>
+<p>See <a href="formal_review_process.htm">Formal Review Process</a> for
+details.</p>
+<p>Members only can see <a href="http://www.egroups.com/files/boost/Members+Only/formal_review_schedule.htm">Formal
+Review Schedule</a> for the current library review schedule.&nbsp;</p>
+<p><i>[The plan is that the first several reviews will be managed by long-time
+boost contributors who will be encouraged to experiment with the review
+process.&nbsp;&nbsp; Presumably, successful processes will evolve over time and
+can then be documented.]</i></p>
+<h2>Boost <a name="site posting">site posting</a></h2>
+<h3>Packaging</h3>
+<p>All of the files which make up the library should be combined and compressed
+into a single final submission file using the .zip format.&nbsp; Free encoders
+and decoders for this format running on many different platforms are available
+at the <a href="http://www.info-zip.org/pub/infozip/">Info-ZIP</a> web site, which
+includes a FAQ and much other useful information about the .zip format. Many
+commercial compressor-archiver utilities also support this format.</p>
+<h3><a name="Final">Final</a> Submission file</h3>
+<p>The final submission file contains the material that will live on the
+boost.org web site.&nbsp; The closer the submission file mirrors the directory
+structure and format of the web site, the easier it is for the webmaster to
+integrate it into the web site.
+<p>The submission file for a library named <b>foo</b> should include these
+subdirectories, with the contents indicated:
+<blockquote>
+ <p><b>libs/foo</b>
+ <ul>
+ <li>An introductory page named index.html or index.htm which looks like the
+ initial page of other libraries. <a href="../libs/rational/index.html">Rational</a>&nbsp;
+ is a model for single part libraries, <a href="../libs/integer/index.htm">Integer</a>
+ or <a href="../libs/utility/index.htm">Utility</a> are models for
+ multi-part libraries.</li>
+ <li>The documentation page or pages, also in HTML format.</li>
+ <li>Source files implementing the library if it isn't entirely header
+ based.&nbsp; The boost file type convention for source files is <b>.cpp</b>.</li>
+ <li>Test programs and data files if supplied.</li>
+ <li>If the library has a large number of subsidiary files which aren't
+ linked to from the documentation pages, these subsidiary files can be
+ combined into a single .zip file.</li>
+ </ul>
+ <p><b>boost</b></p>
+ <ul>
+ <li>Public header files as described in the documentation for the
+ library.&nbsp; The boost file type convention for header files is <b>.hpp</b>.</li>
+ </ul>
+ <p><b>boost/detail</b></p>
+ <ul>
+ <li>Implementation header files not normally accessed by library users.</li>
+ </ul>
+</blockquote>
+<h3>Transmission</h3>
+<p>Submit via email to <a href="mailto:webmaster@boost.org">webmaster@boost.org</a>.&nbsp;&nbsp;
+Attach the .zip submission file.&nbsp; In the email message, please include your
+email address, postal mail address, and telephone number, if boost.org doesn't
+already have them. Your addresses and phone number will not appear on the web
+site (unless you include them in your biography).&nbsp; Anonymous postings are
+not accepted.</p>
+<h3>People pages</h3>
+<p>If the boost.org web site doesn't already have your capsule biography
+and&nbsp; picture (optional, with not-too-serious pictures preferred), please
+send them <a href="../index.htm#webmaster">mailto:webmaster@boost.org</a>. It is
+up to you as to whether or not the biography includes your email address or
+other contact information.&nbsp; The preferred picture format is .jpg, but other
+common formats are acceptable.&nbsp; The preferred image size is 500x375 but the
+webmaster has photo editing software and can do the image preparation if
+necessary.</p>
+<h2><a name="Lifecycle">Lifecycle</a></h2>
+<p>Libraries are software; they loose their value over time if not
+maintained.&nbsp; Details still hazy.</p>
+<hr>
+<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->19 June, 2000<!--webbot bot="Timestamp" endspan i-checksum="19847" --></p>
+
+</body>
+
+</html>
diff --git a/more/use_other_libs.htm b/more/use_other_libs.htm
new file mode 100644
index 0000000000..2aecadebb5
--- /dev/null
+++ b/more/use_other_libs.htm
@@ -0,0 +1,52 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Language" content="en-us">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Use other Boost or C</title>
+</head>
+
+<body>
+
+<ul>
+ <li>Use other Boost or C++ Standard Library components only when the benefits
+ outweigh the costs.</li>
+</ul>
+<p>(Details)</p>
+<p>The benefits of using components from other libraries include clearer, more
+understandable, code, reduced development and maintenance costs, and the
+assurance which comes from using well-known and trusted building blocks.</p>
+<p>The costs incurred may include added compilation and runtime costs, and
+undesirable coupling between components.&nbsp; If the interface to the
+additional component is complex, using it may make code less readable, and thus
+actually increase development and maintenance costs.</p>
+<p><b>Example where another boost component should be used:</b>&nbsp;
+boost::noncopyable (in boost/utility.hpp) has considerable benefits; it
+simplifies code, improves readability, and signals intent.&nbsp; Costs are low
+as coupling is limited;&nbsp; it uses no other classes and includes only the
+generally lightweight headers &lt;boost/config.hpp&gt; and &lt;cstddef&gt;.&nbsp;&nbsp;
+There are no runtime costs at all. With costs so low and benefits so high, other
+boost libraries should use boost::noncopyable except in exceptional
+circumstances.</p>
+<p><b>Example where a standard library component might be used:</b> Providing
+diagnostic output as a debugging aid can be a nice feature for a library. Yet
+using Standard Library iostreams for the purpose involves a lot of additional
+coupling, if iostreams is otherwise unused, and may be a complete waste if the
+library is used in a GUI or embedded application.&nbsp; It might be better to
+redesign the boost library so that the user supplies the output mechanism,
+avoiding marginal use of iostreams.</p>
+<p><b>Example where another boost component should not be used:</b>&nbsp; The
+boost dir_it library has considerable coupling and runtime costs, not to mention
+portability issues with unsupported operating systems.&nbsp; While completely
+appropriate when directory iteration is required, it would not be reasonable for
+another boost library to use dir_it just to check that a file is available
+before opening, since Standard Library file open functionality does this at
+lower cost.&nbsp; Don't use dir_it just for the sake of using a boost library.</p>
+<p>&nbsp;</p>
+<p>&nbsp;</p>
+
+</body>
+
+</html>
diff --git a/people.htm b/people.htm
new file mode 100644
index 0000000000..01fdb76d14
--- /dev/null
+++ b/people.htm
@@ -0,0 +1,103 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>People</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta name="Microsoft Border" content="none, default">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<h1>Boost People</h1>
+<p>(Click on the names for biographies)<br>
+(Click on the images for enlarged images)</p>
+<table border="0" cellpadding="4" cellspacing="4">
+ <tr>
+ <td><a href="people/dave_abrahams.htm">Dave Abrahams</a></td>
+ <td><a href="people/dave_abrahams.jpg"><img border="0" src="people/dave_abrahams_small.jpg" alt="dave_abrahams.jpg (30926 bytes)" width="100" height="75"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/darin_adler.htm">Darin Adler</a></td>
+ <td><a href="people/darin_adler.jpg"><img border="0" src="people/darin_adler_small.jpg" alt="darin_adler.jpg (30416 bytes)" width="100" height="133"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/valentin_bonnard.htm">Valentin Bonnard</a></td>
+ <td><a href="people/valentin_bonnard.jpg"><img src="people/valentin_bonnard_small.jpg" alt="valentin_bonnard.jpg (18207 bytes)" border="0" width="100" height="142"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/ed_brey.htm">Ed Brey</a></td>
+ <td><a href="people/ed_brey.jpg"><img border="0" src="people/ed_brey_small.jpg" alt="ed_brey.jpg (13913 bytes)" width="100" height="118"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/gavin_collings.htm">Gavin Collings</a></td>
+ <td><a href="people/gavin_collings.jpg"><img border="0" src="people/gavin_collings_small.jpg" alt="gavin_collings.jpg (16739 bytes)" width="100" height="137"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/greg_colvin.htm">Greg Colvin</a></td>
+ <td><a href="people/greg_colvin.jpg"><img src="people/greg_colvin_small.jpg" alt="greg_colvin.jpg (52740 bytes)" border="0" width="100" height="133"></a></td>
+ </tr>
+ <tr>
+ <td><a href="http://www.ocsltd.com/founderff.html">Sean Corfield</a></td>
+ <td><a href="people/sean_corfield.jpg"><img src="people/sean_corfield_small.jpg" alt="sean_corfield.jpg (51225 bytes)" border="0" width="100" height="133"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/beman_dawes.html">Beman Dawes</a></td>
+ <td><a href="people/beman_dawes.jpg"><img src="people/beman_dawes_small.jpg" alt="beman_dawes.jpg (47863 bytes)" border="0" width="100" height="133"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/aleksey_gurtovoy.htm">Aleksey Gurtovoy</a></td>
+ <td><a href="people/aleksey_gurtovoy.jpg"><img border="0" src="people/aleksey_gurtovoy_small.jpg" alt="aleksey_gurtovoy.jpg (12871 bytes)" width="100" height="120"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/kevlin_henney.htm">Kevlin Henney</a></td>
+ <td><a href="people/kevlin_henney.jpg"><img src="people/kevlin_henney_small.jpg" alt="kevlin_henney.jpg (27191 bytes)" border="0" width="100" height="133"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/howard_hinnant.htm">Howard Hinnant</a></td>
+ <td><a href="people/howard_hinnant.jpg"><img border="0" src="people/howard_hinnant_small.jpg" alt="howard_hinnant.jpg (19817 bytes)" width="100" height="97"></a></td>
+ </tr>
+ <tr>
+ <td><a href="http://www.josuttis.com">Nicolai Josuttis</a></td>
+ <td><a href="people/nicolai_josuttis.jpg"><img src="people/nicolai_josuttis_small.jpg" alt="nicolai_josuttis.jpg (40745 bytes)" border="0" width="100" height="133"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/dietmar_kuehl.htm">Dietmar Kühl</a></td>
+ <td><a href="people/dietmar_kuehl.jpg"><img src="people/dietmar_kuehl_small.jpg" alt="dietmar_kuehl.jpg (57821 bytes)" border="0" width="100" height="133"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/john_maddock.htm">John Maddock</a></td>
+ <td><a href="people/john_maddock.jpg"><img border="0" src="people/john_maddock_small.jpg" alt="john_maddock.jpg (14611 bytes)" width="100" height="132"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/jens_maurer.htm">Jens Maurer</a></td>
+ <td><a href="people/jens_maurer.jpg"><img border="0" src="people/jens_maurer_small.jpg" width="100" height="124"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/paul_moore.htm">Paul Moore</a></td>
+ <td><a href="people/paul_moore.jpg"><img border="0" src="people/paul_moore_small.jpg" alt="paul_moore.jpg (12023 bytes)" width="100" height="81"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/mark_rodgers.htm">Mark Rodgers</a></td>
+ <td><a href="people/mark_rodgers.jpg"><img border="0" src="people/mark_rodgers_small.jpg" alt="mark_rodgers.jpg (23035 bytes)" width="100" height="75"></a></td>
+ </tr>
+ <tr>
+ <td><a href="people/jeremy_siek.htm">Jeremy Siek</a></td>
+ <td><a href="people/jeremy_siek.jpg"><img border="0" src="people/jeremy_siek_small.jpg" alt="jeremy_siek.jpg (12867 bytes)" width="100" height="133"></a></td>
+ </tr>
+</table>
+
+</body>
+
+</html>
diff --git a/people/aleksey_gurtovoy.htm b/people/aleksey_gurtovoy.htm
new file mode 100644
index 0000000000..fa31707cbb
--- /dev/null
+++ b/people/aleksey_gurtovoy.htm
@@ -0,0 +1,50 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Aleksey Gurtovoy</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<p><a href="aleksey_gurtovoy.jpg"><img border="0" src="aleksey_gurtovoy_small.jpg" alt="aleksey_gurtovoy.jpg (12871 bytes)" align="left" hspace="10" vspace="5" width="100" height="120"></a></p>
+<p>Aleksey Gurtovoy is just a one Russian guy from Siberia, who now lives and
+works in the United States. He is a technical lead in a small software company <a href="http://www.meta-comm.com">MetaCommunications</a>,
+a job and people which have taught him so much.</p>
+<p>He was born in early 1977, has been in love with computers since 1989, and
+still has a lot of (exciting) ideas for his &quot;spare time&quot; in the next
+few years. The first computer he worked with was DEC PDP-11, and he still has a
+kind of nostalgia about this amazing machine. He graduated with honors from
+Krasnoyarsk Technical State University in 1998 with a Master Degree in Computer
+Science.</p>
+<p>While being acknowledged as a talented programmer, Aleksey tries to be a
+better engineer than he is now and hopes that reading good books will help him
+with that task. He reads a lot... One of his favorite books about his profession
+is 'The Mythical Man-Month' by Frederic P. Brooks, Jr.</p>
+<p>He has been working with C++ since 1993, he loves the language and wants to
+be involved in its progress. Sometimes you can come across his articles in the <a href="news:comp.lang.c++.moderated">comp.lang.c++.moderated</a>
+and <a href="news:comp.std.c++">comp.std.c++</a><a> newsgroups. The other
+numerous things Aleksey is interested in include patterns, object-oriented
+methodology and programming languages, organization of software development
+process and tools &amp; technologies which make programmer's life easier (e.g.
+compilers).</p>
+<p>He is not married, but he has in mind one great girl he hopes to be with
+someday.</p>
+<p>You can contact him by sending mail to </a><a href="mailto:alexy@meta-comm.com">alexy@meta-comm.com</a><a>.</p>
+</a>
+
+</body>
+
+</html>
diff --git a/people/aleksey_gurtovoy.jpg b/people/aleksey_gurtovoy.jpg
new file mode 100644
index 0000000000..fd49271502
--- /dev/null
+++ b/people/aleksey_gurtovoy.jpg
Binary files differ
diff --git a/people/aleksey_gurtovoy_small.jpg b/people/aleksey_gurtovoy_small.jpg
new file mode 100644
index 0000000000..65157fc9bf
--- /dev/null
+++ b/people/aleksey_gurtovoy_small.jpg
Binary files differ
diff --git a/people/beman_dawes.html b/people/beman_dawes.html
new file mode 100644
index 0000000000..2a4113990e
--- /dev/null
+++ b/people/beman_dawes.html
@@ -0,0 +1,36 @@
+<html>
+
+<head>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Beman Dawes</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<p><a href="beman_dawes.jpg"><img src="beman_dawes_small.jpg" alt="beman_dawes.jpg (62536 bytes)" border="0" align="left" hspace="10" vspace="5" width="100" height="133"></a>
+Beman Dawes is a software developer from Virginia in the United States.</p>
+<p>He is the author of the StreetQuick® geographic atlas library used by
+digital map publishers to help people get really, really, lost.</p>
+<p>He wrote his first computer program 40 years ago, and does not mourn the
+passing of <a href="http://www.mta.ca/~amiller/cs3711/ibm650/ibm650.htm">bi-quinary</a>
+arithmetic.</p>
+<p>Beman has been a voting member of the ANSI/ISO C++ Standards Committee since
+1992, and chaired the Library Working Group for five years.</p>
+<p>He enjoys travel, sailing, hiking, and biking. He is married, and he and his
+wife have three cats.</p>
+<p>Email: <a href="mailto:beman@esva.net">beman@esva.net</a></p>
+
+</body>
+
+</html>
diff --git a/people/beman_dawes.jpg b/people/beman_dawes.jpg
new file mode 100644
index 0000000000..0c871cf3ab
--- /dev/null
+++ b/people/beman_dawes.jpg
Binary files differ
diff --git a/people/beman_dawes_small.jpg b/people/beman_dawes_small.jpg
new file mode 100644
index 0000000000..69db86240c
--- /dev/null
+++ b/people/beman_dawes_small.jpg
Binary files differ
diff --git a/people/darin_adler.htm b/people/darin_adler.htm
new file mode 100644
index 0000000000..176b05fe51
--- /dev/null
+++ b/people/darin_adler.htm
@@ -0,0 +1,48 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Darin Adler</title>
+</head>
+
+<body>
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<p><a href="darin_adler.jpg"><img border="0" src="darin_adler_small.jpg" alt="darin_adler.jpg (30416 bytes)" align="left" hspace="10" vspace="5" width="100" height="135"></a>Darin Adler has been programming computers since 1976. He loves to do it.</p>
+<p>His first major professional experience was at <a href="http://apple.com">Apple
+Computer</a>. In 1988 he led the team that rewrote the Macintosh Finder in C++.
+Before that project was completed, he was shanghaied to be the technical lead
+for the System 7 project (these days they would call it &quot;Mac OS 7&quot;).
+The group he formed to help him do that, the Blue Meanies, is still a <a href="http://www.spies.com/~greg/bluemeanies.html">legend</a>
+in the Apple community.</p>
+<p>Since Apple, Darin has worked at <a href="http://www.generalmagic.com">General
+Magic</a> as an architect of the <a href="http://www.google.com/search?q=Magic+Cap">Magic
+Cap</a> OS, used the moniker <a href="http://bentspoon.com">Bent Spoon Software</a>
+to do consulting, and helped start <a href="http://www.eazel.com">Eazel</a>, a
+company that is working to make Linux easier to use. Since 1997, he has worked
+from his home in Los Angeles, CA, collaborating with clients and coworkers in
+other locations.</p>
+<p>He prefers to use and program Macintosh computers with C++. But Eazel's
+mission to make Linux easier to use is best accomplished with a non-Macintosh
+PC. (That is why Darin is sitting in front of <a href="darin_adler.jpg">two computers</a>.)
+The other people working on the <a href="http://www.gnome.org">GNOME</a> project
+don't like C++, so he's writing a lot of C code these days.</p>
+<p>The <a href="darin_adler.jpg">larger version</a> of his picture shows him hard at
+work with his C++ guru, his daughter Sophia.</p>
+<p>He has hobbies and stuff but you don't want to read about that here.</p>
+<p>You can contact him by sending mail to <a href="mailto:darin@bentspoon.com">darin@bentspoon.com</a>.</p>
+
+</body>
+
+</html>
diff --git a/people/darin_adler.jpg b/people/darin_adler.jpg
new file mode 100644
index 0000000000..8a17394ddb
--- /dev/null
+++ b/people/darin_adler.jpg
Binary files differ
diff --git a/people/darin_adler_small.jpg b/people/darin_adler_small.jpg
new file mode 100644
index 0000000000..2b7771d95f
--- /dev/null
+++ b/people/darin_adler_small.jpg
Binary files differ
diff --git a/people/dave_abrahams.htm b/people/dave_abrahams.htm
new file mode 100644
index 0000000000..48881bbe3d
--- /dev/null
+++ b/people/dave_abrahams.htm
@@ -0,0 +1,29 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Dave Abrahams</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<p><a href="dave_abrahams.jpg"><img src="dave_abrahams_small.jpg" alt="dave_abrahams.jpg (30926 bytes)"
+border="0" align="left" hspace="10" vspace="5" width="100" height="75"></a>
+Dave Abrahams often shows up at C++ standards committee meetings on a bicycle.</p>
+<p>Beyond that, we will just have to wait until he sends in a biography.</p>
+
+</body>
+
+</html>
diff --git a/people/dave_abrahams.jpg b/people/dave_abrahams.jpg
new file mode 100644
index 0000000000..ff45c4c306
--- /dev/null
+++ b/people/dave_abrahams.jpg
Binary files differ
diff --git a/people/dave_abrahams_small.jpg b/people/dave_abrahams_small.jpg
new file mode 100644
index 0000000000..ebc7077400
--- /dev/null
+++ b/people/dave_abrahams_small.jpg
Binary files differ
diff --git a/people/dietmar_kuehl.htm b/people/dietmar_kuehl.htm
new file mode 100644
index 0000000000..281155eb20
--- /dev/null
+++ b/people/dietmar_kuehl.htm
@@ -0,0 +1,42 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Dietmar Kuehl </title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" HEIGHT="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td>
+ </tr>
+</table>
+
+<p><a href="dietmar_kuehl.jpg"><img src="dietmar_kuehl_small.jpg" hspace="10" vspace="5" alt="dietmar_kuehl.jpg (57821 bytes)" border="0" align="left" WIDTH="100" HEIGHT="133"></a>Dietmar Kuehl (the
+&quot;ue&quot; is actually a &quot;u-umlaut&quot;, ie. one of those funny German
+characters which has two dots above it) was fork(2)ed in early 1968.</p>
+
+<p>He visited school more or less successfully from 1973 to 1987. In 1987 he started to
+study at the Technical University of Berlin. He finished his studies in 1997 with a Diplom
+(roughly the German equivalent of a masters) in Mathematics. His thesis was &quot;Design
+Pattern for the Implementation of Graph Algorithms&quot;; strike the &quot;Design
+Pattern&quot; and put in &quot;Generic&quot; somehow to get an idea of the main topic. The
+thesis is available from <a href="ftp://ftp.informatik.uni-konstanz.de/pub/algo/personal/kuehl/da.ps.gz">ftp://ftp.informatik.uni-konstanz.de/pub/algo/personal/kuehl/da.ps.gz</a>.</p>
+
+<p>Since 1997 he has worked as consultant for a small company called Claas Solutions (the
+&quot;aa&quot; is no typo), mainly working for major German banks. Since late 1995 Dietmar
+Kuehl has been one of the moderators of the newsgroup <a href="news:comp.lang.c++.moderated">comp.lang.c++.moderated</a>. He is active on the C++
+Standards committee.</p>
+
+<p>Email: <a href="mailto:dietmar.kuehl@claas-solutions.de">dietmar.kuehl@claas-solutions.de</a></p>
+
+<p>Home page:&nbsp; <a href="http://www.claas-solutions.de/kuehl/">http://www.claas-solutions.de/kuehl/</a></p>
+</body>
+</html>
diff --git a/people/dietmar_kuehl.jpg b/people/dietmar_kuehl.jpg
new file mode 100644
index 0000000000..c97f54e4fe
--- /dev/null
+++ b/people/dietmar_kuehl.jpg
Binary files differ
diff --git a/people/dietmar_kuehl_small.jpg b/people/dietmar_kuehl_small.jpg
new file mode 100644
index 0000000000..ac63acaf51
--- /dev/null
+++ b/people/dietmar_kuehl_small.jpg
Binary files differ
diff --git a/people/ed_brey.htm b/people/ed_brey.htm
new file mode 100644
index 0000000000..9ac29f3dd5
--- /dev/null
+++ b/people/ed_brey.htm
@@ -0,0 +1,60 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Ed Brey</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td>
+ </tr>
+</table>
+
+<p><a href="ed_brey.jpg"><img src="ed_brey_small.jpg" alt="ed_brey.jpg" border="0" align="left" hspace="10" vspace="5" width="100" height="133"></a>
+Ed Brey lives in Menomonee Falls, Wisconsin, a village outside of
+Milwaukee. In the summertime, he likes to play tennis with his fiancée, and
+in the winter, if there is enough snow, he likes to go tobogganing or
+ice-skating. If it is not nice enough outside for either of those, he plays
+on the piano. Although Ed enjoys doing those activities, most of his time is
+currently spent at work and at home studying. He works at <A
+HREF="http://www.eaton.com">Eaton Corporation</A> in Milwaukee and is working
+on his masters degree in computer engineering through <A
+HREF="http://www.ntu.edu">NTU</A>.
+
+<P>Ed started working for Eaton as part of <A
+HREF="http://www.mu.edu">Marquette University</A>'s engineering co-op program.
+Upon graduation in 1995 from Marquette with a BS in electrical and computer
+engineering, he was hired on full-time at Eaton. At Eaton, Ed has been
+primarily focused on embedded system design and programming in the industrial
+controls industry. Recently, however, he has delved into writing a
+near-real-time database engine running under Windows.
+
+<P>Ed has held programming as a pastime since his grade school days, when he
+wrote a babysitting invoicing program. Soon after, he wrote a game inspired
+by the TV game show "Press Your Luck". Ever since, programming languages and
+concepts, along with finding ways to improve the art and science of coding
+software, have always peeked his interest.
+
+<P>Lastly, Ed has managed to retain his perspective. As fun as computers and
+programming are, Ed's true love in his life is his fiancée Beth.</P>
+
+<HR>
+
+<P>Email: <A HREF="mailto:brey@ductape.net">brey@ductape.net</A>
+
+<P>Home page: <A
+HREF=http://www.cc.edu/~eschmied/>http://ww.cc.edu/~eschmied/</A>
+
+</body>
+
+</html>
diff --git a/people/ed_brey.jpg b/people/ed_brey.jpg
new file mode 100644
index 0000000000..3a37894726
--- /dev/null
+++ b/people/ed_brey.jpg
Binary files differ
diff --git a/people/ed_brey_small.jpg b/people/ed_brey_small.jpg
new file mode 100644
index 0000000000..bf7849a914
--- /dev/null
+++ b/people/ed_brey_small.jpg
Binary files differ
diff --git a/people/gavin_collings.htm b/people/gavin_collings.htm
new file mode 100644
index 0000000000..bb6dbc4fde
--- /dev/null
+++ b/people/gavin_collings.htm
@@ -0,0 +1,31 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Gavin Collings</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" HEIGHT="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<p><img border="0" src="gavin_collings_small.jpg" alt="gavin_collings.jpg (16786 bytes)" align="left" hspace="10" vspace="5" width="100" height="137">Gavin Collings was born and bred in Wiltshire in the UK. After spending the
+1960s in childish pursuits, he spent the 1970s at school becoming ever more fascinated with the mysteries of physics. This he went on to study at St
+John's College, Cambridge until 1985, at which time he entered the world of employment.</p>
+<p>After early work with other languages, he became involved with C++ in the early 1990s and now works as consultant, not far from his original home, in
+Gloucestershire.</p>
+<p>He enjoys playing the piano, walking in the local countryside, playing 5-a-side (indoor soccer), and sailing.</p>
+
+</body>
+
+</html>
diff --git a/people/gavin_collings.jpg b/people/gavin_collings.jpg
new file mode 100644
index 0000000000..b3ef794763
--- /dev/null
+++ b/people/gavin_collings.jpg
Binary files differ
diff --git a/people/gavin_collings_small.jpg b/people/gavin_collings_small.jpg
new file mode 100644
index 0000000000..f9abc3b792
--- /dev/null
+++ b/people/gavin_collings_small.jpg
Binary files differ
diff --git a/people/greg_colvin.htm b/people/greg_colvin.htm
new file mode 100644
index 0000000000..9d4701e74c
--- /dev/null
+++ b/people/greg_colvin.htm
@@ -0,0 +1,28 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Greg Colvin</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" HEIGHT="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td>
+ </tr>
+</table>
+
+<p><a href="greg_colvin.jpg"><img src="greg_colvin_small.jpg" alt="greg_colvin.jpg (52k bytes)" border="0" align="left" hspace="10" vspace="5" WIDTH="100" HEIGHT="133"></a> Dr.
+Greg Colvin has been hacking happily since 1972. He is a member of the ANSI/ISO C++
+standards committee and a Principal Member of Technical Staff with the Java Products Group
+at Oracle Corporation. In his spare time he plays apocalyptic electric blues guitar in his
+Colorado, USA home studio.</p>
+</body>
+</html>
diff --git a/people/greg_colvin.jpg b/people/greg_colvin.jpg
new file mode 100644
index 0000000000..8bde68f374
--- /dev/null
+++ b/people/greg_colvin.jpg
Binary files differ
diff --git a/people/greg_colvin_small.jpg b/people/greg_colvin_small.jpg
new file mode 100644
index 0000000000..3c82cbc5bb
--- /dev/null
+++ b/people/greg_colvin_small.jpg
Binary files differ
diff --git a/people/howard_hinnant.htm b/people/howard_hinnant.htm
new file mode 100644
index 0000000000..d953eb8e1c
--- /dev/null
+++ b/people/howard_hinnant.htm
@@ -0,0 +1,34 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Howard Hinnant</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td>
+ </tr>
+</table>
+
+<p><a href="howard_hinnant.jpg"><img border="0" src="howard_hinnant_small.jpg" align="left" hspace="10" vspace="5" alt="howard_hinnant.jpg (19817 bytes)" width="100" height="97"></a>When
+Howard Hinnant is not monkeying around, he is the principal author of the
+Metrowerks CodeWarrior C++ library. He is also a member of the C++ Standards
+committee.</p>
+<p>Howard is married with four children, two dogs, one cat, a rabbit, an
+undetermined number of rodents (which the cat ignores), and ... well, we're
+really not sure what else. When not sitting in front of his computer, Howard
+enjoys snow skiing and ... more, snow skiing.</p>
+
+</body>
+
+</html>
diff --git a/people/howard_hinnant.jpg b/people/howard_hinnant.jpg
new file mode 100644
index 0000000000..a63a446b47
--- /dev/null
+++ b/people/howard_hinnant.jpg
Binary files differ
diff --git a/people/howard_hinnant_small.jpg b/people/howard_hinnant_small.jpg
new file mode 100644
index 0000000000..373892bb51
--- /dev/null
+++ b/people/howard_hinnant_small.jpg
Binary files differ
diff --git a/people/jens_maurer.htm b/people/jens_maurer.htm
new file mode 100644
index 0000000000..ba3805da08
--- /dev/null
+++ b/people/jens_maurer.htm
@@ -0,0 +1,39 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Jens Maurer</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<p><a href="jens_maurer.jpg"><img border="0" src="jens_maurer_small.jpg" alt="jens_maurer.jpg (15698 bytes)" hspace="10" vspace="5" align="left" width="100" height="124"></a>
+Jens Maurer is a software developer from Germany who lives close to
+Frankfurt/Main. He was born in 1973 and hasn't died yet.</p>
+<p>He has worked for a multimedia company programming home-banking applications,
+CGI scripts and Java applications. He also helped program some simulation
+systems for long-term decision support to aid businessmen in arguing about
+company investments.</p>
+<p>He is neither married nor does he have a girl friend, but asked his
+colleagues to find one for him.</p>
+<p>In his spare time, he likes visiting foreign countries but dislikes getting
+there in uncomfortable airplane seats. On random week-ends, he enjoys
+participating in historic dance courses (without a costume, of course).
+Sometimes, he needs fresh air and goes for a walk.&nbsp;</p>
+<p>Email: <a href="mailto:Jens.Maurer@gmx.net">Jens.Maurer@gmx.net</a></p>
+
+</body>
+
+</html>
diff --git a/people/jens_maurer.jpg b/people/jens_maurer.jpg
new file mode 100644
index 0000000000..2dc21b42f5
--- /dev/null
+++ b/people/jens_maurer.jpg
Binary files differ
diff --git a/people/jens_maurer_small.jpg b/people/jens_maurer_small.jpg
new file mode 100644
index 0000000000..6cdc572db8
--- /dev/null
+++ b/people/jens_maurer_small.jpg
Binary files differ
diff --git a/people/jeremy_siek.htm b/people/jeremy_siek.htm
new file mode 100644
index 0000000000..4f1d81eeab
--- /dev/null
+++ b/people/jeremy_siek.htm
@@ -0,0 +1,36 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Jeremy Siek</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td>
+ </tr>
+</table>
+
+<p><a href="jeremy_siek.jpg"><img border="0" src="jeremy_siek_small.jpg" alt="jeremy_siek.jpg (12867 bytes)" align="left" hspace="10" vspace="5" width="100" height="133"></a>Jeremy Siek is a student at Univ. of Notre Dame, though currently
+he's on "sabatical", working with the SGI C++ compiler and library team.<br>
+<br>
+He is the author of the Matrix Template Library (MTL), and helped design the new Generic Graph Component Library (GGCL).<br>
+<br>
+Once in a while Jeremy "comes up for air" and enjoys fencing, hiking, skiing, and reading. He's also been spotted at a few fightin' irish
+tailgaters (BYOB).<br>
+<br>
+Jeremy has an intense fear for the ancient dark forests where dusty decks thrive and devour programmers, places where the light of abstraction
+has not yet reached.</p>
+
+</body>
+
+</html>
diff --git a/people/jeremy_siek.jpg b/people/jeremy_siek.jpg
new file mode 100644
index 0000000000..2b8115ce20
--- /dev/null
+++ b/people/jeremy_siek.jpg
Binary files differ
diff --git a/people/jeremy_siek_small.jpg b/people/jeremy_siek_small.jpg
new file mode 100644
index 0000000000..514e1bdb26
--- /dev/null
+++ b/people/jeremy_siek_small.jpg
Binary files differ
diff --git a/people/john_maddock.htm b/people/john_maddock.htm
new file mode 100644
index 0000000000..95c7cdb5d7
--- /dev/null
+++ b/people/john_maddock.htm
@@ -0,0 +1,41 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type"
+content="text/html; charset=iso-8859-1">
+<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
+<title>John Maddock</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" cellpadding="2" bgcolor="#007F7F">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif"
+ alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font color="#FFFFFF" size="4"
+ face="Arial">Home </font></a></td>
+ <td><a href="../libraries.htm"><font color="#FFFFFF"
+ size="4" face="Arial">Libraries </font></a></td>
+ <td><a href="../people.htm"><font color="#FFFFFF"
+ size="4" face="Arial">People </font></a></td>
+ <td><a href="../more/faq.htm"><font color="#FFFFFF"
+ size="4" face="Arial">FAQ </font></a></td>
+ <td><a href="../more/index.htm"><font color="#FFFFFF"
+ size="4" face="Arial">More </font></a></td>
+ </tr>
+</table>
+
+<p><a href="john_maddock.jpg"><img src="john_maddock_small.jpg"
+alt="john_maddock.jpg (14611bytes)" align="left" border="0"
+hspace="10" vspace="5" width="100" height="133"></a> John Maddock
+is a software developer from England and holds a PhD in Chemistry,
+but found that computers smell less and explode less often!</p>
+
+<p>John is the author of the <a
+href="http://ourworld.compuserve.com/homepages/John_Maddock/regexpp.htm">regex++
+regular expression package</a>, has an almost pathological
+interest in anything that &quot;can't be done&quot;, and can be
+contacted at <a href="mailto:John_Maddock@compuserve.com">John_Maddock@compuserve.com</a>.</p>
+</body>
+</html>
diff --git a/people/john_maddock.jpg b/people/john_maddock.jpg
new file mode 100644
index 0000000000..9aaa0c90ce
--- /dev/null
+++ b/people/john_maddock.jpg
Binary files differ
diff --git a/people/john_maddock_small.jpg b/people/john_maddock_small.jpg
new file mode 100644
index 0000000000..52368a68a8
--- /dev/null
+++ b/people/john_maddock_small.jpg
Binary files differ
diff --git a/people/kevlin_henney.htm b/people/kevlin_henney.htm
new file mode 100644
index 0000000000..51ac135692
--- /dev/null
+++ b/people/kevlin_henney.htm
@@ -0,0 +1,49 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Kevlin Henney</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td>
+ </tr>
+</table>
+
+<p><a href="kevlin_henney.jpg"><img border="0" src="kevlin_henney_small.jpg" alt="kevlin_henney.jpg (18107 bytes)" align="left" hspace="10" vspace="5" width="100" height="142"></a>
+Kevlin Henney (<a href="mailto:kevlin@curbralan.com">mailto:kevlin@curbralan.com</a>, <a href="http://www.curbralan.com">http://www.curbralan.com</a>)
+is an independent consultant and trainer based in the UK. He has developed and
+delivered training course material and consultancy on many aspects of OO
+development, which he has practiced across a number of domains for over a
+decade. His professional interests include patterns, OO and component based
+design, architecture, distributed object systems, C++, and Java. He is also a
+member of the BSI C++ standards committee.
+</p>
+
+<p>Now that writing code is no longer the core responsibility of his job, his
+non-professional interests seem to include the hacking associated with the
+aforementioned professional interests. However, never being one to keep
+something to himself (like C++'s relationship with C, this is regarded as both a
+strength and a weakness), he shares/inflicts (delete as necessary) his
+professional and non-professional development experiences with/on (ditto) others
+through writing articles and presenting tutorials, workshops and papers at
+conferences.</p>
+<p>He is married, and not just to his work. He and Carolyn have neither children
+nor pets, but he feels that the missing aggravation is made up for by a house
+that needs a great deal of work, requiring constant attention and feeding of
+money. The little spare time that remains to him is taken up with music,
+reading, pub appreciation, etc. Finally, although he enjoys writing, Kevlin is
+not really one for writing in the third person.</p>
+</body>
+
+</html>
diff --git a/people/kevlin_henney.jpg b/people/kevlin_henney.jpg
new file mode 100644
index 0000000000..1bdc12256f
--- /dev/null
+++ b/people/kevlin_henney.jpg
Binary files differ
diff --git a/people/kevlin_henney_small.jpg b/people/kevlin_henney_small.jpg
new file mode 100644
index 0000000000..348e6a0ac3
--- /dev/null
+++ b/people/kevlin_henney_small.jpg
Binary files differ
diff --git a/people/mark_rodgers.htm b/people/mark_rodgers.htm
new file mode 100644
index 0000000000..079a1dc761
--- /dev/null
+++ b/people/mark_rodgers.htm
@@ -0,0 +1,36 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Mark Rodgers</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<p><a href="mark_rodgers.jpg"><img border="0" src="mark_rodgers_small.jpg" alt="mark_rodgers.jpg (23035 bytes)" align="left" hspace="10" vspace="5" width="100" height="75"></a>Mark
+Rodgers lives in <a href="http://www.wcc.govt.nz/wellington/">Wellington</a>,
+the capital of <a href="http://www.govt.nz/aboutnz/profile.php3">New Zealand</a>,
+with his wife, Clare, and their son, Ronnie.</p>
+<p>He studied Computer Science at <a href="http://www.vuw.ac.nz">Victoria
+University of Wellington</a> from 1983 to 1986, completing a <nobr>B.Sc. (Hons).</nobr>
+He now works as consultant through his company, Cadenza New Zealand Ltd, and
+also markets Cadenza Drawing Board™, a CAD system he developed.</p>
+<p>Mark has been programming in C++ since about 1990, and loves every minute of
+it, but is continually amazed at how much more he still has to learn.</p>
+<p>You can contact Mark at <a href="mailto:mark.rodgers@cadenza.co.nz">mark.rodgers@cadenza.co.nz</a>.
+
+</body>
+
+</html>
diff --git a/people/mark_rodgers.jpg b/people/mark_rodgers.jpg
new file mode 100644
index 0000000000..0542e323a4
--- /dev/null
+++ b/people/mark_rodgers.jpg
Binary files differ
diff --git a/people/mark_rodgers_small.jpg b/people/mark_rodgers_small.jpg
new file mode 100644
index 0000000000..a4a34c768b
--- /dev/null
+++ b/people/mark_rodgers_small.jpg
Binary files differ
diff --git a/people/nicolai_josuttis.jpg b/people/nicolai_josuttis.jpg
new file mode 100644
index 0000000000..9cedc21cd2
--- /dev/null
+++ b/people/nicolai_josuttis.jpg
Binary files differ
diff --git a/people/nicolai_josuttis_small.jpg b/people/nicolai_josuttis_small.jpg
new file mode 100644
index 0000000000..28b828b692
--- /dev/null
+++ b/people/nicolai_josuttis_small.jpg
Binary files differ
diff --git a/people/paul_moore.htm b/people/paul_moore.htm
new file mode 100644
index 0000000000..ef7dd4859a
--- /dev/null
+++ b/people/paul_moore.htm
@@ -0,0 +1,38 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<title>Paul Moore</title>
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home</big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries</big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People</big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ</big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More</big></font></a></td>
+ </tr>
+</table>
+<p><a href="paul_moore.jpg"><img border="0" src="paul_moore_small.jpg" alt="paul_moore.jpg (12023 bytes)" align="left" hspace="10" vspace="5" width="100" height="81"></a>Paul
+Moore lives in Cheshire, England. He is married, with one son. His &quot;day
+job&quot; is as an Oracle DBA, but he writes C and C++ programs in his spare
+time.</p>
+<p>Paul started programming on Acorn's BBC Micro and RISC PC series of
+computers, but finally went mainstream and bought a PC, on which he now runs
+Windows and Linux. Paul's main interest is in porting and developing open-source
+software, and so his main programming language is C (at least until the open
+source community switches to C++).</p>
+<p>Paul's main claim to C++ fame is that he owns all 3 editions of Bjarne
+Stroustrup's &quot;The C++ Programming language&quot;, plus the ARM and the C++
+standard, but he didn't own a C++ compiler until after the 3rd edition of
+Stroustrup's book came out. Make of that what you will...</p>
+
+</body>
+
+</html>
diff --git a/people/paul_moore.jpg b/people/paul_moore.jpg
new file mode 100644
index 0000000000..25510b0a6b
--- /dev/null
+++ b/people/paul_moore.jpg
Binary files differ
diff --git a/people/paul_moore_small.jpg b/people/paul_moore_small.jpg
new file mode 100644
index 0000000000..b792c3ce7c
--- /dev/null
+++ b/people/paul_moore_small.jpg
Binary files differ
diff --git a/people/sean_corfield.jpg b/people/sean_corfield.jpg
new file mode 100644
index 0000000000..bd4f7b171e
--- /dev/null
+++ b/people/sean_corfield.jpg
Binary files differ
diff --git a/people/sean_corfield_small.jpg b/people/sean_corfield_small.jpg
new file mode 100644
index 0000000000..732fd26f58
--- /dev/null
+++ b/people/sean_corfield_small.jpg
Binary files differ
diff --git a/people/valentin_bonnard.htm b/people/valentin_bonnard.htm
new file mode 100644
index 0000000000..5c47561e2f
--- /dev/null
+++ b/people/valentin_bonnard.htm
@@ -0,0 +1,27 @@
+<html>
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Valentin Bonnard</title>
+<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
+</head>
+
+<body bgcolor="#FFFFFF" text="#000000">
+
+<table border="1" bgcolor="#007F7F" cellpadding="2">
+ <tr>
+ <td bgcolor="#FFFFFF"><img src="../c++boost.gif" alt="c++boost.gif (8819 bytes)" WIDTH="277" HEIGHT="86"></td>
+ <td><a href="../index.htm"><font face="Arial" color="#FFFFFF"><big>Home </big></font></a></td>
+ <td><a href="../libraries.htm"><font face="Arial" color="#FFFFFF"><big>Libraries </big></font></a></td>
+ <td><a href="../people.htm"><font face="Arial" color="#FFFFFF"><big>People </big></font></a></td>
+ <td><a href="../more/index.htm"><font face="Arial" color="#FFFFFF"><big>More </big></font></a></td>
+ <td><a href="../more/faq.htm"><font face="Arial" color="#FFFFFF"><big>FAQ </big></font></a></td>
+ </tr>
+</table>
+
+<p><a href="valentin_bonnard.jpg"><img src="valentin_bonnard_small.jpg" alt="valentin_bonnard.jpg (18207 bytes)" border="0" align="left" hspace="10" vspace="5" WIDTH="100" HEIGHT="133"></a>Valentin Bonnard is currently studying the semantics of
+programming languages and logical proofs. In his spare time, he writes C++ programs, and
+participates in newsgroup discussions about C++. He is also a member of AFNOR, the French
+C++ standardisation committee. </p>
+</body>
+</html>
diff --git a/people/valentin_bonnard.jpg b/people/valentin_bonnard.jpg
new file mode 100644
index 0000000000..fb3d7afde1
--- /dev/null
+++ b/people/valentin_bonnard.jpg
Binary files differ
diff --git a/people/valentin_bonnard_small.jpg b/people/valentin_bonnard_small.jpg
new file mode 100644
index 0000000000..6bc8cdb71c
--- /dev/null
+++ b/people/valentin_bonnard_small.jpg
Binary files differ