1 //===----------------------------------------------------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 // Copyright (C) 2011 Vicente J. Botet Escriba 11 // 12 // Distributed under the Boost Software License, Version 1.0. (See accompanying 13 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 14 15 // <boost/thread/future.hpp> 16 17 // class promise<R> 18 19 // future<R> get_future(); 20 21 #define BOOST_THREAD_VERSION 3 22 23 #include <boost/thread/future.hpp> 24 #include <boost/detail/lightweight_test.hpp> 25 main()26int main() 27 { 28 { 29 boost::promise<double> p; 30 boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future()); 31 p.set_value(105.5); 32 BOOST_TEST(f.get() == 105.5); 33 } 34 { 35 boost::promise<double> p; 36 boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future()); 37 try 38 { 39 f = BOOST_THREAD_MAKE_RV_REF(p.get_future()); 40 BOOST_TEST(false); 41 } 42 catch (const boost::future_error& e) 43 { 44 BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::future_already_retrieved)); 45 } 46 } 47 { 48 boost::promise<double> p; 49 boost::promise<double> p0 = boost::move(p); 50 try 51 { 52 boost::future<double> f = BOOST_THREAD_MAKE_RV_REF(p.get_future()); 53 BOOST_TEST(false); 54 } 55 catch (const boost::future_error& e) 56 { 57 BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::no_state)); 58 } 59 } 60 61 62 return boost::report_errors(); 63 } 64 65