Subject: Re: [boost] type of iterator_facade::value_type
From: Steven Watanabe (watanabesj_at_[hidden])
Date: 2009-12-23 12:02:11


AMDG

Neal Becker wrote:
> According to iterator_facade doc:
>
> typedef remove_const<Value>::type value_type;
>
> Why remove_const?

This is what the standard does.

> This makes it hard to detect if the resulting iterator
> points to a const value.
>

value_type is intended to give a type that can be used for temporaries, etc.
It was not designed as a general purpose type deduction mechanism.
For this purpose, reference is better because reference gives the
exact type from dereferencing the iterator.

> In order to further adapt such an iterator, I needed to use the
> reference type instead of the value type to detect constness:
>
> typename boost::is_const<
> typename boost::remove_reference<
> typename std::iterator_traits<BaseIterator>::reference
> >::type
> >::type,
>

Yes. Although this is insufficient because it doesn't handle
proxies or rvalues.

In Christ,
Steven Watanabe