
Le 26/03/14 14:48, Tobias Oberstein a écrit :
Hello,
Hi,
I am trying to use boost::future with continuations, in particular when_all/when_any.
I am using Boost trunk from GitHub (since only that has when_all etc).
You will be able to have it for Boost 1.56 (it is already on master)
This is what I want to compile:
===
#include <iostream>
#define BOOST_THREAD_PROVIDES_FUTURE #define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION #define BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY #include
using namespace boost;
int main() { future<int> f1 = async([]() { return 1; }); future<int> f2 = async([]() { return 2; });
auto f3 = when_all(f1, f2);
f3.then([](decltype(f3)) { std::cout << "done" << std::endl; });
f3.get(); }
Am I doing it wrong?
there are two errors (1) You need to move the futures (2) You can not use then() on a future and next try to get the value. You need to store the result of then on another future. int main() { future<int> f1 = async([]() { return 1;}); future<int> f2 = async([]() { return 2;}); auto f3 = when_all(boost::move(f1), boost::move(f2)); (1) auto f4 = f3.then([](decltype(f3)) (2) { std::cout << "done" << std::endl; }); f4.get(); (2) } Best, Vicente