brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 3ac2712 Raw
57 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// template <class R, class... ArgTypes>17//   void18//   swap(packaged_task<R(ArgTypes...)>& x, packaged_task<R(ArgTypes...)>& y);19 20#include <future>21#include <cassert>22 23#include "test_macros.h"24 25class A26{27    long data_;28 29public:30    explicit A(long i) : data_(i) {}31 32    long operator()(long i, long j) const {return data_ + i + j;}33};34 35int main(int, char**)36{37    {38        std::packaged_task<double(int, char)> p0(A(5));39        std::packaged_task<double(int, char)> p;40        swap(p, p0);41        assert(!p0.valid());42        assert(p.valid());43        std::future<double> f = p.get_future();44        p(3, 97);45        assert(f.get() == 105.0);46    }47    {48        std::packaged_task<double(int, char)> p0;49        std::packaged_task<double(int, char)> p;50        swap(p, p0);51        assert(!p0.valid());52        assert(!p.valid());53    }54 55  return 0;56}57