1 //===----------------------------------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // UNSUPPORTED: libcpp-no-exceptions
10 // UNSUPPORTED: libcpp-has-no-threads
11 // UNSUPPORTED: c++98, c++03
12 
13 // <future>
14 
15 // class shared_future<R>
16 
17 // ~shared_future();
18 
19 #include <future>
20 #include <cassert>
21 
22 #include "test_allocator.h"
23 
24 int main(int, char**)
25 {
26     assert(test_alloc_base::alloc_count == 0);
27     {
28         typedef int T;
29         std::shared_future<T> f;
30         {
31             std::promise<T> p(std::allocator_arg, test_allocator<T>());
32             assert(test_alloc_base::alloc_count == 1);
33             f = p.get_future();
34             assert(test_alloc_base::alloc_count == 1);
35             assert(f.valid());
36         }
37         assert(test_alloc_base::alloc_count == 1);
38         assert(f.valid());
39     }
40     assert(test_alloc_base::alloc_count == 0);
41     {
42         typedef int& T;
43         std::shared_future<T> f;
44         {
45             std::promise<T> p(std::allocator_arg, test_allocator<int>());
46             assert(test_alloc_base::alloc_count == 1);
47             f = p.get_future();
48             assert(test_alloc_base::alloc_count == 1);
49             assert(f.valid());
50         }
51         assert(test_alloc_base::alloc_count == 1);
52         assert(f.valid());
53     }
54     assert(test_alloc_base::alloc_count == 0);
55     {
56         typedef void T;
57         std::shared_future<T> f;
58         {
59             std::promise<T> p(std::allocator_arg, test_allocator<T>());
60             assert(test_alloc_base::alloc_count == 1);
61             f = p.get_future();
62             assert(test_alloc_base::alloc_count == 1);
63             assert(f.valid());
64         }
65         assert(test_alloc_base::alloc_count == 1);
66         assert(f.valid());
67     }
68     assert(test_alloc_base::alloc_count == 0);
69 
70   return 0;
71 }
72