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 hat_const_iterator {
private:
typedef hat_const_iterator 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