• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 // <future>
16 
17 // class shared_future<R>
18 
19 // shared_future(shared_future&& rhs);
20 
21 #define BOOST_THREAD_VERSION 3
22 
23 #include <boost/thread/future.hpp>
24 #include <boost/detail/lightweight_test.hpp>
25 
26 boost::mutex m;
27 
main()28 int main()
29 {
30   {
31       typedef int T;
32       boost::promise<T> p;
33       boost::shared_future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
34       boost::shared_future<T> f = boost::move(f0);
35       BOOST_TEST(!f0.valid());
36       BOOST_TEST(f.valid());
37   }
38   {
39       typedef int T;
40       boost::shared_future<T> f0;
41       boost::shared_future<T> f = boost::move(f0);
42       BOOST_TEST(!f0.valid());
43       BOOST_TEST(!f.valid());
44   }
45   {
46       typedef int& T;
47       boost::promise<T> p;
48       boost::shared_future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
49       boost::shared_future<T> f = boost::move(f0);
50       BOOST_TEST(!f0.valid());
51       BOOST_TEST(f.valid());
52   }
53   {
54       typedef int& T;
55       boost::shared_future<T> f0;
56       boost::shared_future<T> f = boost::move(f0);
57       BOOST_TEST(!f0.valid());
58       BOOST_TEST(!f.valid());
59   }
60   {
61       typedef void T;
62       boost::promise<T> p;
63       boost::shared_future<T> f0 = BOOST_THREAD_MAKE_RV_REF(p.get_future());
64       boost::shared_future<T> f = boost::move(f0);
65       BOOST_TEST(!f0.valid());
66       BOOST_TEST(f.valid());
67   }
68   {
69       typedef void T;
70       boost::shared_future<T> f0;
71       boost::shared_future<T> f = boost::move(f0);
72       BOOST_TEST(!f0.valid());
73       BOOST_TEST(!f.valid());
74   }
75 
76   return boost::report_errors();
77 }
78 
79