Нахождение следующего как источника segfault просто стоило мне около 4 часов работы:
#include <boost/range/combine.hpp>
#include <boost/foreach.hpp>
#include <iostream>
#include <vector>
#include <list>
int main(int, const char*[])
{
std::vector<int> v;
std::list<char> l;
for (int i = 0; i < 5; ++i)
{
v.push_back(i);
l.push_back(static_cast<char>(i) + 'a');
}
v.push_back(5);
int ti;
char tc;
BOOST_FOREACH(boost::tie(ti, tc), boost::combine(v, l))
{
std::cout << '(' << ti << ',' << tc << ')' << '\n';
}
return 0;
}
Если вы выполните этот пример, вы заметите, что объединение счастливо повторяется, пока у более длинного диапазона есть значения. Я не вижу этого в документации .
Есть ли способ ограничить итерацию более коротким из двух диапазонов?