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 // 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()
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