154da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant//===----------------------------------------------------------------------===// 254da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant// 354da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant// The LLVM Compiler Infrastructure 454da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant// 5b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// This file is dual licensed under the MIT and the University of Illinois Open 6b64f8b07c104c6cc986570ac8ee0ed16a9f23976Howard Hinnant// Source Licenses. See LICENSE.TXT for details. 754da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant// 854da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant//===----------------------------------------------------------------------===// 98d86b2e6867297fb2109824c67c50de67f3a31f2Jonathan Roelofs// 108d86b2e6867297fb2109824c67c50de67f3a31f2Jonathan Roelofs// UNSUPPORTED: libcpp-has-no-threads 11faa9a31aef72d2db5b858f3aa6e10b7ff80163c8Eric Fiselier// UNSUPPORTED: c++98, c++03 1254da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 1354da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant// <future> 1454da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 1554da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant// class packaged_task<R(ArgTypes...)> 1654da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 1754da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant// void reset(); 1854da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 1954da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant#include <future> 2054da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant#include <cassert> 2154da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 22e3a71a295ed9412bb34ab125c98380498a608b1aAsiri Rathnayake#include "test_macros.h" 23e3a71a295ed9412bb34ab125c98380498a608b1aAsiri Rathnayake 2454da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnantclass A 2554da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant{ 2654da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant long data_; 2754da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 2854da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnantpublic: 2954da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant explicit A(long i) : data_(i) {} 3054da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 3154da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant long operator()(long i, long j) const 3254da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant { 3354da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant return data_ + i + j; 3454da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant } 3554da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant}; 3654da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 3754da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnantint main() 3854da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant{ 3954da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant { 4054da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant std::packaged_task<double(int, char)> p(A(5)); 4154da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant std::future<double> f = p.get_future(); 4254da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant p(3, 'a'); 4354da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant assert(f.get() == 105.0); 4454da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant p.reset(); 4554da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant p(4, 'a'); 4654da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant f = p.get_future(); 4754da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant assert(f.get() == 106.0); 4854da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant } 49e3a71a295ed9412bb34ab125c98380498a608b1aAsiri Rathnayake#ifndef TEST_HAS_NO_EXCEPTIONS 5054da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant { 5154da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant std::packaged_task<double(int, char)> p; 5254da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant try 5354da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant { 5454da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant p.reset(); 5554da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant assert(false); 5654da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant } 5754da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant catch (const std::future_error& e) 5854da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant { 5954da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant assert(e.code() == make_error_code(std::future_errc::no_state)); 6054da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant } 6154da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant } 62e3a71a295ed9412bb34ab125c98380498a608b1aAsiri Rathnayake#endif 6354da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant} 64