Is this a bug in boost :: range_detail :: demote_iterator_traversal_tag of boost :: iterator_facade?

The following code:

#include <boost/range/adaptor/transformed.hpp>
#include <boost/range/join.hpp>
struct foo {
    typedef int result_type;
    result_type operator ()(int x) { return x; }
};
int main() {
    using boost::adaptors::transformed;
    int a[] = {1, 2, 3};
    boost::join(a | transformed(foo()), a | transformed(foo()));
    return 0;
}

will get a compilation error:

error C2039: 'type' : is not a member of 'boost::range_detail::demote_iterator_traversal_tag<IteratorTraversalTag1,IteratorTraversalTag2>'
1>        with
1>        [
1>            IteratorTraversalTag1=boost::detail::iterator_category_with_traversal<std::input_iterator_tag,boost::random_access_traversal_tag>,
1>            IteratorTraversalTag2=boost::detail::iterator_category_with_traversal<std::input_iterator_tag,boost::random_access_traversal_tag>
1>        ]
...

in VS2008 with an increase of 1.45.

I plunged into the source code boost::range_detail::demote_iterator_traversal_tagand found that it does not account for boost::detail::iterator_category_with_traversalwhich is being created boost::detail::facade_iterator_category, used iterator_facadeto infer the correct iterator category.

transform_iteratorbased on iterator_facade, so the iterator category a | transformed(foo())is displayed iterator_category_with_traversal<std::input_iterator_tag,boost::random_access_traversal_tag>, but demote_iterator_traversal_tagdoes not recognize it.

I do not understand why it was demote_iterator_traversal_tagcreated in this way. Or maybe it's just a mistake?

Thank.

+3
source share
2 answers

, Google , , , , , , , 1.54 ( , , 1.44 ).

0

IteratorTraversalTag1 IteratorTraversalTag2 std::input_iterator_tag, boost::random_access_traversal_tag. , demote_iterator_traversal_tag BOOST_DEMOTE_TRAVERSAL_TAG( random_access_traversal_tag, random_access_traversal_tag, random_access_traversal_tag ). ::type random_access_traversal_tag. .

0

Source: https://habr.com/ru/post/1782472/


All Articles