
On 24 February 2012 15:25, Jeffrey Lee Hellrung, Jr.
On Fri, Feb 24, 2012 at 2:51 AM, Rob Desbois
wrote: On 23 February 2012 18:58, Jeffrey Lee Hellrung, Jr.
wrote: To reiterate Robert Jones' reply, yes, AFAIK, a const iterator should pass a const-qualified value_type to iterator_facade/iterator_adaptor, as implied by the constant node_iterator example in the docs:
http://www.boost.org/doc/libs/1_48_0/libs/iterator/doc/iterator_facade.html#...
Actually iterator_facade/iterator_adaptor's value type in the tutorials is the _node_ type, not the node's value_type.
I never said anything to the contrary, AFAIK...
You didn't no, but in both iterator_facade and iterator_adaptor tutorials, the dereference operation returns reference to node, not reference to node data.
On a related note, you should specify your reference type you pass to iterator_adaptor explicitly as the return type of your dereference member function. Otherwise I think you'll end up returning a reference to a temporary within operator*. I believe that's *actually* what the quoted error is trying to tell you.
Thanks - I've updated to use node_iterator::iterator_adaptor_::reference as the return type from dereference(). The docs show that this defaults to Value&. The error message still stands though, since const node_type::value_type is still not const.
Huh? I don't understand. "const node_type::value_type" *is* const-qualified.
Hehe sorry, that was clear as mud!
The code was roughly:
template<class T> struct node { typedef T value_type; /* ... */ };
template<class NODE> struct node_iterator: public node_adaptor<...,
/*Value = */ typename NODE::value_type> { /* ... */ };
So node_iterator
IIRC, in your original post, your dereference member function returned an rvalue (based on the member function definition, not the actual return type). This suggests that the reference type you give to iterator_facade should be Value, rather than accepting the default of Value&.
Oh yes, didn't even spot that! IIRC the original code returned the typedef 'reference', so was probably just a typo in the copying. Quite a fundamental change though, so apologies for that >.< --rob