<trclass="field"><thclass="field-name">Organization:</th><tdclass="field-body"><aclass="reference"href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University Bloomington</td>
<trclass="field"><thclass="field-name">Copyright:</th><tdclass="field-body">Copyright David Abrahams, Jeremy Siek 2003. Use, modification and
distribution is subject to the Boost Software License,
Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
at <aclass="reference"href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</td>
</tr>
</tbody>
</table>
<divclass="section"id="introduction">
<h1><aname="introduction">Introduction</a></h1>
<p>The new iterator categories are intended to correspond to the old
iterator categories, as specified in a diagram in <aclass="reference"href="http://www.boost-consulting.com/writing/n1550.html">N1550</a>. For example,
an iterator categorized as a mutable Forward Iterator under the old
scheme is now a Writable, Lvalue, and Foward Traversal iterator.
However, there is a problem with this correspondance, the new iterator
categories place requirements on the <ttclass="literal"><spanclass="pre">iterator_traits<X>::reference</span></tt>
type whereas the standard iterator requirements say nothing about the
<ttclass="literal"><spanclass="pre">reference</span></tt> type . In particular, the new Readable Iterator
requirements say that the return type of <ttclass="literal"><spanclass="pre">*a</span></tt> must be
<ttclass="literal"><spanclass="pre">iterator_traits<X>::reference</span></tt> and the Lvalue Iterator requirements
says that <ttclass="literal"><spanclass="pre">iterator_traits<X>::reference</span></tt> must be <ttclass="literal"><spanclass="pre">T&</span></tt> or <ttclass="literal"><spanclass="pre">const</span>
Generated by <aclass="reference"href="http://docutils.sourceforge.net/">Docutils</a> from <aclass="reference"href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.