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