xref: /minix3/external/bsd/libc++/dist/libcxx/test/thread/futures/futures.promise/alloc_ctor.pass.cpp (revision 4684ddb6aab0b36791c8099bc705d6140b3d05d0)
1 //===----------------------------------------------------------------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is dual licensed under the MIT and the University of Illinois Open
6 // Source Licenses. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 // <future>
11 
12 // class promise<R>
13 
14 // template <class Allocator>
15 //   promise(allocator_arg_t, const Allocator& a);
16 
17 #include <future>
18 #include <cassert>
19 
20 #include "../test_allocator.h"
21 
main()22 int main()
23 {
24     assert(test_alloc_base::count == 0);
25     {
26         std::promise<int> p(std::allocator_arg, test_allocator<int>());
27         assert(test_alloc_base::count == 1);
28         std::future<int> f = p.get_future();
29         assert(test_alloc_base::count == 1);
30         assert(f.valid());
31     }
32     assert(test_alloc_base::count == 0);
33     {
34         std::promise<int&> p(std::allocator_arg, test_allocator<int>());
35         assert(test_alloc_base::count == 1);
36         std::future<int&> f = p.get_future();
37         assert(test_alloc_base::count == 1);
38         assert(f.valid());
39     }
40     assert(test_alloc_base::count == 0);
41     {
42         std::promise<void> p(std::allocator_arg, test_allocator<void>());
43         assert(test_alloc_base::count == 1);
44         std::future<void> f = p.get_future();
45         assert(test_alloc_base::count == 1);
46         assert(f.valid());
47     }
48     assert(test_alloc_base::count == 0);
49 }
50