Boost logo

Boost Users :

Subject: [Boost-users] [iterator] iterator_core_access and namespaces
From: Nathan Ridge (zeratul976_at_[hidden])
Date: 2011-07-24 00:08:44


Hello,
 
I came across what seems like an interesting oddity:
 
#include <boost/iterator/iterator_facade.hpp>
using boost::iterator_core_access;
namespace ns
{
    struct range
    {
        class iterator : public boost::iterator_facade<iterator,
                                                       int,
                                                       boost::single_pass_traversal_tag>
        {
            friend class iterator_core_access;
            
            int& dereference() const;
            void increment();
            bool equal(const iterator& other) const;
        };
        typedef iterator iterator;
        iterator begin();
        iterator end();
    };
}
int main()
{
    ns::range::iterator b;
    ++b;
}
 
This code goes not compile with gcc (I tried with 4.3 through 4.7),
giving the following error:
 
test.cpp: In static member function 'static void boost::iterator_core_access::increment(Facade&) [with Facade = ns::range::iterator]':
boost/boost/iterator/iterator_facade.hpp:664:11: instantiated from 'Derived& boost::iterator_facade<I, V, TC, R, D>::operator++() [with Derived = ns::range::iterator, Value = int, CategoryOrTraversal = boost::single_pass_traversal_tag, Reference = int&, Difference = int]'
test.cpp:29:7: instantiated from here
test.cpp:16:18: error: 'void ns::range::iterator::increment()' is private
boost/boost/iterator/iterator_facade.hpp:523:11: error: within this context
 
If I explicitly qualify iterator_core_access in the friend declaration
(i.e. "friend class boost::iterator_core_access"), or if I move the
"using boost::iterator_core_access" inside the namespace, it works fine.
 
Is this a compiler bug, or am I bumping into a shadowy corner of the
Standard involving friends and namespaces?
 
Thanks,
Nate.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net