1e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant//===----------------------------------------------------------------------===// 2e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant// 3e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant// The LLVM Compiler Infrastructure 4e6e4d015530014978920fa46cfe294518dc3490aHoward 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. 7e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant// 8e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant//===----------------------------------------------------------------------===// 9e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant 10e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant// <future> 11e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant 127de47902d08e6cd08977b573b134f21b5782fc4bHoward Hinnant// class future<R> 13e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant 147de47902d08e6cd08977b573b134f21b5782fc4bHoward Hinnant// shared_future<R> share() &&; 15e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant 16e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant#include <future> 17e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant#include <cassert> 18e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant 19e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnantint main() 20e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant{ 21e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant { 22e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant typedef int T; 23e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::promise<T> p; 24e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::future<T> f0 = p.get_future(); 257de47902d08e6cd08977b573b134f21b5782fc4bHoward Hinnant std::shared_future<T> f = std::move(f0.share()); 26e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f0.valid()); 27e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(f.valid()); 28e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant } 29e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant { 30e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant typedef int T; 31e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::future<T> f0; 327de47902d08e6cd08977b573b134f21b5782fc4bHoward Hinnant std::shared_future<T> f = std::move(f0.share()); 33e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f0.valid()); 34e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f.valid()); 35e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant } 36e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant { 37e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant typedef int& T; 38e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::promise<T> p; 39e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::future<T> f0 = p.get_future(); 407de47902d08e6cd08977b573b134f21b5782fc4bHoward Hinnant std::shared_future<T> f = std::move(f0.share()); 41e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f0.valid()); 42e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(f.valid()); 43e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant } 44e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant { 45e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant typedef int& T; 46e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::future<T> f0; 477de47902d08e6cd08977b573b134f21b5782fc4bHoward Hinnant std::shared_future<T> f = std::move(f0.share()); 48e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f0.valid()); 49e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f.valid()); 50e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant } 51e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant { 52e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant typedef void T; 53e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::promise<T> p; 54e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::future<T> f0 = p.get_future(); 557de47902d08e6cd08977b573b134f21b5782fc4bHoward Hinnant std::shared_future<T> f = std::move(f0.share()); 56e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f0.valid()); 57e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(f.valid()); 58e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant } 59e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant { 60e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant typedef void T; 61e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::future<T> f0; 627de47902d08e6cd08977b573b134f21b5782fc4bHoward Hinnant std::shared_future<T> f = std::move(f0.share()); 63e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f0.valid()); 64e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f.valid()); 65e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant } 66e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant} 67