[graph] [iterator] use of iterator_facade in leda_graph.hpp

From leda_graph.hpp: class out_edge_iterator : public iterator_facade<out_edge_iterator, leda::edge, bidirectional_traversal_tag, const leda::edge&, const leda::edge*> Can someone explain to me the parameter "const leda::edge*"? http://www.boost.org/libs/iterator/doc/iterator_facade.html#difference says the last template parameter is the type for the difference between two iterators, how can this be a pointer? Shouldn't it just be the default std::ptr_diff_t? Cheers, Jens

Jens Müller wrote:
From leda_graph.hpp:
class out_edge_iterator : public iterator_facade<out_edge_iterator, leda::edge, bidirectional_traversal_tag, const leda::edge&, const leda::edge*>
Can someone explain to me the parameter "const leda::edge*"?
I can't explain it to you, but it looks suspiciously as if the author meant class out_edge_iterator : public iterator_facade< out_edge_iterator , leda::edge const , bidirectional_traversal_tag> Looks like a bug to me. Thomas -- Thomas Witt witt@acm.org

Thomas Witt schrieb:
Jens Müller wrote:
From leda_graph.hpp:
class out_edge_iterator : public iterator_facade<out_edge_iterator, leda::edge, bidirectional_traversal_tag, const leda::edge&, const leda::edge*>
Can someone explain to me the parameter "const leda::edge*"?
I can't explain it to you, but it looks suspiciously as if the author meant
class out_edge_iterator : public iterator_facade< out_edge_iterator , leda::edge const , bidirectional_traversal_tag>
If I make these change (for all n occurences of the above), my program using leda_graph.hpp still works fine ...
Looks like a bug to me.
Yeah, seems so.

on Sat Mar 10 2007, Jens Müller <jens.mueller-AT-ira.uka.de> wrote:
Thomas Witt schrieb:
Jens Müller wrote:
From leda_graph.hpp:
class out_edge_iterator : public iterator_facade<out_edge_iterator, leda::edge, bidirectional_traversal_tag, const leda::edge&, const leda::edge*>
Can someone explain to me the parameter "const leda::edge*"?
I can't explain it to you, but it looks suspiciously as if the author meant
class out_edge_iterator : public iterator_facade< out_edge_iterator , leda::edge const , bidirectional_traversal_tag>
If I make these change (for all n occurences of the above), my program using leda_graph.hpp still works fine ...
Then I'm betting you didn't have very complete tests for your original iterator. Did you try running it through the appropriate concept checks boost::function_requires< boost_concepts::BidirectionalIteratorConcept<out_edge_iterator> >(); for example? -- Dave Abrahams Boost Consulting www.boost-consulting.com
participants (3)
-
David Abrahams
-
Jens Müller
-
Thomas Witt