Ну, этот код не компилируется, потому что упакованные задачи не могут быть скопированы.
Исходя из формулировки проблемы, все, что вам нужно - это вектор будущего, зачем даже пытаться хранить packaged_tasks?
#include <boost/thread.hpp>
#include <iostream>
#include <vector>
int the_answer()
{
return 42;
}
int main()
{
std::vector<boost::unique_future<int> > futures;
for (int i=0; i < 4; ++i)
{
boost::packaged_task<int> pt(the_answer);
futures.push_back(pt.get_future());
boost::thread task(std::move(pt));
}
boost::wait_for_all(futures.begin(), futures.end());
for(size_t n=0; n<futures.size(); ++n)
std::cout << futures[n].get() << ' ';
std::cout << '\n';
}