
David Abrahams wrote:
Neal Becker <ndbecker2@gmail.com> writes:
This simple test illustrates the problem:
#include <boost/iterator/permutation_iterator.hpp> #include <vector> #include <boost/range.hpp>
template<typename in_t> void F (in_t const& in) { typename boost::range_const_iterator<in_t>::type inp = boost::begin (in); }
int main () { std::vector<int> x, y; F (boost::make_permutation_iterator (boost::begin (x), boost::begin (y))); }
/usr/local/src/boost.hg/boost/range/const_iterator.hpp:37: error: no type named const_iterator in class boost::permutation_iterator<__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> >
This has nothing to do with permutation iterator at all. An iterator is not expected to have a const_iterator member. It looks for all the world like user error: F expects a model of Range, and you're just passing a model of Iterator.
Yes, thanks, I meant to pass a range. I should stop posting early Monday morning.