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