xref: /llvm-project/libcxx/test/std/thread/futures/futures.shared_future/copy_ctor.pass.cpp (revision a7f9895cc18995549c7facb96e72718da282a864)
1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // UNSUPPORTED: no-threads
10 // UNSUPPORTED: c++03
11 
12 // <future>
13 
14 // class shared_future<R>
15 
16 // shared_future(const shared_future& rhs);
17 // noexcept in C++17
18 
19 #include <future>
20 #include <cassert>
21 
22 #include "test_macros.h"
23 
main(int,char **)24 int main(int, char**)
25 {
26     {
27         typedef int T;
28         std::promise<T> p;
29         std::shared_future<T> f0 = p.get_future();
30         std::shared_future<T> f = f0;
31 #if TEST_STD_VER > 14
32         static_assert(noexcept(std::shared_future<T>{f0}), "" );
33 #endif
34         assert(f0.valid());
35         assert(f.valid());
36     }
37     {
38         typedef int T;
39         std::shared_future<T> f0;
40         std::shared_future<T> f = f0;
41         assert(!f0.valid());
42         assert(!f.valid());
43     }
44     {
45         typedef int& T;
46         std::promise<T> p;
47         std::shared_future<T> f0 = p.get_future();
48         std::shared_future<T> f = f0;
49         assert(f0.valid());
50         assert(f.valid());
51     }
52     {
53         typedef int& T;
54         std::shared_future<T> f0;
55         std::shared_future<T> f = std::move(f0);
56         assert(!f0.valid());
57         assert(!f.valid());
58     }
59     {
60         typedef void T;
61         std::promise<T> p;
62         std::shared_future<T> f0 = p.get_future();
63         std::shared_future<T> f = f0;
64         assert(f0.valid());
65         assert(f.valid());
66     }
67     {
68         typedef void T;
69         std::shared_future<T> f0;
70         std::shared_future<T> f = f0;
71         assert(!f0.valid());
72         assert(!f.valid());
73     }
74 
75   return 0;
76 }
77