考虑下面的代码:的boost ::范围::详细:: any_iterator不升压发挥好:: zip_iterator
#include <boost/iterator/zip_iterator.hpp>
#include <boost/range/detail/any_iterator.hpp>
#include <boost/tuple/tuple.hpp>
#include <iostream>
#include <vector>
typedef boost::range_detail::any_iterator<
boost::tuple<int &, char &>,
boost::random_access_traversal_tag,
boost::tuple<int &, char &> &,
std::ptrdiff_t
> IntCharIterator;
int main()
{
std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<char> v2 = {'a', 'b', 'c', 'd', 'e'};
auto it = IntCharIterator(boost::make_zip_iterator(
boost::make_tuple(v1.begin(), v2.begin()))
);
auto end_ = IntCharIterator(boost::make_zip_iterator(
boost::make_tuple(v1.end(), v2.end()))
);
for (; it != end_; ++it)
std::cerr << it->get<0>() << " " << it->get<1>() << "\n";
return 0;
}
它将按预期工作(即打印“1 \ N2 b .. 。“)编译时没有进行优化,但是在编译时使用-O2(clang-3.6.0和gcc-4.9.2,boost 1.56.0)编译时会出现段错误或产生垃圾,我不知道哪里出了问题。
此外,当IntCharIterator包装被删除时,代码按照预期的方式工作在任一优化级别。
有人知道这里发生了什么吗?