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//===----------------------------------------------------------------------===// 98d86b2e6867297fb2109824c67c50de67f3a31f2Jonathan Roelofs// 108d86b2e6867297fb2109824c67c50de67f3a31f2Jonathan Roelofs// UNSUPPORTED: libcpp-has-no-threads 11031a3d203ab2795050492d71da44179939b42bb3Eric Fiselier// UNSUPPORTED: c++98, c++03 12e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant 13e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant// <future> 14e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant 157de47902d08e6cd08977b573b134f21b5782fc4bHoward Hinnant// class future<R> 16e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant 177de47902d08e6cd08977b573b134f21b5782fc4bHoward Hinnant// shared_future<R> share() &&; 18e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant 19e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant#include <future> 20e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant#include <cassert> 21e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant 22e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnantint main() 23e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant{ 24e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant { 25e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant typedef int T; 26e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::promise<T> p; 27e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::future<T> f0 = p.get_future(); 289bb0cca6462f3ce85b3f6e8a117bec8e9d15f98cMarshall Clow static_assert( noexcept(f0.share()), ""); 29041fb56800c84bd3695aef8f4273c68b4248f107Stephan T. Lavavej std::shared_future<T> f = f0.share(); 30e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f0.valid()); 31e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(f.valid()); 32e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant } 33e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant { 34e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant typedef int T; 35e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::future<T> f0; 369bb0cca6462f3ce85b3f6e8a117bec8e9d15f98cMarshall Clow static_assert( noexcept(f0.share()), ""); 37041fb56800c84bd3695aef8f4273c68b4248f107Stephan T. Lavavej std::shared_future<T> f = f0.share(); 38e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f0.valid()); 39e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f.valid()); 40e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant } 41e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant { 42e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant typedef int& T; 43e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::promise<T> p; 44e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::future<T> f0 = p.get_future(); 459bb0cca6462f3ce85b3f6e8a117bec8e9d15f98cMarshall Clow static_assert( noexcept(f0.share()), ""); 46041fb56800c84bd3695aef8f4273c68b4248f107Stephan T. Lavavej std::shared_future<T> f = f0.share(); 47e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f0.valid()); 48e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(f.valid()); 49e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant } 50e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant { 51e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant typedef int& T; 52e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::future<T> f0; 539bb0cca6462f3ce85b3f6e8a117bec8e9d15f98cMarshall Clow static_assert( noexcept(f0.share()), ""); 54041fb56800c84bd3695aef8f4273c68b4248f107Stephan T. Lavavej std::shared_future<T> f = f0.share(); 55e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f0.valid()); 56e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f.valid()); 57e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant } 58e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant { 59e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant typedef void T; 60e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::promise<T> p; 61e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::future<T> f0 = p.get_future(); 629bb0cca6462f3ce85b3f6e8a117bec8e9d15f98cMarshall Clow static_assert( noexcept(f0.share()), ""); 63041fb56800c84bd3695aef8f4273c68b4248f107Stephan T. Lavavej std::shared_future<T> f = f0.share(); 64e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f0.valid()); 65e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(f.valid()); 66e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant } 67e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant { 68e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant typedef void T; 69e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant std::future<T> f0; 709bb0cca6462f3ce85b3f6e8a117bec8e9d15f98cMarshall Clow static_assert( noexcept(f0.share()), ""); 71041fb56800c84bd3695aef8f4273c68b4248f107Stephan T. Lavavej std::shared_future<T> f = f0.share(); 72e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f0.valid()); 73e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant assert(!f.valid()); 74e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant } 75e6e4d015530014978920fa46cfe294518dc3490aHoward Hinnant} 76