Le 22/03/13 00:17, Fernando Pelliccioni a écrit :
Hi Vicente, hi all,
The following code snippet throws an exception at runtime
boost::future<int> f1 = boost::async( boost::launch::deferred, []() { return 123; });
int x= f1.get();//exception thrown
I am using Boost Trunk revision 83512 I attached a patch, but I'm not sure that's correct, I had no time to see the full future.hpp code
The current implementation needs some C++11 features (sorry I have not had the time to get rid of these features). Your patch lets me think that either you are not defining BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK or BOOST_THREAD_PROVIDES_VARIADIC_THREAD is not defined for your compiler. Could you confirm? detail/config.h defines #if ! defined(BOOST_NO_SFINAE_EXPR) && \ ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \ ! defined(BOOST_NO_CXX11_DECLTYPE) && \ ! defined(BOOST_NO_CXX11_DECLTYPE_N3276) && \ ! defined(BOOST_NO_CXX11_AUTO) && \ ! defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \ ! defined(BOOST_NO_CXX11_HDR_TUPLE) #define BOOST_THREAD_PROVIDES_VARIADIC_THREAD #endif Please, let me know if this was not clear in the documentation.
I noticed that according to N3558, the future::is_ready() function should be called "ready". http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3558.pdf
What do you think?
I could add it as well as make_ready_future. Best, Vicente