brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 4a65daf Raw
74 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8//9// UNSUPPORTED: no-exceptions10// UNSUPPORTED: no-threads11// UNSUPPORTED: c++0312 13// <future>14 15// class shared_future<R>16 17// ~shared_future();18 19#include <future>20#include <cassert>21 22#include "test_macros.h"23#include "test_allocator.h"24 25int main(int, char**)26{27    test_allocator_statistics alloc_stats;28    assert(alloc_stats.alloc_count == 0);29    {30        typedef int T;31        std::shared_future<T> f;32        {33            std::promise<T> p(std::allocator_arg, test_allocator<T>(&alloc_stats));34            assert(alloc_stats.alloc_count == 1);35            f = p.get_future();36            assert(alloc_stats.alloc_count == 1);37            assert(f.valid());38        }39        assert(alloc_stats.alloc_count == 1);40        assert(f.valid());41    }42    assert(alloc_stats.alloc_count == 0);43    {44        typedef int& T;45        std::shared_future<T> f;46        {47            std::promise<T> p(std::allocator_arg, test_allocator<int>(&alloc_stats));48            assert(alloc_stats.alloc_count == 1);49            f = p.get_future();50            assert(alloc_stats.alloc_count == 1);51            assert(f.valid());52        }53        assert(alloc_stats.alloc_count == 1);54        assert(f.valid());55    }56    assert(alloc_stats.alloc_count == 0);57    {58        typedef void T;59        std::shared_future<T> f;60        {61            std::promise<T> p(std::allocator_arg, test_allocator<T>(&alloc_stats));62            assert(alloc_stats.alloc_count == 1);63            f = p.get_future();64            assert(alloc_stats.alloc_count == 1);65            assert(f.valid());66        }67        assert(alloc_stats.alloc_count == 1);68        assert(f.valid());69    }70    assert(alloc_stats.alloc_count == 0);71 72  return 0;73}74