zip_iterator的std :: fill无法在clang和c ++ 11上编译

时间:2019-05-13 11:09:00

标签: c++ c++11 stl clang fill

似乎zip_iterator将iterator_category评估为以下代码段的std :: input_iterator_tag。

但是Xcode中std :: fill的实现(我正在使用Xcode10.1.0.app)具有特定于forward_iterator_tag和random_access_iterator_tag的实现,但没有input_iterator_tag的实现。因此,代码会导致编译错误。

同一代码在gcc-6.3.0中可以正常编译。

//zip_iterator.cpp
#include <boost/iterator/zip_iterator.hpp>
#include <iterator>
#include <iostream>

template <typename Iterator>
void FooImpl(Iterator first, Iterator last, std::input_iterator_tag ) { 
   std::cout<< "Input Iteartor Tag\n";
}

template <typename Iterator>
void Foo(Iterator first, Iterator last) {
    typedef typename std::iterator_traits<Iterator>::iterator_category category;
    FooImpl(first, last, category());
}

template<typename T>
void foo()
{
    boost::zip_iterator<boost::tuple<T*> > iter;
    Foo(iter,iter);
    std::fill(iter, iter, boost::make_tuple(T())); //Fails to compile
}

int main()
{
    foo<int>();
    return 0;
}

它是boost zip_iterator中的错误,它会生成iter_category作为“ std :: input_iterator_tag”,

OR

Xp(clang)中缺少

std :: input_iterator_tag的std :: fill版本吗?

0 个答案:

没有答案