-// {
-// typedef int& T;
-// {
-// boost::promise<T> p;
-// boost::future<T> f = p.get_future();
-// boost::thread(func3, boost::move(p)).detach();
-// BOOST_TEST(f.valid());
-// BOOST_TEST(f.get() == 5);
-// BOOST_TEST(!f.valid());
-// }
-// {
-// boost::promise<T> p;
-// boost::future<T> f = p.get_future();
-// boost::thread(func4, boost::move(p)).detach();
-// try
-// {
-// BOOST_TEST(f.valid());
-// BOOST_TEST(f.get() == 3);
-// BOOST_TEST(false);
-// }
-// catch (double i)
-// {
-// BOOST_TEST(i == 3.5);
-// }
-// BOOST_TEST(!f.valid());
-// }
-// }
-// {
-// typedef void T;
-// {
-// boost::promise<T> p;
-// boost::future<T> f = p.get_future();
-// boost::thread(func5, boost::move(p)).detach();
-// BOOST_TEST(f.valid());
-// f.get();
-// BOOST_TEST(!f.valid());
-// }
-// {
-// boost::promise<T> p;
-// boost::future<T> f = p.get_future();
-// boost::thread(func6, boost::move(p)).detach();
-// try
-// {
-// BOOST_TEST(f.valid());
-// f.get();
-// BOOST_TEST(false);
-// }
-// catch (char i)
-// {
-// BOOST_TEST(i == 'c');
-// }
-// BOOST_TEST(!f.valid());
-// }
-// }
-
+ BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
+ {
+ typedef int& T;
+ {
+ boost::promise<T> p;
+ boost::future<T> f = p.get_future();
+#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
+ boost::thread(func3, boost::move(p)).detach();
+#else
+ int j=5;
+ p.set_value(j);
+#endif
+ BOOST_TEST(f.valid());
+ BOOST_TEST(f.get() == 5);
+#ifdef BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET
+ BOOST_TEST(!f.valid());
+#endif
+ }
+ BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
+ {
+ boost::promise<T> p;
+ boost::future<T> f = p.get_future();
+#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
+ boost::thread(func4, boost::move(p)).detach();
+#else
+ p.set_exception(boost::make_exception_ptr(3.5));
+#endif
+ try
+ {
+ BOOST_TEST(f.valid());
+ BOOST_TEST(f.get() == 3);
+ BOOST_TEST(false);
+ }
+ catch (boost::wrap<double> const& i)
+ {
+ BOOST_TEST(i.value == 3.5);
+ }
+#ifdef BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET
+ BOOST_TEST(!f.valid());
+#endif
+ }
+ BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;
+ {
+ boost::promise<T> p;
+ boost::future<T> f = p.get_future();
+#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
+ boost::thread(func4, boost::move(p)).detach();
+#else
+ p.set_exception(boost::make_exception_ptr(3.5));
+#endif
+ try
+ {
+ BOOST_TEST(f.valid());
+ boost::exception_ptr ptr = f.get_exception_ptr();
+ }
+ catch (...)
+ {
+ BOOST_TEST(false);
+ }
+ BOOST_TEST(f.valid());
+ }
+ }
+ BOOST_THREAD_LOG << BOOST_THREAD_END_LOG;