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