17158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant//===----------------------------------------------------------------------===// 27158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant// 37158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant// The LLVM Compiler Infrastructure 47158e5c38b300b7950ad908977b33d737cffb7ffHoward 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. 77158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant// 87158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant//===----------------------------------------------------------------------===// 97158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 107158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant// <future> 117158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 127158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant// class future<R> 137158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 147158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant// future(const future&) = delete; 157158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 167158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant#include <future> 177158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant#include <cassert> 187158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 197158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnantint main() 207158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant{ 217158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 227158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int T; 237158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::promise<T> p; 247158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0 = p.get_future(); 257158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = f0; 267158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 277158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(f.valid()); 287158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 297158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 307158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int T; 317158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0; 327158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = f0; 337158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 347158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f.valid()); 357158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 367158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 377158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int& T; 387158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::promise<T> p; 397158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0 = p.get_future(); 407158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = f0; 417158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 427158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(f.valid()); 437158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 447158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 457158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int& T; 467158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0; 477158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 487158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 497158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f.valid()); 507158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 517158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 527158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef void T; 537158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::promise<T> p; 547158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0 = p.get_future(); 557158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = f0; 567158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 577158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(f.valid()); 587158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 597158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 607158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef void T; 617158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0; 627158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = f0; 637158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 647158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f.valid()); 657158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 667158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant} 67