15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is dual licensed under the MIT and the University of Illinois Open
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Source Licenses. See LICENSE.TXT for details.
7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// <future>
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// class shared_future<R>
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
14// shared_future& operator=(const shared_future& rhs);
15
16#include <future>
17#include <cassert>
18
19int main()
20{
21#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
22    {
23        typedef int T;
24        std::promise<T> p;
25        std::shared_future<T> f0 = p.get_future();
26        std::shared_future<T> f;
27        f = f0;
28        assert(f0.valid());
29        assert(f.valid());
30    }
31    {
32        typedef int T;
33        std::shared_future<T> f0;
34        std::shared_future<T> f;
35        f = f0;
36        assert(!f0.valid());
37        assert(!f.valid());
38    }
39    {
40        typedef int& T;
41        std::promise<T> p;
42        std::shared_future<T> f0 = p.get_future();
43        std::shared_future<T> f;
44        f = f0;
45        assert(f0.valid());
46        assert(f.valid());
47    }
48    {
49        typedef int& T;
50        std::shared_future<T> f0;
51        std::shared_future<T> f;
52        f = f0;
53        assert(!f0.valid());
54        assert(!f.valid());
55    }
56    {
57        typedef void T;
58        std::promise<T> p;
59        std::shared_future<T> f0 = p.get_future();
60        std::shared_future<T> f;
61        f = f0;
62        assert(f0.valid());
63        assert(f.valid());
64    }
65    {
66        typedef void T;
67        std::shared_future<T> f0;
68        std::shared_future<T> f;
69        f = f0;
70        assert(!f0.valid());
71        assert(!f.valid());
72    }
73#endif  // _LIBCPP_HAS_NO_RVALUE_REFERENCES
74}
75