在boost :: adapters :: transformed之后,不能使用boost :: adapters :: strided吗?

Joh*_*hnB 3 c++ boost visual-studio-2010 visual-c++ boost-range

以下内容无法在Visual Studio 2010上编译:

std::vector<int> v;
for (int i = 0; i < 10; ++i) v.push_back (i);

struct TrivialTrafo {
    typedef int result_type;
    int operator () (int i) const { return 1; }
};
auto x = v | boost::adaptors::transformed (TrivialTrafo ()) 
     | boost::adaptors::strided (2);
Run Code Online (Sandbox Code Playgroud)

编译器抱怨(错误消息最初用德语,我的翻译):

error C2664: 
'boost::range_detail::strided_iterator<BaseIterator,Category>::strided_iterator
(const boost::range_detail::strided_iterator<BaseIterator,Category> &)':
Conversion of parameter 1 from
'boost::range_detail::strided_iterator<BaseIterator,Category>' into
'const boost::range_detail::strided_iterator<BaseIterator,Category> &'
not possible 
          with
          [
BaseIterator=boost::iterators::transform_iterator<
TEST_rectnew_getRows::TrivialTrafo,std::_Vector_iterator<
std::_Vector_val<int,std::allocator<int>>>>,
Category=boost::iterators::detail::iterator_category_with_traversal<
std::input_iterator_tag,boost::iterators::random_access_traversal_tag>
          ]
          and
          [
BaseIterator=boost::iterators::transform_iterator<
TEST_rectnew_getRows::TrivialTrafo,std::_Vector_iterator<
std::_Vector_val<int,std::allocator<int>>>>,
Category=boost::iterators::random_access_traversal_tag
          ]
          and
          [              
BaseIterator=boost::iterators::transform_iterator<
TEST_rectnew_getRows::TrivialTrafo,
std::_Vector_iterator<std::_Vector_val<int,std::allocator<int>>>
>,
Category=boost::iterators::detail::iterator_category_with_traversal<
std::input_iterator_tag,boost::iterators::random_access_traversal_tag>
          ]
Run Code Online (Sandbox Code Playgroud)

我正在使用Boost 1.57.

显然operator |试图strided_range用错误的Category模板参数值构造一个?

这是一个错误,还是我做错了什么?

eca*_*mur 5

是的,这是Neil Groves重写的一个错误strided.hpp(从1.56开始,如果你需要,你可以恢复到那个版本的提升).我已经提交了一张票:https://svn.boost.org/trac/boost/ticket/10989

单线修复:

--- a/include/boost/range/adaptor/strided.hpp
+++ b/include/boost/range/adaptor/strided.hpp
@@ -603,7 +603,7 @@ namespace boost
         template<
             class Rng,
             class Category =
-                typename iterator_traversal<
+                typename iterators::pure_iterator_traversal<
                     typename range_iterator<Rng>::type
                 >::type
         >
Run Code Online (Sandbox Code Playgroud)