blob: 88f072281750274fe9a51ba5f25ef8e0fd04896c [file] [log] [blame]
Howard Hinnant54da3382010-08-30 18:46:21 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnant54da3382010-08-30 18:46:21 +00007//
8//===----------------------------------------------------------------------===//
Jonathan Roelofs8d86b2e2014-09-05 19:45:05 +00009//
10// UNSUPPORTED: libcpp-has-no-threads
Howard Hinnant54da3382010-08-30 18:46:21 +000011
12// <future>
13
14// class packaged_task<R(ArgTypes...)>
15
16// packaged_task(packaged_task&& other);
17
18#include <future>
19#include <cassert>
20
21class A
22{
23 long data_;
24
25public:
26 explicit A(long i) : data_(i) {}
27
28 long operator()(long i, long j) const {return data_ + i + j;}
29};
30
31int main()
32{
33 {
34 std::packaged_task<double(int, char)> p0(A(5));
35 std::packaged_task<double(int, char)> p = std::move(p0);
Howard Hinnant7de47902010-11-30 20:23:32 +000036 assert(!p0.valid());
37 assert(p.valid());
Howard Hinnant54da3382010-08-30 18:46:21 +000038 std::future<double> f = p.get_future();
39 p(3, 'a');
40 assert(f.get() == 105.0);
41 }
42 {
43 std::packaged_task<double(int, char)> p0;
44 std::packaged_task<double(int, char)> p = std::move(p0);
Howard Hinnant7de47902010-11-30 20:23:32 +000045 assert(!p0.valid());
46 assert(!p.valid());
Howard Hinnant54da3382010-08-30 18:46:21 +000047 }
48}