|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r70709 - in branches/release: boost boost/bimap boost/gil boost/graph boost/icl boost/intrusive boost/iterator boost/msm boost/numeric/ublas boost/property_tree boost/signals boost/spirit boost/spirit/home boost/spirit/home/karma boost/spirit/home/support boost/typeof boost/uuid boost/variant boost/wave libs/iterator libs/iterator/doc libs/iterator/test
From: dnljms_at_[hidden]
Date: 2011-03-29 17:17:13
Author: danieljames
Date: 2011-03-29 17:17:11 EDT (Tue, 29 Mar 2011)
New Revision: 70709
URL: http://svn.boost.org/trac/boost/changeset/70709
Log:
Iterator: merge several changes from trunk.
- Update iterator_facade test for #1019
(header change already merged).
- Category of each iterator is reduced to a known category before we try to
find a minimum. Fixes #1517.
- `function_input_iterator` from Dean Michael Berris. Fixes #2893
- Fix typo in `boost/iterator.hpp`. Fixes #3434.
- Always include `add_reference` header in iterator adaptor header.
Did not merge changes for #1427.
Added:
branches/release/boost/iterator/function_input_iterator.hpp
- copied, changed from r62615, /trunk/boost/iterator/function_input_iterator.hpp
branches/release/libs/iterator/doc/function_input_iterator.html
- copied unchanged from r62624, /trunk/libs/iterator/doc/function_input_iterator.html
branches/release/libs/iterator/doc/function_input_iterator.rst
- copied unchanged from r62624, /trunk/libs/iterator/doc/function_input_iterator.rst
branches/release/libs/iterator/test/function_input_iterator_test.cpp
- copied unchanged from r63145, /trunk/libs/iterator/test/function_input_iterator_test.cpp
Properties modified:
branches/release/boost/ (props changed)
branches/release/boost/bimap/ (props changed)
branches/release/boost/concept_check.hpp (props changed)
branches/release/boost/config.hpp (props changed)
branches/release/boost/gil/ (props changed)
branches/release/boost/graph/ (props changed)
branches/release/boost/icl/ (props changed)
branches/release/boost/intrusive/ (props changed)
branches/release/boost/iterator/ (props changed)
branches/release/boost/iterator/iterator_facade.hpp (props changed)
branches/release/boost/msm/ (props changed)
branches/release/boost/numeric/ublas/ (props changed)
branches/release/boost/property_tree/ (props changed)
branches/release/boost/signals/ (props changed)
branches/release/boost/spirit/ (props changed)
branches/release/boost/spirit/home/ (props changed)
branches/release/boost/spirit/home/karma/ (props changed)
branches/release/boost/spirit/home/support/attributes.hpp (props changed)
branches/release/boost/token_functions.hpp (props changed)
branches/release/boost/typeof/register_functions.hpp (props changed)
branches/release/boost/typeof/register_functions_iterate.hpp (props changed)
branches/release/boost/typeof/typeof.hpp (props changed)
branches/release/boost/typeof/unsupported.hpp (props changed)
branches/release/boost/uuid/ (props changed)
branches/release/boost/variant/ (props changed)
branches/release/boost/wave/ (props changed)
branches/release/libs/iterator/ (props changed)
Text files modified:
branches/release/boost/iterator.hpp | 2
branches/release/boost/iterator/function_input_iterator.hpp | 106 ++++++++++++++++++++++++++++++++++++---
branches/release/boost/iterator/iterator_adaptor.hpp | 8 --
branches/release/boost/iterator/zip_iterator.hpp | 2
branches/release/libs/iterator/doc/index.html | 44 ++++++++--------
branches/release/libs/iterator/doc/index.rst | 14 ++++-
branches/release/libs/iterator/doc/sources.py | 1
branches/release/libs/iterator/test/Jamfile.v2 | 1
branches/release/libs/iterator/test/iterator_facade.cpp | 6 ++
branches/release/libs/iterator/test/zip_iterator_test.cpp | 24 +++++++++
10 files changed, 164 insertions(+), 44 deletions(-)
Modified: branches/release/boost/iterator.hpp
==============================================================================
--- branches/release/boost/iterator.hpp (original)
+++ branches/release/boost/iterator.hpp 2011-03-29 17:17:11 EDT (Tue, 29 Mar 2011)
@@ -1,4 +1,4 @@
-// interator.hpp workarounds for non-conforming standard libraries ---------//
+// iterator.hpp workarounds for non-conforming standard libraries ---------//
// (C) Copyright Beman Dawes 2000. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
Copied: branches/release/boost/iterator/function_input_iterator.hpp (from r62615, /trunk/boost/iterator/function_input_iterator.hpp)
==============================================================================
--- /trunk/boost/iterator/function_input_iterator.hpp (original)
+++ branches/release/boost/iterator/function_input_iterator.hpp 2011-03-29 17:17:11 EDT (Tue, 29 Mar 2011)
@@ -7,23 +7,29 @@
#ifndef BOOST_FUNCTION_INPUT_ITERATOR
#define BOOST_FUNCTION_INPUT_ITERATOR
+#include <boost/mpl/if.hpp>
+#include <boost/function_types/is_function_pointer.hpp>
+#include <boost/function_types/is_function_reference.hpp>
+#include <boost/function_types/result_type.hpp>
#include <boost/iterator/iterator_facade.hpp>
namespace boost {
- template <class Function, class Input>
+ namespace impl {
+
+ template <class Function, class Input>
class function_input_iterator
- : public iterator_facade<
+ : public iterator_facade<
function_input_iterator<Function, Input>,
typename Function::result_type,
single_pass_traversal_tag,
typename Function::result_type const &
>
- {
+ {
public:
function_input_iterator() {}
- function_input_iterator(Function * f_, Input state_ = Input())
- : f(f_), state(state_), value((*f)()) {}
+ function_input_iterator(Function & f_, Input state_ = Input())
+ : f(&f_), state(state_), value((*f)()) {}
void increment() {
value = (*f)();
@@ -31,8 +37,8 @@
}
typename Function::result_type const &
- dereference() const {
- return value;
+ dereference() const {
+ return value;
}
bool equal(function_input_iterator const & other) const {
@@ -43,13 +49,93 @@
Function * f;
Input state;
typename Function::result_type value;
+ };
+
+ template <class Function, class Input>
+ class function_pointer_input_iterator
+ : public iterator_facade<
+ function_pointer_input_iterator<Function, Input>,
+ typename function_types::result_type<Function>::type,
+ single_pass_traversal_tag,
+ typename function_types::result_type<Function>::type const &
+ >
+ {
+ public:
+ function_pointer_input_iterator() {}
+ function_pointer_input_iterator(Function &f_, Input state_ = Input())
+ : f(f_), state(state_), value((*f)())
+ {}
+
+ void increment() {
+ value = (*f)();
+ ++state;
+ }
+
+ typename function_types::result_type<Function>::type const &
+ dereference() const {
+ return value;
+ }
+
+ bool equal(function_pointer_input_iterator const & other) const {
+ return f == other.f && state == other.state;
+ }
+
+ private:
+ Function f;
+ Input state;
+ typename function_types::result_type<Function>::type value;
+ };
+
+ template <class Function, class Input>
+ class function_reference_input_iterator
+ : public function_pointer_input_iterator<Function*,Input>
+ {
+ public:
+ function_reference_input_iterator(Function & f_, Input state_ = Input())
+ : function_pointer_input_iterator<Function*,Input>(&f_, state_)
+ {}
+ };
+
+ } // namespace impl
+
+ template <class Function, class Input>
+ class function_input_iterator
+ : public mpl::if_<
+ function_types::is_function_pointer<Function>,
+ impl::function_pointer_input_iterator<Function,Input>,
+ typename mpl::if_<
+ function_types::is_function_reference<Function>,
+ impl::function_reference_input_iterator<Function,Input>,
+ impl::function_input_iterator<Function,Input>
+ >::type
+ >::type
+ {
+ typedef typename mpl::if_<
+ function_types::is_function_pointer<Function>,
+ impl::function_pointer_input_iterator<Function,Input>,
+ typename mpl::if_<
+ function_types::is_function_reference<Function>,
+ impl::function_reference_input_iterator<Function,Input>,
+ impl::function_input_iterator<Function,Input>
+ >::type
+ >::type base_type;
+ public:
+ function_input_iterator(Function & f, Input i)
+ : base_type(f, i) {}
};
template <class Function, class Input>
inline function_input_iterator<Function, Input>
- make_function_input_iterator(Function & f, Input state) {
- typedef function_input_iterator<Function, Input> result_t;
- return result_t(&f, state);
+ make_function_input_iterator(Function & f, Input state) {
+ typedef function_input_iterator<Function, Input> result_t;
+ return result_t(f, state);
+ }
+
+ template <class Function, class Input>
+ inline function_input_iterator<Function*, Input>
+ make_function_input_iterator(Function * f, Input state) {
+ typedef function_input_iterator<Function*, Input> result_t;
+ return result_t(f, state);
}
struct infinite {
Modified: branches/release/boost/iterator/iterator_adaptor.hpp
==============================================================================
--- branches/release/boost/iterator/iterator_adaptor.hpp (original)
+++ branches/release/boost/iterator/iterator_adaptor.hpp 2011-03-29 17:17:11 EDT (Tue, 29 Mar 2011)
@@ -24,15 +24,9 @@
#ifdef BOOST_ITERATOR_REF_CONSTNESS_KILLS_WRITABILITY
# include <boost/type_traits/remove_reference.hpp>
-
-# if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x610))
-# include <boost/type_traits/add_reference.hpp>
-# endif
-
-#else
-# include <boost/type_traits/add_reference.hpp>
#endif
+#include <boost/type_traits/add_reference.hpp>
#include <boost/iterator/detail/config_def.hpp>
#include <boost/iterator/iterator_traits.hpp>
Modified: branches/release/boost/iterator/zip_iterator.hpp
==============================================================================
--- branches/release/boost/iterator/zip_iterator.hpp (original)
+++ branches/release/boost/iterator/zip_iterator.hpp 2011-03-29 17:17:11 EDT (Tue, 29 Mar 2011)
@@ -357,7 +357,7 @@
{
typedef typename tuple_impl_specific::tuple_meta_transform<
IteratorTuple
- , iterator_traversal<>
+ , pure_traversal_tag<iterator_traversal<> >
>::type tuple_of_traversal_tags;
typedef typename tuple_impl_specific::tuple_meta_accumulate<
Modified: branches/release/libs/iterator/doc/index.html
==============================================================================
--- branches/release/libs/iterator/doc/index.html (original)
+++ branches/release/libs/iterator/doc/index.html 2011-03-29 17:17:11 EDT (Tue, 29 Mar 2011)
@@ -3,7 +3,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
<title>The Boost.Iterator Library Boost</title>
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
</head>
@@ -14,9 +14,6 @@
<!-- Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
-<!-- Distributed under the Boost -->
-<!-- Software License, Version 1.0. (See accompanying -->
-<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<hr class="docutils" />
<table class="docutils field-list" frame="void" rules="none">
<col class="field-name" />
@@ -60,21 +57,21 @@
<div class="contents topic" id="table-of-contents">
<p class="topic-title first"><strong>Table of Contents</strong></p>
<ul class="simple">
-<li><a class="reference internal" href="#new-style-iterators" id="id22">New-Style Iterators</a></li>
-<li><a class="reference internal" href="#iterator-facade-and-adaptor" id="id23">Iterator Facade and Adaptor</a></li>
-<li><a class="reference internal" href="#specialized-adaptors" id="id24">Specialized Adaptors</a></li>
-<li><a class="reference internal" href="#iterator-utilities" id="id25">Iterator Utilities</a><ul>
-<li><a class="reference internal" href="#traits" id="id26">Traits</a></li>
-<li><a class="reference internal" href="#testing-and-concept-checking" id="id27">Testing and Concept Checking</a></li>
+<li><a class="reference internal" href="#new-style-iterators" id="id23">New-Style Iterators</a></li>
+<li><a class="reference internal" href="#iterator-facade-and-adaptor" id="id24">Iterator Facade and Adaptor</a></li>
+<li><a class="reference internal" href="#specialized-adaptors" id="id25">Specialized Adaptors</a></li>
+<li><a class="reference internal" href="#iterator-utilities" id="id26">Iterator Utilities</a><ul>
+<li><a class="reference internal" href="#traits" id="id27">Traits</a></li>
+<li><a class="reference internal" href="#testing-and-concept-checking" id="id28">Testing and Concept Checking</a></li>
</ul>
</li>
-<li><a class="reference internal" href="#upgrading-from-the-old-boost-iterator-adaptor-library" id="id28">Upgrading from the old Boost Iterator Adaptor Library</a></li>
-<li><a class="reference internal" href="#history" id="id29">History</a></li>
+<li><a class="reference internal" href="#upgrading-from-the-old-boost-iterator-adaptor-library" id="id29">Upgrading from the old Boost Iterator Adaptor Library</a></li>
+<li><a class="reference internal" href="#history" id="id30">History</a></li>
</ul>
</div>
<hr class="docutils" />
<div class="section" id="new-style-iterators">
-<h1><a class="toc-backref" href="#id22">New-Style Iterators</a></h1>
+<h1><a class="toc-backref" href="#id23">New-Style Iterators</a></h1>
<p>The iterator categories defined in C++98 are extremely limiting
because they bind together two orthogonal concepts: traversal and
element access. For example, because a random access iterator is
@@ -93,7 +90,7 @@
<a class="reference external" href="new-iter-concepts.html">Standard Proposal For New-Style Iterators</a> (<a class="reference external" href="new-iter-concepts.pdf">PDF</a>)</blockquote>
</div>
<div class="section" id="iterator-facade-and-adaptor">
-<h1><a class="toc-backref" href="#id23">Iterator Facade and Adaptor</a></h1>
+<h1><a class="toc-backref" href="#id24">Iterator Facade and Adaptor</a></h1>
<p>Writing standard-conforming iterators is tricky, but the need comes
up often. In order to ease the implementation of new iterators,
the Boost.Iterator library provides the <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> class template,
@@ -120,7 +117,7 @@
<p>for more details.</p>
</div>
<div class="section" id="specialized-adaptors">
-<h1><a class="toc-backref" href="#id24">Specialized Adaptors</a></h1>
+<h1><a class="toc-backref" href="#id25">Specialized Adaptors</a></h1>
<p>The iterator library supplies a useful suite of standard-conforming
iterator templates based on the Boost <a class="reference internal" href="#iterator-facade-and-adaptor">iterator facade and adaptor</a>.</p>
<ul class="simple">
@@ -128,6 +125,9 @@
Implements a "lazy sequence"</li>
<li><a class="reference external" href="filter_iterator.html"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt></a> (<a class="reference external" href="filter_iterator.pdf">PDF</a>): an iterator over the subset of elements of some
sequence which satisfy a given predicate</li>
+<li><a class="reference external" href="function_input_iterator.html"><tt class="docutils literal"><span class="pre">function_input_iterator</span></tt></a> (<a class="reference external" href="function_input_iterator.pdf">PDF</a>): an input iterator wrapping a generator (nullary
+function object); each time the iterator is dereferenced, the function object
+is called to get the value to return.</li>
<li><a class="reference external" href="function_output_iterator.html"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt></a> (<a class="reference external" href="function_output_iterator.pdf">PDF</a>): an output iterator wrapping a unary function
object; each time an element is written into the dereferenced
iterator, it is passed as a parameter to the function object.</li>
@@ -149,9 +149,9 @@
</ul>
</div>
<div class="section" id="iterator-utilities">
-<h1><a class="toc-backref" href="#id25">Iterator Utilities</a></h1>
+<h1><a class="toc-backref" href="#id26">Iterator Utilities</a></h1>
<div class="section" id="traits">
-<h2><a class="toc-backref" href="#id26">Traits</a></h2>
+<h2><a class="toc-backref" href="#id27">Traits</a></h2>
<ul class="simple">
<li><a class="reference external" href="pointee.html"><tt class="docutils literal"><span class="pre">pointee.hpp</span></tt></a> (<a class="reference external" href="pointee.pdf">PDF</a>): Provides the capability to deduce the referent types
of pointers, smart pointers and iterators in generic code. Used
@@ -165,7 +165,7 @@
<!-- comment! __ interoperable.pdf -->
</div>
<div class="section" id="testing-and-concept-checking">
-<h2><a class="toc-backref" href="#id27">Testing and Concept Checking</a></h2>
+<h2><a class="toc-backref" href="#id28">Testing and Concept Checking</a></h2>
<ul class="simple">
<li><a class="reference external" href="iterator_concepts.html"><tt class="docutils literal"><span class="pre">iterator_concepts.hpp</span></tt></a> (<a class="reference external" href="iterator_concepts.pdf">PDF</a>): Concept checking classes for the new iterator concepts.</li>
<li><a class="reference external" href="iterator_archetypes.html"><tt class="docutils literal"><span class="pre">iterator_archetypes.hpp</span></tt></a> (<a class="reference external" href="iterator_archetypes.pdf">PDF</a>): Concept archetype classes for the new iterators concepts.</li>
@@ -173,7 +173,7 @@
</div>
</div>
<div class="section" id="upgrading-from-the-old-boost-iterator-adaptor-library">
-<h1><a class="toc-backref" href="#id28">Upgrading from the old Boost Iterator Adaptor Library</a></h1>
+<h1><a class="toc-backref" href="#id29">Upgrading from the old Boost Iterator Adaptor Library</a></h1>
<p id="upgrading">If you have been using the old Boost Iterator Adaptor library to
implement iterators, you probably wrote a <tt class="docutils literal"><span class="pre">Policies</span></tt> class which
captures the core operations of your iterator. In the new library
@@ -183,7 +183,7 @@
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> specialization you needed; in the new library
design you don't need a type generator (though may want to keep it
around as a compatibility aid for older code) because, due to the
-use of the Curiously Recurring Template Pattern (CRTP) <a class="citation-reference" href="#cop95" id="id21">[Cop95]</a>,
+use of the Curiously Recurring Template Pattern (CRTP) <a class="citation-reference" href="#cop95" id="id22">[Cop95]</a>,
you can now define the iterator class yourself and acquire
functionality through inheritance from <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> or
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. As a result, you also get much finer control
@@ -198,7 +198,7 @@
<tt class="docutils literal"><span class="pre">projection_iterator</span></tt> used to.</p>
</div>
<div class="section" id="history">
-<h1><a class="toc-backref" href="#id29">History</a></h1>
+<h1><a class="toc-backref" href="#id30">History</a></h1>
<p>In 2000 Dave Abrahams was writing an iterator for a container of
pointers, which would access the pointed-to elements when
dereferenced. Naturally, being a library writer, he decided to
@@ -226,7 +226,7 @@
<table class="docutils citation" frame="void" id="cop95" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
-<tr><td class="label"><a class="fn-backref" href="#id21">[Cop95]</a></td><td>[Coplien, 1995] Coplien, J., Curiously Recurring Template
+<tr><td class="label"><a class="fn-backref" href="#id22">[Cop95]</a></td><td>[Coplien, 1995] Coplien, J., Curiously Recurring Template
Patterns, C++ Report, February 1995, pp. 24-27.</td></tr>
</tbody>
</table>
Modified: branches/release/libs/iterator/doc/index.rst
==============================================================================
--- branches/release/libs/iterator/doc/index.rst (original)
+++ branches/release/libs/iterator/doc/index.rst 2011-03-29 17:17:11 EDT (Tue, 29 Mar 2011)
@@ -138,7 +138,11 @@
* |filter|_ (PDF__): an iterator over the subset of elements of some
sequence which satisfy a given predicate
-* |function|_ (PDF__): an output iterator wrapping a unary function
+* |function_input|_ (PDF__): an input iterator wrapping a generator (nullary
+ function object); each time the iterator is dereferenced, the function object
+ is called to get the value to return.
+
+* |function_output|_ (PDF__): an output iterator wrapping a unary function
object; each time an element is written into the dereferenced
iterator, it is passed as a parameter to the function object.
@@ -171,8 +175,12 @@
.. _filter: filter_iterator.html
__ filter_iterator.pdf
-.. |function| replace:: ``function_output_iterator``
-.. _function: function_output_iterator.html
+.. |function_input| replace:: ``function_input_iterator``
+.. _function_input: function_input_iterator.html
+__ function_input_iterator.pdf
+
+.. |function_output| replace:: ``function_output_iterator``
+.. _function_output: function_output_iterator.html
__ function_output_iterator.pdf
.. |indirect| replace:: ``indirect_iterator``
Modified: branches/release/libs/iterator/doc/sources.py
==============================================================================
--- branches/release/libs/iterator/doc/sources.py (original)
+++ branches/release/libs/iterator/doc/sources.py 2011-03-29 17:17:11 EDT (Tue, 29 Mar 2011)
@@ -6,6 +6,7 @@
'counting_iterator.rst',
'facade-and-adaptor.rst',
'filter_iterator.rst',
+'function_input_iterator.rst',
'function_output_iterator.rst',
'index.rst',
'indirect_iterator.rst',
Modified: branches/release/libs/iterator/test/Jamfile.v2
==============================================================================
--- branches/release/libs/iterator/test/Jamfile.v2 (original)
+++ branches/release/libs/iterator/test/Jamfile.v2 2011-03-29 17:17:11 EDT (Tue, 29 Mar 2011)
@@ -43,5 +43,6 @@
[ run iterator_traits_test.cpp ]
[ run permutation_iterator_test.cpp : : : # <stlport-iostream>on
]
+ [ run function_input_iterator_test.cpp ]
;
Modified: branches/release/libs/iterator/test/iterator_facade.cpp
==============================================================================
--- branches/release/libs/iterator/test/iterator_facade.cpp (original)
+++ branches/release/libs/iterator/test/iterator_facade.cpp 2011-03-29 17:17:11 EDT (Tue, 29 Mar 2011)
@@ -87,6 +87,10 @@
}
};
+template <class T, class U>
+void same_type(U const&)
+{ BOOST_MPL_ASSERT((boost::is_same<T,U>)); }
+
int main()
{
int state = 0;
@@ -101,6 +105,8 @@
input_iter p;
(*p).mutator();
p->mutator();
+
+ same_type<input_iter::pointer>(p.operator->());
return boost::report_errors();
}
Modified: branches/release/libs/iterator/test/zip_iterator_test.cpp
==============================================================================
--- branches/release/libs/iterator/test/zip_iterator_test.cpp (original)
+++ branches/release/libs/iterator/test/zip_iterator_test.cpp 2011-03-29 17:17:11 EDT (Tue, 29 Mar 2011)
@@ -46,6 +46,7 @@
#include <vector>
#include <list>
#include <set>
+#include <string>
#include <functional>
#include <boost/tuple/tuple.hpp>
#include <boost/iterator/transform_iterator.hpp>
@@ -60,6 +61,27 @@
typename boost::iterator_traversal<It>::type
>
{};
+
+
+/// Tests for https://svn.boost.org/trac/boost/ticket/1517
+int to_value(int const &v)
+{
+ return v;
+}
+
+void category_test()
+{
+ std::list<int> rng1;
+ std::string rng2;
+
+ boost::make_zip_iterator(
+ boost::make_tuple(
+ boost::make_transform_iterator(rng1.begin(), &to_value), // BidirectionalInput
+ rng2.begin() // RandomAccess
+ )
+ );
+}
+///
/////////////////////////////////////////////////////////////////////////////
//
@@ -70,6 +92,8 @@
int main( void )
{
+ category_test();
+
std::cout << "\n"
<< "***********************************************\n"
<< "* *\n"
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk