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& operator=(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; 277158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant 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; 357158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant f = std::move(f0); 367158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 377158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f.valid()); 387158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 397158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 407158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int& T; 417158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::promise<T> p; 427158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0 = p.get_future(); 437158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f; 447158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant f = std::move(f0); 457158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 467158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(f.valid()); 477158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 487158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 497158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef int& T; 507158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0; 517158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f; 527158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant f = std::move(f0); 537158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 547158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f.valid()); 557158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 567158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 577158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef void T; 587158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::promise<T> p; 597158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0 = p.get_future(); 607158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f; 617158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant f = std::move(f0); 627158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 637158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(f.valid()); 647158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 657158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant { 667158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant typedef void T; 677158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f0; 687158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant std::future<T> f; 697158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant f = std::move(f0); 707158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f0.valid()); 717158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant assert(!f.valid()); 727158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant } 7373d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 747158e5c38b300b7950ad908977b33d737cffb7ffHoward Hinnant} 75