
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