Opened 11 years ago

Last modified 10 years ago

#5888 new Bugs

[Documentation] iterator_facade docs -- const correctness problem.

Reported by: Frank Erens <seysayux@…> Owned by: jeffrey.hellrung
Milestone: To Be Determined Component: iterator
Version: Boost 1.47.0 Severity: Cosmetic
Keywords: Cc:

Description

On this documentation page, second box: http://www.boost.org/doc/libs/1_47_0/libs/iterator/doc/iterator_facade.html#a-constant-node-iterator there is a problem with const-correctness on the dereference function.

For the const_node_iterator, Value = const node_base, thus yielding

const node_base& dereference() const {
   return *m_node;
}

const node_base* m_node;

However, for node_iterator, Value = node_base:

node_base& dereference() const {
   return *m_node; // Error: cannot convert const variable to non_const reference
}

node_iterator* m_node;

Correct would be to const-overload dereference:

typedef boost::iterator_facade<
        node_iter<Value>
      , Value
      , boost::forward_traversal_tag
    > super;

typename super::reference dereference() {
    return *m_node;
}
const typename super::reference dereference() const {
    return *m_node;
}

Change History (2)

comment:1 by anonymous, 11 years ago

On this same example snippet, the explicit constructor is:

 explicit const_node_iterator(node_base* p)
      : m_node(p) {}

but it should be

 explicit const_node_iterator(const node_base* p)
      : m_node(p) {}

comment:2 by Dave Abrahams, 10 years ago

Owner: changed from Dave Abrahams to jeffrey.hellrung
Note: See TracTickets for help on using tickets.