blob: c8228c229b6326caa7fe4fe3d478219cfbe17558 [file] [log] [blame]
Howard Hinnantf39daa82010-08-28 21:01:06 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <future>
11
12// class promise<R>
13
14// promise(promise&& rhs);
15
16#include <future>
17#include <cassert>
18
19#include "../test_allocator.h"
20
21int main()
22{
Howard Hinnant73d21a42010-09-04 23:28:19 +000023#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantf39daa82010-08-28 21:01:06 +000024 assert(test_alloc_base::count == 0);
25 {
26 std::promise<int> p0(std::allocator_arg, test_allocator<int>());
27 std::promise<int> p(std::move(p0));
28 assert(test_alloc_base::count == 1);
29 std::future<int> f = p.get_future();
30 assert(test_alloc_base::count == 1);
31 assert(f.valid());
32 try
33 {
34 f = p0.get_future();
35 assert(false);
36 }
37 catch (const std::future_error& e)
38 {
39 assert(e.code() == make_error_code(std::future_errc::no_state));
40 }
41 assert(test_alloc_base::count == 1);
42 }
43 assert(test_alloc_base::count == 0);
44 {
45 std::promise<int&> p0(std::allocator_arg, test_allocator<int>());
46 std::promise<int&> p(std::move(p0));
47 assert(test_alloc_base::count == 1);
48 std::future<int&> f = p.get_future();
49 assert(test_alloc_base::count == 1);
50 assert(f.valid());
51 try
52 {
53 f = p0.get_future();
54 assert(false);
55 }
56 catch (const std::future_error& e)
57 {
58 assert(e.code() == make_error_code(std::future_errc::no_state));
59 }
60 assert(test_alloc_base::count == 1);
61 }
62 assert(test_alloc_base::count == 0);
63 {
64 std::promise<void> p0(std::allocator_arg, test_allocator<void>());
65 std::promise<void> p(std::move(p0));
66 assert(test_alloc_base::count == 1);
67 std::future<void> f = p.get_future();
68 assert(test_alloc_base::count == 1);
69 assert(f.valid());
70 try
71 {
72 f = p0.get_future();
73 assert(false);
74 }
75 catch (const std::future_error& e)
76 {
77 assert(e.code() == make_error_code(std::future_errc::no_state));
78 }
79 assert(test_alloc_base::count == 1);
80 }
81 assert(test_alloc_base::count == 0);
Howard Hinnant73d21a42010-09-04 23:28:19 +000082#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES
Howard Hinnantf39daa82010-08-28 21:01:06 +000083}