1
//===----------------------------------------------------------------------===//
3
// The LLVM Compiler Infrastructure
5
// This file is dual licensed under the MIT and the University of Illinois Open
6
// Source Licenses. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// Copyright (C) 2011 Vicente J. Botet Escriba
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)
15
// <boost/thread/future.hpp>
19
// void promise::set_value(R&& r);
21
#define BOOST_THREAD_VERSION 3
23
#include <boost/thread/future.hpp>
24
#include <boost/detail/lightweight_test.hpp>
25
#include <boost/static_assert.hpp>
27
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
39
BOOST_THREAD_DELETE_COPY_CTOR(A)
53
#endif // BOOST_NO_CXX11_RVALUE_REFERENCES
57
#ifndef BOOST_NO_CXX11_RVALUE_REFERENCES
63
boost::future<T> f = p.get_future();
66
p.set_value(boost::move(i));
82
boost::future<T> f = p.get_future();
83
p.set_value(boost::move(i));
84
BOOST_TEST(f.get().value == 3);
88
p.set_value(boost::move(j));
91
catch (const boost::future_error& e)
93
BOOST_TEST(e.code() == boost::system::make_error_code(boost::future_errc::promise_already_satisfied));
105
boost::future<T> f = p.get_future();
106
p.set_value(boost::move(i));
107
BOOST_TEST(i.value == 0);
108
boost::promise<T> p2(boost::move(p));
109
BOOST_TEST(f.get().value == 3);
116
boost::future<T> f = p.get_future();
117
p.set_value(boost::move(i));
118
BOOST_TEST(i.value == 0);
119
boost::promise<T> p2(boost::move(p));
120
boost::future<T> f2(boost::move(f));
121
BOOST_TEST(f2.get().value == 3);
128
p.set_value(boost::move(i));
129
BOOST_TEST(i.value == 0);
130
boost::promise<T> p2(boost::move(p));
131
boost::future<T> f = p2.get_future();
132
BOOST_TEST(f.get().value == 3);
137
typedef boost::future<int> T;
138
boost::promise<int> pi;
139
T fi=pi.get_future();
143
boost::future<T> f = p.get_future();
144
p.set_value(boost::move(fi));
145
boost::future<T> f2(boost::move(f));
146
BOOST_TEST(f2.get().get() == 3);
149
#endif // BOOST_NO_CXX11_RVALUE_REFERENCES
150
return boost::report_errors();