From: Alexander Belopolsky (belopols_at_[hidden])
Date: 2001-07-10 14:50:44


--- In boost_at_y..., "David Abrahams" <david.abrahams_at_r...> wrote:
> I'm afraid it's not the right approach. The value_type of a constant
> iterator to T should just be T, not const T. You need to arrange for
T
> const* and T const& pointer and reference parameters, respectively.
>
>

Thanks, Dave.

Here is an alternative fix:

> cvs diff iterator_adaptors.hpp
Index: iterator_adaptors.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/iterator_adaptors.hpp,v
retrieving revision 1.42
diff -r1.42 iterator_adaptors.hpp
928a929
>
931c932,944
< inline typename indirect_iterator_generator<OuterIterator>::type

---
> struct indirect_iterator_selector {
>   typedef typename
detail::iterator_traits<OuterIterator>::value_type OuterValue;
>   enum { inner_is_const = is_const<typename
remove_pointer<OuterValue>::type>::value };
>   typedef typename 
boost::detail::if_true<(inner_is_const)>::template
>   then<
>   indirect_iterator_pair_generator<OuterIterator>::const_iterator,
>   // else
>   indirect_iterator_pair_generator<OuterIterator>::iterator
>   >::type type;
> };
> 
> template <class OuterIterator>
> inline typename indirect_iterator_selector<OuterIterator>::type
934,935c947
<     typedef typename indirect_iterator_generator
<         <OuterIterator>::type result_t;
---
>     typedef typename indirect_iterator_selector<OuterIterator>::type
result_t;  
make_indirect_iterator is inside #ifndef BOOST_MSVC which 
probably means that it is not supposed to be portable to
that platform to begin with.