blob: ebdcbf98d996d08880434001d215bdee413ee688 [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& operator=(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{
Dan Albert1d4a1ed2016-05-25 22:36:09 -070021#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnant7158e5c2010-08-29 14:20:30 +000022 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070023 typedef int T;
24 std::promise<T> p;
25 std::future<T> f0 = p.get_future();
26 std::future<T> f;
27 f = f0;
28 assert(!f0.valid());
29 assert(f.valid());
Howard Hinnant7158e5c2010-08-29 14:20:30 +000030 }
31 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070032 typedef int T;
33 std::future<T> f0;
34 std::future<T> f;
35 f = f0;
36 assert(!f0.valid());
37 assert(!f.valid());
Howard Hinnant7158e5c2010-08-29 14:20:30 +000038 }
39 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070040 typedef int& T;
41 std::promise<T> p;
42 std::future<T> f0 = p.get_future();
43 std::future<T> f;
44 f = f0;
45 assert(!f0.valid());
46 assert(f.valid());
Howard Hinnant7158e5c2010-08-29 14:20:30 +000047 }
48 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070049 typedef int& T;
50 std::future<T> f0;
51 std::future<T> f;
52 f = f0;
53 assert(!f0.valid());
54 assert(!f.valid());
Howard Hinnant7158e5c2010-08-29 14:20:30 +000055 }
56 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070057 typedef void T;
58 std::promise<T> p;
59 std::future<T> f0 = p.get_future();
60 std::future<T> f;
61 f = f0;
62 assert(!f0.valid());
63 assert(f.valid());
Howard Hinnant7158e5c2010-08-29 14:20:30 +000064 }
Dan Albert1d4a1ed2016-05-25 22:36:09 -070065 {
66 typedef void T;
67 std::future<T> f0;
68 std::future<T> f;
69 f = f0;
70 assert(!f0.valid());
71 assert(!f.valid());
72 }
73#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnant7158e5c2010-08-29 14:20:30 +000074}