199be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant//===----------------------------------------------------------------------===// 299be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// 399be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// The LLVM Compiler Infrastructure 499be8237db0c69ea05bb82bbb8fc8a2273c05743Howard 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. 799be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// 899be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant//===----------------------------------------------------------------------===// 999be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant 1099be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// <future> 1199be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant 1299be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// class shared_future<R> 1399be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant 1499be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant// shared_future& operator=(shared_future&& rhs); 1599be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant 1699be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant#include <future> 1799be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant#include <cassert> 1899be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant 1999be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnantint main() 2099be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant{ 2173d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES 2299be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant { 2399be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant typedef int T; 2499be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::promise<T> p; 2599be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::shared_future<T> f0 = p.get_future(); 2699be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::shared_future<T> f; 2799be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant f = std::move(f0); 2899be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant assert(!f0.valid()); 2999be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant assert(f.valid()); 3099be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant } 3199be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant { 3299be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant typedef int T; 3399be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::shared_future<T> f0; 3499be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::shared_future<T> f; 3599be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant f = std::move(f0); 3699be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant assert(!f0.valid()); 3799be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant assert(!f.valid()); 3899be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant } 3999be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant { 4099be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant typedef int& T; 4199be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::promise<T> p; 4299be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::shared_future<T> f0 = p.get_future(); 4399be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::shared_future<T> f; 4499be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant f = std::move(f0); 4599be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant assert(!f0.valid()); 4699be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant assert(f.valid()); 4799be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant } 4899be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant { 4999be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant typedef int& T; 5099be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::shared_future<T> f0; 5199be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::shared_future<T> f; 5299be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant f = std::move(f0); 5399be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant assert(!f0.valid()); 5499be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant assert(!f.valid()); 5599be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant } 5699be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant { 5799be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant typedef void T; 5899be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::promise<T> p; 5999be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::shared_future<T> f0 = p.get_future(); 6099be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::shared_future<T> f; 6199be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant f = std::move(f0); 6299be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant assert(!f0.valid()); 6399be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant assert(f.valid()); 6499be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant } 6599be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant { 6699be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant typedef void T; 6799be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::shared_future<T> f0; 6899be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant std::shared_future<T> f; 6999be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant f = std::move(f0); 7099be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant assert(!f0.valid()); 7199be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant assert(!f.valid()); 7299be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant } 7373d21a4f0774d3fadab98e690619a359cfb160a3Howard Hinnant#endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES 7499be8237db0c69ea05bb82bbb8fc8a2273c05743Howard Hinnant} 75