Subject: Re: [boost] future<>::then() Error returning future<void> (on trunk)
From: Vicente J. Botet Escriba (vicente.botet_at_[hidden])
Date: 2013-04-01 13:09:18


Le 22/01/13 22:56, Vicente Botet a écrit :
> Fernando Pelliccioni wrote
>> Hi Vicente, hi all,
>>
>> I noticed that in the trunk there is a implementation of
>> future<>::then().
>> Thank you very much for your efforts to implement it!
> Hi Fernando,
>
> I have started with a restricted implementation. While trying to cover with
> the whole requirements I didn't reach to get correct implementation. This is
> way this new feature is not delivered yet. For the time been I don't think
> the current implementation is ready for production code.
>
>
>> The following example, compiles OK
>>
>> boost::future
>> <int>
>> f1 = boost::async([]() { return 123; });
>> f1.then([](boost::future
>> <int>
>> const& f) {
>> return std::string("");
>> });
>>
>>
>> But this one fails to compile:
>> boost::future
>> <int>
>> f1 = boost::async([]() { return 123; });
>> f1.then([](boost::future
>> <int>
>> const& f) {
>> });
>>
>> Here future<>::then() have to returns future
>> <void>
>> like ...
>>
>> boost::async([]() { });
>>
>> Am I right?
> Yes, it should. I have no access to my development environment for this
> week. Could you post the compiler error?
>
>
>> On the other hand, have you taken into account the following paper?
>> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3451.pdf
> I read it and the mail exchanges related to this paper.
> Currently I didn't reached to make it working at all when the future
> destructor blocks, but I'm not sure this is the hidden problem as I have
> also other issues when the future destructor doesn't blocks.
>
> I'm really sorry that the current state is not really usable :(
>
Hi Fernando,

I have reworked the future::then function, and even if it is not yet
complete (e.g. deferred is not implemented for c++98 compilers) it start
to be usable for c++11 compilers, even if
BOOST_THREAD_DONT_PROVIDE_FUTURE_INVALID_AFTER_GET is not defined. BTW,
joining on the async future destructor works also.

Please could you give it a try and let me know whatever you can find
that doesn't works as you expect,

Best,
Vicente