11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//===----------------------------------------------------------------------===//
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//                     The LLVM Compiler Infrastructure
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// This file is dual licensed under the MIT and the University of Illinois Open
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Source Licenses. See LICENSE.TXT for details.
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci//===----------------------------------------------------------------------===//
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// <future>
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// class packaged_task<R(ArgTypes...)>
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// void swap(packaged_task& other);
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <future>
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <cassert>
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass A
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    long data_;
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccipublic:
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    explicit A(long i) : data_(i) {}
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    long operator()(long i, long j) const {return data_ + i + j;}
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciint main()
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci{
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    {
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        std::packaged_task<double(int, char)> p0(A(5));
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        std::packaged_task<double(int, char)> p;
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        p.swap(p0);
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(!p0.valid());
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(p.valid());
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        std::future<double> f = p.get_future();
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        p(3, 'a');
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(f.get() == 105.0);
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    {
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        std::packaged_task<double(int, char)> p0;
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        std::packaged_task<double(int, char)> p;
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        p.swap(p0);
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(!p0.valid());
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        assert(!p.valid());
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci