blob: 70ea0ad31fedadd0e405da7f7e0617cb639b857c [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//===----------------------------------------------------------------------===//
Eric Fiselierfaa9a312015-08-19 04:10:15 +00009
Howard Hinnant54da3382010-08-30 18:46:21 +000010// <future>
11
12// class packaged_task<R(ArgTypes...)>
13
14// packaged_task& operator=(packaged_task&) = delete;
15
16#include <future>
Dan Albert1d4a1ed2016-05-25 22:36:09 -070017#include <cassert>
18
19class A
20{
21 long data_;
22
23public:
24 explicit A(long i) : data_(i) {}
25
26 long operator()(long i, long j) const {return data_ + i + j;}
27};
Howard Hinnant54da3382010-08-30 18:46:21 +000028
29int main()
30{
31 {
Dan Albert1d4a1ed2016-05-25 22:36:09 -070032 std::packaged_task<double(int, char)> p0(A(5));
33 std::packaged_task<double(int, char)> p;
34 p = p0;
35 assert(!p0.valid());
36 assert(p.valid());
37 std::future<double> f = p.get_future();
38 p(3, 'a');
39 assert(f.get() == 105.0);
40 }
41 {
42 std::packaged_task<double(int, char)> p0;
43 std::packaged_task<double(int, char)> p;
44 p = p0;
45 assert(!p0.valid());
46 assert(!p.valid());
Howard Hinnant54da3382010-08-30 18:46:21 +000047 }
48}