blob: 8d43294edc263151c8c7b3285204fee3844a23b9 [file] [log] [blame]
Howard Hinnant7158e5c2010-08-29 14:20:30 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnant7158e5c2010-08-29 14:20:30 +00007//
8//===----------------------------------------------------------------------===//
9
10// <future>
11
12// class future<R>
13
14// future(const future&) = delete;
15
16#include <future>
Dan Albert1d4a1ed2016-05-25 22:36:09 -070017#include <cassert>
Howard Hinnant7158e5c2010-08-29 14:20:30 +000018
19int main()
20{
21 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070022 typedef int T;
23 std::promise<T> p;
24 std::future<T> f0 = p.get_future();
25 std::future<T> f = f0;
26 assert(!f0.valid());
27 assert(f.valid());
Howard Hinnant7158e5c2010-08-29 14:20:30 +000028 }
29 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070030 typedef int T;
31 std::future<T> f0;
32 std::future<T> f = f0;
33 assert(!f0.valid());
34 assert(!f.valid());
Howard Hinnant7158e5c2010-08-29 14:20:30 +000035 }
36 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070037 typedef int& T;
38 std::promise<T> p;
39 std::future<T> f0 = p.get_future();
40 std::future<T> f = f0;
41 assert(!f0.valid());
42 assert(f.valid());
Howard Hinnant7158e5c2010-08-29 14:20:30 +000043 }
44 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070045 typedef int& T;
46 std::future<T> f0;
47 std::future<T> f = std::move(f0);
48 assert(!f0.valid());
49 assert(!f.valid());
Howard Hinnant7158e5c2010-08-29 14:20:30 +000050 }
51 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070052 typedef void T;
53 std::promise<T> p;
54 std::future<T> f0 = p.get_future();
55 std::future<T> f = f0;
56 assert(!f0.valid());
57 assert(f.valid());
Howard Hinnant7158e5c2010-08-29 14:20:30 +000058 }
Dan Albert1d4a1ed2016-05-25 22:36:09 -070059 {
60 typedef void T;
61 std::future<T> f0;
62 std::future<T> f = f0;
63 assert(!f0.valid());
64 assert(!f.valid());
65 }
Howard Hinnant7158e5c2010-08-29 14:20:30 +000066}