Input Iterator for a shared_ptr
<p>I have an iterator which contains the following functions:</p>

<pre><code>    ...
    T &amp;operator*() { return *_i; }
    std::shared_ptr&lt;T&gt; operator-&gt;() { return _i; }

private:
    std::shared_ptr&lt;T&gt; _i;
    ...
</code></pre>

<p>How do I get a shared pointer to the internally stored _i?</p>

<pre><code>std::shared_ptr&lt;Type&gt; item = ???
</code></pre>

<p>Should I do:</p>

<pre><code>MyInterfaceIterator&lt;Type&gt; i;
std::shared_ptr&lt;Type&gt; item = i.operator-&gt;();
</code></pre>

<p>Or should I rewrite operator*()?</p>
