Boost logo

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 &quot;lazy sequence&quot;</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