<p>A <aclass="reference internal"href="./forward-iterator.html">Forward Iterator</a><ttclass="literal"><spanclass="pre">i</span></tt> is a type that represents a positional reference
to an element of a <aclass="reference internal"href="./forward-sequence.html">Forward Sequence</a>. It allows to access the element through
a dereference operation, and provides a way to obtain an iterator to
<li>An iterator can be <cite>dereferenceable</cite>, meaning that <ttclass="literal"><spanclass="pre"><ahref="./deref.html"class="identifier">deref</a><i>::type</span></tt>
<li>An iterator <ttclass="literal"><spanclass="pre">i</span></tt> is <cite>incrementable</cite> if there is a "next" iterator, that
is, if <ttclass="literal"><spanclass="pre"><ahref="./next.html"class="identifier">next</a><i>::type</span></tt> expression is well-defined; past-the-end iterators are
<li>An iterator <ttclass="literal"><spanclass="pre">j</span></tt> is <cite>reachable</cite> from an iterator <ttclass="literal"><spanclass="pre">i</span></tt> if , after recursive
application of <ttclass="literal"><spanclass="pre"><ahref="./next.html"class="identifier">next</a></span></tt> metafunction to <ttclass="literal"><spanclass="pre">i</span></tt> a finite number of times, <ttclass="literal"><spanclass="pre">i</span></tt>
<li>The notation [<ttclass="literal"><spanclass="pre">i</span></tt>,<ttclass="literal"><spanclass="pre">j</span></tt>) refers to a <cite>range</cite> of iterators beginning with
<ttclass="literal"><spanclass="pre">i</span></tt> and up to but not including <ttclass="literal"><spanclass="pre">j</span></tt>.</li>
<li>The range [<ttclass="literal"><spanclass="pre">i</span></tt>,<ttclass="literal"><spanclass="pre">j</span></tt>) is a <cite>valid range</cite> if <ttclass="literal"><spanclass="pre">j</span></tt> is reachable from <ttclass="literal"><spanclass="pre">i</span></tt>.</li>
<trclass="field"><thclass="field-name">Precondition:</th><tdclass="field-body"><ttclass="literal"><spanclass="pre">i</span></tt> is dereferenceable</td>
</tr>
<trclass="field"><thclass="field-name">Semantics:</th><tdclass="field-body"><ttclass="literal"><spanclass="pre">j</span></tt> is identical to the type of the pointed element</td>
<trclass="field"><thclass="field-name">Precondition:</th><tdclass="field-body"><ttclass="literal"><spanclass="pre">i</span></tt> is incrementable</td>
</tr>
<trclass="field"><thclass="field-name">Semantics:</th><tdclass="field-body"><ttclass="literal"><spanclass="pre">j</span></tt> is the next iterator in a sequence</td>
</tr>
<trclass="field"><thclass="field-name">Postcondition:</th><tdclass="field-body"><ttclass="literal"><spanclass="pre">j</span></tt> is dereferenceable or past-the-end</td>
<trclass="field"><thclass="field-name">Semantics:</th><tdclass="field-body"><ttclass="literal"><spanclass="pre">c</span></tt> is identical to the iterator's category tag</td>
<p>For any forward iterators <ttclass="literal"><spanclass="pre">i</span></tt> and <ttclass="literal"><spanclass="pre">j</span></tt> the following invariants always hold:</p>
<li><ttclass="literal"><spanclass="pre">i</span></tt> and <ttclass="literal"><spanclass="pre">j</span></tt> are equivalent if and only if they are pointing to the same
<li>If <ttclass="literal"><spanclass="pre">i</span></tt> is dereferenceable, and <ttclass="literal"><spanclass="pre">j</span></tt> is equivalent to <ttclass="literal"><spanclass="pre">i</span></tt>, then <ttclass="literal"><spanclass="pre">j</span></tt> is
<li>If <ttclass="literal"><spanclass="pre">i</span></tt> and <ttclass="literal"><spanclass="pre">j</span></tt> are equivalent and dereferenceable, then <ttclass="literal"><spanclass="pre"><ahref="./deref.html"class="identifier">deref</a><i>::type</span></tt>
<li>If <ttclass="literal"><spanclass="pre">i</span></tt> is incrementable, and <ttclass="literal"><spanclass="pre">j</span></tt> is equivalent to <ttclass="literal"><spanclass="pre">i</span></tt>, then <ttclass="literal"><spanclass="pre">j</span></tt> is
<li>If <ttclass="literal"><spanclass="pre">i</span></tt> and <ttclass="literal"><spanclass="pre">j</span></tt> are equivalent and incrementable, then <ttclass="literal"><spanclass="pre"><ahref="./next.html"class="identifier">next</a><i>::type</span></tt>
Distributed under the Boost Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at <aclass="reference external"href="http://www.boost.org/LICENSE_1_0.txt"target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)</div></td></tr></table></body>