// Copyright (C) 2014 Vicente Botet // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #define BOOST_THREAD_VERSION 4 // BoostFutureTest.cpp : Defines the entry point for the console application. // #include <iostream> // boost version 1.60.0 // has the following set. #define BOOST_THREAD_VERSION 4 // #define BOOST_THREAD_PROVIDES_EXECUTORS #include <boost/thread/future.hpp> int main() { #if __cplusplus >= 201103L int value = 0; int tmpValue = 0; boost::promise<void> promise1; boost::promise<void> promise2; auto future1 = promise1.get_future(); auto waitFuture = future1.then([&tmpValue, &promise2](boost::future<void> future){ assert(future.is_ready()); // this works correctly and is ready. auto fut = boost::async(boost::launch::async, [&promise2, &tmpValue](){ boost::this_thread::sleep_for(boost::chrono::seconds(1)); tmpValue = 1; promise2.set_value(); std::cout << "Step 2 "<< std::endl; // should print 1 but prints 0 }); std::cout << "Step 1 "<< std::endl; // should print 1 but prints 0 return promise2.get_future(); //return ; }).then([&value, &tmpValue](boost::future<boost::future<void>> future){ //}).then([&value, &tmpValue](boost::future<void> future){ // error: no matching function for call to ‘boost::future<boost::future<void> >::then(main()::<lambda(boost::future<void>)>)’ // as expected assert(future.is_ready()); // this doesn't work correctly and is not ready. value = tmpValue; }); promise1.set_value(); waitFuture.wait(); std::cout << "value = " << value << std::endl; // should print 1 but prints 0 #endif return 0; }