Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::future and when_all => compile error "call to deleted constructor"
From: Vicente J. Botet Escriba (vicente.botet_at_[hidden])
Date: 2014-03-26 14:21:09


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 <boost/thread/future.hpp>
>
> 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


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net