1 //===----------------------------------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // UNSUPPORTED: libcpp-has-no-threads
11 // UNSUPPORTED: c++98, c++03
17 // promise& operator=(promise&& rhs);
22 #include "test_macros.h"
23 #include "test_allocator.h"
27 assert(test_alloc_base::alloc_count == 0);
29 std::promise<int> p0(std::allocator_arg, test_allocator<int>());
30 std::promise<int> p(std::allocator_arg, test_allocator<int>());
31 assert(test_alloc_base::alloc_count == 2);
33 assert(test_alloc_base::alloc_count == 1);
34 std::future<int> f = p.get_future();
35 assert(test_alloc_base::alloc_count == 1);
37 #ifndef TEST_HAS_NO_EXCEPTIONS
43 catch (const std::future_error& e)
45 assert(e.code() == make_error_code(std::future_errc::no_state));
48 assert(test_alloc_base::alloc_count == 1);
50 assert(test_alloc_base::alloc_count == 0);
52 std::promise<int&> p0(std::allocator_arg, test_allocator<int>());
53 std::promise<int&> p(std::allocator_arg, test_allocator<int>());
54 assert(test_alloc_base::alloc_count == 2);
56 assert(test_alloc_base::alloc_count == 1);
57 std::future<int&> f = p.get_future();
58 assert(test_alloc_base::alloc_count == 1);
60 #ifndef TEST_HAS_NO_EXCEPTIONS
66 catch (const std::future_error& e)
68 assert(e.code() == make_error_code(std::future_errc::no_state));
71 assert(test_alloc_base::alloc_count == 1);
73 assert(test_alloc_base::alloc_count == 0);
75 std::promise<void> p0(std::allocator_arg, test_allocator<void>());
76 std::promise<void> p(std::allocator_arg, test_allocator<void>());
77 assert(test_alloc_base::alloc_count == 2);
79 assert(test_alloc_base::alloc_count == 1);
80 std::future<void> f = p.get_future();
81 assert(test_alloc_base::alloc_count == 1);
83 #ifndef TEST_HAS_NO_EXCEPTIONS
89 catch (const std::future_error& e)
91 assert(e.code() == make_error_code(std::future_errc::no_state));
94 assert(test_alloc_base::alloc_count == 1);
96 assert(test_alloc_base::alloc_count == 0);