qi::FutureSync< qi::Future<T> > waitForFirst(std::vector< Future<T> >& vect) { typename std::vector< Future<T> >::iterator it; qi::Promise< qi::Future<T> > prom; qi::Atomic<int>* count = new qi::Atomic<int>(); count->swap((int)vect.size()); for (it = vect.begin(); it != vect.end(); ++it) { it->connect(boost::bind<void>(&detail::waitForFirstHelper<T>, prom, *it, count)); } return prom.future(); }