[iterator] Does the base of iterator_adaptor need a const version of operator* ?

Hi, I am trying to wrap our kind of iterators (for meshes) with the iterator_adaptor class template, something like class CellBoostIterator : public boost::iterator_adaptor< CellBoostIterator //Derived , CellIterator //Base , Cell //Value , boost::forward_traversal_tag // CategoryOrTraversal > { ... }; Since the base class CellIterator already provides a operator* and a operator-> (both non-const version) I did not redefine any of these within the CellBoostIterator class. If I now want to use with code-snippet typedef Mesh_2::CellBoostIterator MIT; MIT mit; Mesh_2 mesh_2(omega1); for (MIT mit = mesh_2.begin(); mit != mesh_2.end(); ++mit) { std::cout << mit->index() <<std::endl; } I get a compile error /usr/include/boost/iterator/iterator_adaptor.hpp:312: error: passing ‘const dolfin::CellIterator’ as ‘this’ argument of ‘dolfin::Cell& dolfin::CellIterator::operator*()’ discards qualifiers I looked at the corresponding line /usr/include/boost/iterator/iterator_adaptor.hpp:312: typename super_t::reference dereference() const { return *m_iterator; } So it seems to me that I have to provide a const version of operator*, or do I get something wrong? I am a bit confused, since I have not found this kind of requirements in the documentation. Any enlightening, hints or pointers are greatly appreciated! Greetings, Andre
participants (1)
-
Andre Massing