$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Eric Niebler (eric_at_[hidden])
Date: 2005-03-11 15:46:57
Michael W. Daniels wrote:
> On Fri, Mar 11, 2005 at 10:32:18AM -0800, Eric Niebler wrote:
> 
>>I don't see where hat_iterator and hat_const_iterator are defined. 
>>Please send a *complete* example.
> 
> 
> They should have been in the third attached file ("hat_iterator.hpp"). 
> 
> Mike Daniels
Oops, my bad! My email client was hiding it from me, but I see it now. 
OK, the problem is fairly obvious.
   template <class T, class A>
   class hat_const_iterator {
   private:
     typedef hat_const_iterator<T, A> iterator;
   public:
     typedef std::random_access_iterator_tag iterator_category;
     typedef T value_type;
     typedef typename A::pointer pointer;
     typedef typename A::reference reference;
//-------------------^^^^^^^^^^^^ oops!
...
     const_reference operator*() const {
//--^^^^^^^^^^^^^^^
       return _hat->_top_array[_pos >> _hat->_power][_pos & _hat->_mask];
     }
For hat_const_iterator, the nested "reference" typedef is non-const, and 
operator* is returning a const reference. The nested reference type 
should be:
     typedef typename A::const_reference reference;
HTH!
-- Eric Niebler Boost Consulting www.boost-consulting.com