There is probably a bug in boost::iterators library.
boost::transform_iteartor degrade stl iterator_category.
There is a code below, illustrating a problem(using VS2008 c++
compiler):
---------------------
#include
#include
#include <vector>
#include
#include
struct Tr1:
std::unary_function
{
unsigned operator()(unsigned a)const
{
return a;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
typedef std::vector<unsigned>::iterator some_ra_iterator_t;
typedef boost::transform_iterator tr_iter_t;
BOOST_STATIC_ASSERT
(( boost::is_convertible
< std::iterator_traits::iterator_category,
std::random_access_iterator_tag
>::value
));
BOOST_STATIC_ASSERT
(( ! boost::is_convertible
< std::iterator_traits::iterator_category,
std::random_access_iterator_tag
>::value
));
BOOST_STATIC_ASSERT
(( boost::is_same
< std::iterator_traits::iterator_category,
boost::detail::iterator_category_with_traversal
< std::input_iterator_tag, //?!
boost::random_access_traversal_tag
>
>::value
));
return 0;
}
---------------------