2003-07-29 22:25:39 +00:00
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
< 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" />
2011-03-29 21:17:11 +00:00
< meta name = "generator" content = "Docutils 0.6: http://docutils.sourceforge.net/" />
2003-11-24 05:02:46 +00:00
< title > The Boost.Iterator Library Boost</ title >
2007-11-03 03:25:13 +00:00
< link rel = "stylesheet" href = "../../../rst.css" type = "text/css" />
2003-07-29 22:25:39 +00:00
</ head >
< body >
2004-07-14 12:33:36 +00:00
< div class = "document" id = "the-boost-iterator-library-logo" >
2007-11-03 03:25:13 +00:00
< h1 class = "title" > The Boost.Iterator Library < a class = "reference external" href = "../../../index.htm" >< img alt = "Boost" src = "../../../boost.png" /></ a ></ h1 >
2006-09-11 22:08:18 +00:00
<!-- 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) -->
2005-05-20 15:32:55 +00:00
< hr class = "docutils" />
< table class = "docutils field-list" frame = "void" rules = "none" >
2003-07-29 22:25:39 +00:00
< col class = "field-name" />
< col class = "field-body" />
< tbody valign = "top" >
< tr class = "field" >< th class = "field-name" > Authors:</ th >< td class = "field-body" > David Abrahams, Jeremy Siek, Thomas Witt</ td >
</ tr >
2007-11-03 03:25:13 +00:00
< tr class = "field" >< th class = "field-name" > Contact:</ th >< td class = "field-body" >< a class = "reference external" href = "mailto:dave@boost-consulting.com" > dave@ boost-consulting.com</ a > , < a class = "reference external" href = "mailto:jsiek@osl.iu.edu" > jsiek@ osl.iu.edu</ a > , < a class = "reference external" href = "mailto:witt@styleadvisor.com" > witt@ styleadvisor.com</ a ></ td >
2003-07-29 22:25:39 +00:00
</ tr >
2007-11-03 03:25:13 +00:00
< tr class = "field" >< th class = "field-name" > organizations:</ th >< td class = "field-body" >< a class = "reference external" href = "http://www.boost-consulting.com" > Boost Consulting</ a > , Indiana University < a class = "reference external" href = "http://www.osl.iu.edu" > Open Systems
Lab</ a > , < a class = "reference external" href = "http://www.styleadvisor.com" > Zephyr Associates, Inc.</ a ></ td >
2003-07-29 22:25:39 +00:00
</ tr >
< tr class = "field" >< th class = "field-name" > date:</ th >< td class = "field-body" > $Date$</ td >
</ tr >
2004-11-02 14:31:27 +00:00
< tr class = "field" >< th class = "field-name" > copyright:</ th >< td class = "field-body" > Copyright David Abrahams, Jeremy Siek, Thomas Witt 2003.</ td >
2003-07-29 22:25:39 +00:00
</ tr >
</ tbody >
</ table >
2005-05-20 15:32:55 +00:00
< table class = "docutils field-list" frame = "void" rules = "none" >
2003-07-29 22:25:39 +00:00
< col class = "field-name" />
< col class = "field-body" />
< tbody valign = "top" >
2003-08-05 16:36:51 +00:00
< tr class = "field" >< th class = "field-name" > Abstract:</ th >< td class = "field-body" > The Boost Iterator Library contains two parts. The first
2008-02-10 16:39:38 +00:00
is a system of < a class = "reference external" href = "http://www.boost.org/more/generic_programming.html#concept" > concepts</ a > which extend the C++ standard
2003-11-24 05:02:46 +00:00
iterator requirements. The second is a framework of
components for building iterators based on these
2003-08-05 16:36:51 +00:00
extended concepts and includes several useful iterator
2003-11-24 05:02:46 +00:00
adaptors. The extended iterator concepts have been
2004-04-29 00:38:46 +00:00
carefully designed so that old-style iterators
2003-11-24 05:02:46 +00:00
can fit in the new concepts and so that new-style
iterators will be compatible with old-style algorithms,
though algorithms may need to be updated if they want to
take full advantage of the new-style iterator
capabilities. Several components of this library have
been accepted into the C++ standard technical report.
The components of the Boost Iterator Library replace the
older Boost Iterator Adaptor Library.</ td >
2003-07-29 22:25:39 +00:00
</ tr >
</ tbody >
</ table >
2007-11-03 03:25:13 +00:00
< div class = "contents topic" id = "table-of-contents" >
< p class = "topic-title first" >< strong > Table of Contents</ strong ></ p >
2003-07-29 22:25:39 +00:00
< ul class = "simple" >
2011-03-29 21:17:11 +00:00
< 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 >
2003-07-29 22:25:39 +00:00
</ ul >
</ li >
2011-03-29 21:17:11 +00:00
< 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 >
2003-07-29 22:25:39 +00:00
</ ul >
</ div >
2005-05-20 15:32:55 +00:00
< hr class = "docutils" />
2007-11-03 03:25:13 +00:00
< div class = "section" id = "new-style-iterators" >
2011-03-29 21:17:11 +00:00
< h1 >< a class = "toc-backref" href = "#id23" > New-Style Iterators</ a ></ h1 >
2003-07-29 22:25:39 +00:00
< 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
2003-09-14 02:17:41 +00:00
required to return a reference (and not a proxy) when dereferenced,
it is impossible to capture the capabilities of
2005-05-20 15:32:55 +00:00
< tt class = "docutils literal" >< span class = "pre" > vector< bool> ::iterator</ span ></ tt > using the C++98 categories. This is the
infamous " < tt class = "docutils literal" >< span class = "pre" > vector< bool> </ span ></ tt > is not a container, and its iterators
2003-09-14 02:17:41 +00:00
aren't random access iterators" , debacle about which Herb Sutter
2007-11-03 03:25:13 +00:00
wrote two papers for the standards comittee (< a class = "reference external" href = "http://www.gotw.ca/publications/N1185.pdf" > n1185</ a > and < a class = "reference external" href = "http://www.gotw.ca/publications/N1211.pdf" > n1211</ a > ),
and a < a class = "reference external" href = "http://www.gotw.ca/gotw/050.htm" > Guru of the Week</ a > . New-style iterators go well beyond
2005-05-20 15:32:55 +00:00
patching up < tt class = "docutils literal" >< span class = "pre" > vector< bool> </ span ></ tt > , though: there are lots of other
2003-09-14 02:17:41 +00:00
iterators already in use which can't be adequately represented by
the existing concepts. For details about the new iterator
concepts, see our</ p >
2003-07-29 22:25:39 +00:00
< blockquote >
2007-11-03 03:25:13 +00:00
< 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 >
2003-07-29 22:25:39 +00:00
</ div >
2007-11-03 03:25:13 +00:00
< div class = "section" id = "iterator-facade-and-adaptor" >
2011-03-29 21:17:11 +00:00
< h1 >< a class = "toc-backref" href = "#id24" > Iterator Facade and Adaptor</ a ></ h1 >
2003-11-24 05:02:46 +00:00
< p > Writing standard-conforming iterators is tricky, but the need comes
up often. In order to ease the implementation of new iterators,
2005-05-20 15:32:55 +00:00
the Boost.Iterator library provides the < tt class = "docutils literal" >< span class = "pre" > iterator_facade</ span ></ tt > class template,
2003-11-24 05:02:46 +00:00
which implements many useful defaults and compile-time checks
2004-01-18 20:54:59 +00:00
designed to help the iterator author ensure that his iterator is
2004-01-10 19:00:48 +00:00
correct.</ p >
< p > It is also common to define a new iterator that is similar to some
underlying iterator or iterator-like type, but that modifies some
aspect of the underlying type's behavior. For that purpose, the
2005-05-20 15:32:55 +00:00
library supplies the < tt class = "docutils literal" >< span class = "pre" > iterator_adaptor</ span ></ tt > class template, which is specially
2004-01-10 19:00:48 +00:00
designed to take advantage of as much of the underlying type's
behavior as possible.</ p >
2004-01-12 15:14:26 +00:00
< p > The documentation for these two classes can be found at the following
web pages:</ p >
< ul class = "simple" >
2007-11-03 03:25:13 +00:00
< li >< a class = "reference external" href = "iterator_facade.html" >< tt class = "docutils literal" >< span class = "pre" > iterator_facade</ span ></ tt ></ a > (< a class = "reference external" href = "iterator_facade.pdf" > PDF</ a > )</ li >
< li >< a class = "reference external" href = "iterator_adaptor.html" >< tt class = "docutils literal" >< span class = "pre" > iterator_adaptor</ span ></ tt ></ a > (< a class = "reference external" href = "iterator_adaptor.pdf" > PDF</ a > )</ li >
2004-01-12 15:14:26 +00:00
</ ul >
2007-11-03 03:25:13 +00:00
< p > Both < tt class = "docutils literal" >< span class = "pre" > iterator_facade</ span ></ tt > and < tt class = "docutils literal" >< span class = "pre" > iterator_adaptor</ span ></ tt > as well as many of the < a class = "reference internal" href = "#specialized-adaptors" > specialized
2003-11-24 05:02:46 +00:00
adaptors</ a > mentioned below have been proposed for standardization,
and accepted into the first C++ technical report; see our</ p >
2003-07-29 22:25:39 +00:00
< blockquote >
2007-11-03 03:25:13 +00:00
< a class = "reference external" href = "facade-and-adaptor.html" > Standard Proposal For Iterator Facade and Adaptor</ a > (< a class = "reference external" href = "facade-and-adaptor.pdf" > PDF</ a > )</ blockquote >
2003-07-29 22:25:39 +00:00
< p > for more details.</ p >
</ div >
2007-11-03 03:25:13 +00:00
< div class = "section" id = "specialized-adaptors" >
2011-03-29 21:17:11 +00:00
< h1 >< a class = "toc-backref" href = "#id25" > Specialized Adaptors</ a ></ h1 >
2003-07-29 22:25:39 +00:00
< p > The iterator library supplies a useful suite of standard-conforming
2007-11-03 03:25:13 +00:00
iterator templates based on the Boost < a class = "reference internal" href = "#iterator-facade-and-adaptor" > iterator facade and adaptor</ a > .</ p >
2003-07-29 22:25:39 +00:00
< ul class = "simple" >
2007-11-03 03:25:13 +00:00
< li >< a class = "reference external" href = "counting_iterator.html" >< tt class = "docutils literal" >< span class = "pre" > counting_iterator</ span ></ tt ></ a > (< a class = "reference external" href = "counting_iterator.pdf" > PDF</ a > ): an iterator over a sequence of consecutive values.
2003-07-29 22:25:39 +00:00
Implements a " lazy sequence" </ li >
2007-11-03 03:25:13 +00:00
< 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
2003-07-29 22:25:39 +00:00
sequence which satisfy a given predicate</ li >
2011-03-29 21:17:11 +00:00
< 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 >
2007-11-03 03:25:13 +00:00
< 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
2004-02-01 03:58:49 +00:00
object; each time an element is written into the dereferenced
iterator, it is passed as a parameter to the function object.</ li >
2017-08-28 21:45:03 +03:00
< li >< a class = "reference external" href = "generator_iterator.htm" >< tt class = "docutils literal" >< span class = "pre" > generator_iterator</ span ></ tt ></ a > : an input iterator wrapping a reference to a generator (nullary function object);
each time the iterator is dereferenced, the function object
is called to get the value to return. This is a more outdated analogue of < tt class = "docutils literal" >< span class = "pre" > function_input_iterator</ span ></ tt > .</ li >
2007-11-03 03:25:13 +00:00
< li >< a class = "reference external" href = "indirect_iterator.html" >< tt class = "docutils literal" >< span class = "pre" > indirect_iterator</ span ></ tt ></ a > (< a class = "reference external" href = "indirect_iterator.pdf" > PDF</ a > ): an iterator over the objects < em > pointed-to</ em > by the
2003-07-29 22:25:39 +00:00
elements of some sequence.</ li >
2007-11-03 03:25:13 +00:00
< li >< a class = "reference external" href = "permutation_iterator.html" >< tt class = "docutils literal" >< span class = "pre" > permutation_iterator</ span ></ tt ></ a > (< a class = "reference external" href = "permutation_iterator.pdf" > PDF</ a > ): an iterator over the elements of some random-access
2003-07-29 22:25:39 +00:00
sequence, rearranged according to some sequence of integer indices.</ li >
2007-11-03 03:25:13 +00:00
< li >< a class = "reference external" href = "reverse_iterator.html" >< tt class = "docutils literal" >< span class = "pre" > reverse_iterator</ span ></ tt ></ a > (< a class = "reference external" href = "reverse_iterator.pdf" > PDF</ a > ): an iterator which traverses the elements of some
2003-07-29 22:25:39 +00:00
bidirectional sequence in reverse. Corrects many of the
2005-05-20 15:32:55 +00:00
shortcomings of C++98's < tt class = "docutils literal" >< span class = "pre" > std::reverse_iterator</ span ></ tt > .</ li >
2007-11-03 03:25:13 +00:00
< li >< a class = "reference external" href = "../../utility/shared_container_iterator.html" >< tt class = "docutils literal" >< span class = "pre" > shared_container_iterator</ span ></ tt ></ a > : an iterator over elements of a container whose
lifetime is maintained by a < a class = "reference external" href = "../../smart_ptr/shared_ptr.htm" >< tt class = "docutils literal" >< span class = "pre" > shared_ptr</ span ></ tt ></ a > stored in the iterator.</ li >
< li >< a class = "reference external" href = "transform_iterator.html" >< tt class = "docutils literal" >< span class = "pre" > transform_iterator</ span ></ tt ></ a > (< a class = "reference external" href = "transform_iterator.pdf" > PDF</ a > ): an iterator over elements which are the result of
2003-07-29 22:25:39 +00:00
applying some functional transformation to the elements of an
underlying sequence. This component also replaces the old
2005-05-20 15:32:55 +00:00
< tt class = "docutils literal" >< span class = "pre" > projection_iterator_adaptor</ span ></ tt > .</ li >
2007-11-03 03:25:13 +00:00
< li >< a class = "reference external" href = "zip_iterator.html" >< tt class = "docutils literal" >< span class = "pre" > zip_iterator</ span ></ tt ></ a > (< a class = "reference external" href = "zip_iterator.pdf" > PDF</ a > ): an iterator over tuples of the elements at corresponding
2004-01-19 18:52:48 +00:00
positions of heterogeneous underlying iterators.</ li >
2003-07-29 22:25:39 +00:00
</ ul >
</ div >
2007-11-03 03:25:13 +00:00
< div class = "section" id = "iterator-utilities" >
2011-03-29 21:17:11 +00:00
< h1 >< a class = "toc-backref" href = "#id26" > Iterator Utilities</ a ></ h1 >
2007-11-03 03:25:13 +00:00
< div class = "section" id = "traits" >
2011-03-29 21:17:11 +00:00
< h2 >< a class = "toc-backref" href = "#id27" > Traits</ a ></ h2 >
2003-07-29 22:25:39 +00:00
< ul class = "simple" >
2007-11-03 03:25:13 +00:00
< 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
2004-01-13 23:03:18 +00:00
of pointers, smart pointers and iterators in generic code. Used
2005-05-20 15:32:55 +00:00
in < tt class = "docutils literal" >< span class = "pre" > indirect_iterator</ span ></ tt > .</ li >
2007-11-03 03:25:13 +00:00
< li >< a class = "reference external" href = "iterator_traits.html" >< tt class = "docutils literal" >< span class = "pre" > iterator_traits.hpp</ span ></ tt ></ a > (< a class = "reference external" href = "iterator_traits.pdf" > PDF</ a > ): Provides < a class = "reference external" href = "../../mpl/doc/index.html" > MPL</ a > -compatible metafunctions which
2003-07-29 22:25:39 +00:00
retrieve an iterator's traits. Also corrects for the deficiencies
2005-05-20 15:32:55 +00:00
of broken implementations of < tt class = "docutils literal" >< span class = "pre" > std::iterator_traits</ span ></ tt > .</ li >
2003-07-29 22:25:39 +00:00
</ ul >
2004-01-29 05:55:26 +00:00
<!-- * |interoperable|_ (PDF__): Provides an MPL_\ -compatible metafunction for
testing iterator interoperability -->
<!-- comment! __ interoperable.pdf -->
2003-07-29 22:25:39 +00:00
</ div >
2007-11-03 03:25:13 +00:00
< div class = "section" id = "testing-and-concept-checking" >
2011-03-29 21:17:11 +00:00
< h2 >< a class = "toc-backref" href = "#id28" > Testing and Concept Checking</ a ></ h2 >
2003-07-29 22:25:39 +00:00
< ul class = "simple" >
2007-11-03 03:25:13 +00:00
< 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 >
2003-07-29 22:25:39 +00:00
</ ul >
</ div >
</ div >
2007-11-03 03:25:13 +00:00
< div class = "section" id = "upgrading-from-the-old-boost-iterator-adaptor-library" >
2011-03-29 21:17:11 +00:00
< h1 >< a class = "toc-backref" href = "#id29" > Upgrading from the old Boost Iterator Adaptor Library</ a ></ h1 >
2006-09-11 22:08:18 +00:00
< p id = "upgrading" > If you have been using the old Boost Iterator Adaptor library to
2005-05-20 15:32:55 +00:00
implement iterators, you probably wrote a < tt class = "docutils literal" >< span class = "pre" > Policies</ span ></ tt > class which
2003-11-24 05:02:46 +00:00
captures the core operations of your iterator. In the new library
design, you'll move those same core operations into the body of the
iterator class itself. If you were writing a family of iterators,
2008-02-10 16:39:38 +00:00
you probably wrote a < a class = "reference external" href = "http://www.boost.org/more/generic_programming.html#type_generator" > type generator</ a > to build the
2005-05-20 15:32:55 +00:00
< tt class = "docutils literal" >< span class = "pre" > iterator_adaptor</ span ></ tt > specialization you needed; in the new library
2003-11-24 05:02:46 +00:00
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
2011-03-29 21:17:11 +00:00
use of the Curiously Recurring Template Pattern (CRTP) < a class = "citation-reference" href = "#cop95" id = "id22" > [Cop95]</ a > ,
2003-11-24 05:02:46 +00:00
you can now define the iterator class yourself and acquire
2005-05-20 15:32:55 +00:00
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
2003-11-24 05:02:46 +00:00
over how your iterator works: you can add additional constructors,
or even override the iterator functionality provided by the
library.</ p >
2005-05-20 15:32:55 +00:00
< p > If you're looking for the old < tt class = "docutils literal" >< span class = "pre" > projection_iterator</ span ></ tt > component,
its functionality has been merged into < tt class = "docutils literal" >< span class = "pre" > transform_iterator</ span ></ tt > : as
long as the function object's < tt class = "docutils literal" >< span class = "pre" > result_type</ span ></ tt > (or the < tt class = "docutils literal" >< span class = "pre" > Reference</ span ></ tt >
2003-11-24 05:02:46 +00:00
template argument, if explicitly specified) is a true reference
2005-05-20 15:32:55 +00:00
type, < tt class = "docutils literal" >< span class = "pre" > transform_iterator</ span ></ tt > will behave like
< tt class = "docutils literal" >< span class = "pre" > projection_iterator</ span ></ tt > used to.</ p >
2003-07-29 22:25:39 +00:00
</ div >
2007-11-03 03:25:13 +00:00
< div class = "section" id = "history" >
2011-03-29 21:17:11 +00:00
< h1 >< a class = "toc-backref" href = "#id30" > History</ a ></ h1 >
2003-07-29 22:25:39 +00:00
< 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
generalize the idea and the Boost Iterator Adaptor library was born.
Dave was inspired by some writings of Andrei Alexandrescu and chose a
policy based design (though he probably didn't capture Andrei's idea
very well - there was only one policy class for all the iterator's
orthogonal properties). Soon Jeremy Siek realized he would need the
library and they worked together to produce a " Boostified" version,
which was reviewed and accepted into the library. They wrote a paper
and made several important revisions of the code.</ p >
< p > Eventually, several shortcomings of the older library began to make
2003-11-24 05:02:46 +00:00
the need for a rewrite apparent. Dave and Jeremy started working
at the Santa Cruz C++ committee meeting in 2002, and had quickly
generated a working prototype. At the urging of Mat Marcus, they
decided to use the GenVoca/CRTP pattern approach, and moved the
policies into the iterator class itself. Thomas Witt expressed
interest and became the voice of strict compile-time checking for
the project, adding uses of the SFINAE technique to eliminate false
converting constructors and operators from the overload set. He
2005-05-20 15:32:55 +00:00
also recognized the need for a separate < tt class = "docutils literal" >< span class = "pre" > iterator_facade</ span ></ tt > , and
factored it out of < tt class = "docutils literal" >< span class = "pre" > iterator_adaptor</ span ></ tt > . Finally, after a
2003-11-24 05:02:46 +00:00
near-complete rewrite of the prototype, they came up with the
library you see today.</ p >
2005-05-20 15:32:55 +00:00
< table class = "docutils citation" frame = "void" id = "cop95" rules = "none" >
2003-11-24 05:02:46 +00:00
< colgroup >< col class = "label" />< col /></ colgroup >
< tbody valign = "top" >
2011-03-29 21:17:11 +00:00
< tr >< td class = "label" >< a class = "fn-backref" href = "#id22" > [Cop95]</ a ></ td >< td > [Coplien, 1995] Coplien, J., Curiously Recurring Template
2003-11-24 05:02:46 +00:00
Patterns, C++ Report, February 1995, pp. 24-27.</ td ></ tr >
</ tbody >
</ table >
2003-07-29 22:25:39 +00:00
<!-- LocalWords: Abrahams Siek Witt const bool Sutter's WG int UL LI href Lvalue
LocalWords: ReadableIterator WritableIterator SwappableIterator cv pre iter
LocalWords: ConstantLvalueIterator MutableLvalueIterator CopyConstructible TR
LocalWords: ForwardTraversalIterator BidirectionalTraversalIterator lvalue
LocalWords: RandomAccessTraversalIterator dereferenceable Incrementable tmp
LocalWords: incrementable xxx min prev inplace png oldeqnew AccessTag struct
LocalWords: TraversalTag typename lvalues DWA Hmm JGS -->
</ div >
2007-11-03 03:25:13 +00:00
</ div >
< div class = "footer" >
< hr class = "footer" />
< a class = "reference external" href = "index.rst" > View document source</ a > .
Generated by < a class = "reference external" href = "http://docutils.sourceforge.net/" > Docutils</ a > from < a class = "reference external" href = "http://docutils.sourceforge.net/rst.html" > reStructuredText</ a > source.
2003-07-29 22:25:39 +00:00
</ div >
</ body >
</ html >