diff --git a/include/boost/iterator/permutation_iterator.hpp b/include/boost/iterator/permutation_iterator.hpp index 1cd0118..23d1198 100644 --- a/include/boost/iterator/permutation_iterator.hpp +++ b/include/boost/iterator/permutation_iterator.hpp @@ -50,6 +50,11 @@ private: typename super_t::reference dereference() const { return *(m_elt_iter + *this->base()); } +#ifndef BOOST_NO_MEMBER_TEMPLATE_FRIENDS + template friend class permutation_iterator; +#else + public: +#endif ElementIterator m_elt_iter; }; diff --git a/test/permutation_iterator_test.cpp b/test/permutation_iterator_test.cpp index af748a9..abd1046 100644 --- a/test/permutation_iterator_test.cpp +++ b/test/permutation_iterator_test.cpp @@ -9,6 +9,8 @@ #include #include +#include +#include #include #include @@ -40,6 +42,14 @@ void permutation_test() permutation_type it = begin; permutation_type end = boost::make_permutation_iterator( elements.begin(), indices.end() ); + typedef boost::permutation_iterator< element_range_type::const_iterator, index_type::iterator > permutation_const_type; + + BOOST_CONCEPT_ASSERT(( + boost_concepts::InteroperableIteratorConcept< + permutation_type + , permutation_const_type + >)); + BOOST_CHECK( it == begin ); BOOST_CHECK( it != end );