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(future&& rhs); 157158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 167158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant#include <future> 177158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant#include <cassert> 187158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 197158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnantint main() 207158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant{ 2173d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 227158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 237158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int T; 247158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::promise<T> p; 257158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0 = p.get_future(); 267158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 277158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 287158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(f.valid()); 297158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 307158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 317158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int T; 327158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0; 337158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 347158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 357158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f.valid()); 367158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 377158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 387158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int& T; 397158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::promise<T> p; 407158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0 = p.get_future(); 417158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 427158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 437158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(f.valid()); 447158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 457158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 467158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int& T; 477158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0; 487158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 497158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 507158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f.valid()); 517158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 527158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 537158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef void T; 547158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::promise<T> p; 557158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0 = p.get_future(); 567158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 577158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 587158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(f.valid()); 597158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 607158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 617158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef void T; 627158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0; 637158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f = std::move(f0); 647158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 657158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f.valid()); 667158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 6773d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 687158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant} 69