Re: What should std::InputIterator<T>::pointer be? [n2193 / n2083]
In article <1175280502.400506.152680@e65g2000hsc.googlegroups.com>,
Richard Smith <richard@ex-parrot.com> wrote:
It is not unusual to encounter iterators whose operator* returns by
value (c.f. boost::iterator_facade). They satisfy the current (C++03)
InputIterator concept, and it seems that the intention is that these
can satisfy any of the new (C++09) immutable iterator concepts,
including InputIterator.
It's standard practice to implement operator-> on such iterators by
way of a proxy object in order to extend the lifetime of the
temporary:
class my_iterator {
struct arrow_proxy {
arrow_proxy( value_type const& val ) : val(val) {}
operator value_type const*() const { return &val; }
value_type const* operator->() const { return &val; }
private:
value_type val;
};
public:
arrow_proxy operator->() const { return **this; }
};
However, it is also current practice to make the 'pointer' typedef a
raw pointer (see the boost::iterator_facade and elsewhere in Boost for
examples):
my usual inplimentation ,if the provided proxy does not work, is
something like this:
class my_iterator:boost::iterator_facade<...>
{
public:
Foo operator ->();
// ...
};
All is fine as my_iterator::operator->() will be called not
iterator_facade<...>::operator->().
---
[ comp.std.c++ is moderated. To submit articles, try just posting with ]
[ your news-reader. If that fails, use mailto:std-c++@ncar.ucar.edu ]
[ --- Please see the FAQ before posting. --- ]
[ FAQ: http://www.comeaucomputing.com/csc/faq.html ]