$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-users] [iterators ]bug?
From: bismuth_at_[hidden]
Date: 2009-03-04 14:44:13
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 <stdio.h>
#include <tchar.h>
#include <vector>
#include <boost/iterator/transform_iterator.hpp>
#include <boost/static_assert.hpp>
struct Tr1:
    std::unary_function<unsigned, unsigned>
{
    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<Tr1, some_ra_iterator_t> tr_iter_t;
    BOOST_STATIC_ASSERT
    ((  boost::is_convertible
        <   std::iterator_traits<some_ra_iterator_t>::iterator_category,
            std::random_access_iterator_tag
        >::value
    ));
    BOOST_STATIC_ASSERT
    ((  ! boost::is_convertible
        <   std::iterator_traits<tr_iter_t>::iterator_category,
            std::random_access_iterator_tag
        >::value
    ));
    BOOST_STATIC_ASSERT
    ((    boost::is_same
        <   std::iterator_traits<tr_iter_t>::iterator_category,
            boost::detail::iterator_category_with_traversal
            <   std::input_iterator_tag,  //?!
                boost::random_access_traversal_tag
            >
        >::value
    ));
    return 0;
}
---------------------