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//===----------------------------------------------------------------------===// 98d86b2e6867297fb2109824c67c50de67f3a31f2Jonathan Roelofs// 10f4dfb45247a5b306ced6c71b2792530c1551078eEric Fiselier// UNSUPPORTED: libcpp-has-no-threads, c++98, c++03 117158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 127158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant// <future> 137158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 147158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant// class future<R> 157158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 167158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant// future(future&& rhs); 177158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 187158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant#include <future> 197158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant#include <cassert> 207158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 217158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnantint main() 227158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant{ 237158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 247158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int T; 257158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::promise<T> p; 267158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0 = p.get_future(); 277158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 287158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 297158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(f.valid()); 307158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 317158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 327158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int T; 337158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0; 347158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 357158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 367158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f.valid()); 377158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 387158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 397158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int& T; 407158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::promise<T> p; 417158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0 = p.get_future(); 427158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 437158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 447158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(f.valid()); 457158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 467158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 477158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int& T; 487158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0; 497158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 507158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 517158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f.valid()); 527158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 537158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 547158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef void T; 557158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::promise<T> p; 567158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0 = p.get_future(); 577158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 587158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 597158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(f.valid()); 607158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 617158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 627158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef void T; 637158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0; 647158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 657158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 667158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f.valid()); 677158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 687158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant} 69