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//===----------------------------------------------------------------------===// 97112dae6acac544a0271a85d95342c583441e2d1Dan Albert// 107112dae6acac544a0271a85d95342c583441e2d1Dan Albert// UNSUPPORTED: libcpp-has-no-threads 1154da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 1254da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant// <future> 1354da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 1454da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant// class promise<R> 1554da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 1654da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant// future<R> get_future(); 1754da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 1854da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant#include <future> 1954da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant#include <cassert> 2054da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant 2154da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnantint main() 2254da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant{ 2354da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant { 2454da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant std::promise<double> p; 2554da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant std::future<double> f = p.get_future(); 2654da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant p.set_value(105.5); 2754da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant assert(f.get() == 105.5); 2854da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant } 2954da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant { 3054da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant std::promise<double> p; 3154da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant std::future<double> f = p.get_future(); 3254da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant try 3354da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant { 3454da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant f = p.get_future(); 3554da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant assert(false); 3654da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant } 3754da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant catch (const std::future_error& e) 3854da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant { 3954da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant assert(e.code() == make_error_code(std::future_errc::future_already_retrieved)); 4054da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant } 4154da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant } 4254da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant { 4354da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant std::promise<double> p; 4454da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant std::promise<double> p0 = std::move(p); 4554da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant try 4654da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant { 4754da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant std::future<double> f = p.get_future(); 4854da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant assert(false); 4954da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant } 5054da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant catch (const std::future_error& e) 5154da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant { 5254da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant assert(e.code() == make_error_code(std::future_errc::no_state)); 5354da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant } 5454da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant } 5554da338f59b56e267dd6d1c0981e3c607c94c2b7Howard Hinnant} 56