brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · 606dccc Raw
68 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-threads10// UNSUPPORTED: c++0311 12// <future>13 14// class packaged_task<R(ArgTypes...)>15 16// ~packaged_task();17 18#include <future>19#include <cassert>20 21#include "make_test_thread.h"22#include "test_macros.h"23 24class A25{26    long data_;27 28public:29    explicit A(long i) : data_(i) {}30 31    long operator()(long i, long j) const {return data_ + i + j;}32};33 34void func(std::packaged_task<double(int, char)>)35{36}37 38void func2(std::packaged_task<double(int, char)> p) { p(3, 97); }39 40int main(int, char**)41{42#ifndef TEST_HAS_NO_EXCEPTIONS43    {44        std::packaged_task<double(int, char)> p(A(5));45        std::future<double> f = p.get_future();46        support::make_test_thread(func, std::move(p)).detach();47        try48        {49            double i = f.get();50            ((void)i); // Prevent unused warning51            assert(false);52        }53        catch (const std::future_error& e)54        {55            assert(e.code() == make_error_code(std::future_errc::broken_promise));56        }57    }58#endif59    {60        std::packaged_task<double(int, char)> p(A(5));61        std::future<double> f = p.get_future();62        support::make_test_thread(func2, std::move(p)).detach();63        assert(f.get() == 105.0);64    }65 66  return 0;67}68