
I wanted to use zip_iterator to concurrently sort two arrays by the values in one of them. It didn't work. Most of the values were over-written by one of the pairs. I figured out that there was a problem with the swapping, so I made this small test case. Compiled with GCC 4.6.1 on Ubuntu 11.10 #include <utility> #include <iostream> #include <boost/iterator/zip_iterator.hpp> int main() { std::vector<int> a = { 1, 2 }; std::vector<int> b = { 100, 200 }; auto first = boost::make_zip_iterator( boost::make_tuple(a.begin(), b.begin())); auto last = boost::make_zip_iterator( boost::make_tuple(a.begin() + 1, b.begin() + 1)); std::cout << first->get<0>() << ' ' << last->get<0>() << '\n'; std::cout << first->get<1>() << ' ' << last->get<1>() << "\n\n"; using std::swap; using std::iter_swap; // swap(*first, *last); // doesn't compile iter_swap(first, last); std::cout << first->get<0>() << ' ' << last->get<0>() << '\n'; std::cout << first->get<1>() << ' ' << last->get<1>() << "\n\n"; } Output: 1 2 100 200 2 2 200 200 Expected Output: 1 2 100 200 2 1 200 100 Is this a known problem?