BOOST_TEST(false);
}
}
-
+ {
+ typedef int& T;
+ int i = 3;
+ boost::promise<T> p;
+ boost::future<T> f = p.get_future();
+ p.set_value(i);
+ int& j = f.get();
+ BOOST_TEST(j == 3);
+ ++i;
+ BOOST_TEST(j == 4);
+ try
+ {
+ p.set_value_deferred(i);
+ BOOST_TEST(false);
+ }
+ catch (const boost::future_error& e)
+ {
+ BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::promise_already_satisfied));
+ }
+ catch (...)
+ {
+ BOOST_TEST(false);
+ }
+ }
+ {
+ typedef int& T;
+ int i = 3;
+ boost::promise<T> p;
+ boost::future<T> f = p.get_future();
+ p.set_value_deferred(i);
+ BOOST_TEST(!f.is_ready());
+ p.notify_deferred();
+ int& j = f.get();
+ BOOST_TEST(j == 3);
+ ++i;
+ BOOST_TEST(j == 4);
+ try
+ {
+ p.set_value_deferred(i);
+ BOOST_TEST(false);
+ }
+ catch (const boost::future_error& e)
+ {
+ BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::promise_already_satisfied));
+ }
+ catch (...)
+ {
+ BOOST_TEST(false);
+ }
+ }
+ {
+ typedef int& T;
+ int i = 3;
+ boost::promise<T> p;
+ boost::future<T> f = p.get_future();
+ p.set_value_deferred(i);
+ BOOST_TEST(!f.is_ready());
+ p.notify_deferred();
+ int& j = f.get();
+ BOOST_TEST(j == 3);
+ ++i;
+ BOOST_TEST(j == 4);
+ try
+ {
+ p.set_value(i);
+ BOOST_TEST(false);
+ }
+ catch (const boost::future_error& e)
+ {
+ BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::promise_already_satisfied));
+ }
+ catch (...)
+ {
+ BOOST_TEST(false);
+ }
+ }
return boost::report_errors();
}