15a83710eSEric Fiselier //===----------------------------------------------------------------------===// 25a83710eSEric Fiselier // 357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65a83710eSEric Fiselier // 75a83710eSEric Fiselier //===----------------------------------------------------------------------===// 85a83710eSEric Fiselier // 9*a7f9895cSLouis Dionne // UNSUPPORTED: no-threads 1031cbe0f2SLouis Dionne // UNSUPPORTED: c++03 115a83710eSEric Fiselier 125a83710eSEric Fiselier // <future> 135a83710eSEric Fiselier 145a83710eSEric Fiselier // class shared_future<R> 155a83710eSEric Fiselier 165a83710eSEric Fiselier // shared_future(future<R>&& rhs); 175a83710eSEric Fiselier 185a83710eSEric Fiselier #include <future> 195a83710eSEric Fiselier #include <cassert> 205a83710eSEric Fiselier 217fc6a556SMarshall Clow #include "test_macros.h" 227fc6a556SMarshall Clow main(int,char **)232df59c50SJF Bastienint main(int, char**) 245a83710eSEric Fiselier { 255a83710eSEric Fiselier { 265a83710eSEric Fiselier typedef int T; 275a83710eSEric Fiselier std::promise<T> p; 285a83710eSEric Fiselier std::future<T> f0 = p.get_future(); 295a83710eSEric Fiselier std::shared_future<T> f = std::move(f0); 305a83710eSEric Fiselier assert(!f0.valid()); 315a83710eSEric Fiselier assert(f.valid()); 325a83710eSEric Fiselier } 335a83710eSEric Fiselier { 345a83710eSEric Fiselier typedef int T; 355a83710eSEric Fiselier std::future<T> f0; 365a83710eSEric Fiselier std::shared_future<T> f = std::move(f0); 375a83710eSEric Fiselier assert(!f0.valid()); 385a83710eSEric Fiselier assert(!f.valid()); 395a83710eSEric Fiselier } 405a83710eSEric Fiselier { 415a83710eSEric Fiselier typedef int& T; 425a83710eSEric Fiselier std::promise<T> p; 435a83710eSEric Fiselier std::future<T> f0 = p.get_future(); 445a83710eSEric Fiselier std::shared_future<T> f = std::move(f0); 455a83710eSEric Fiselier assert(!f0.valid()); 465a83710eSEric Fiselier assert(f.valid()); 475a83710eSEric Fiselier } 485a83710eSEric Fiselier { 495a83710eSEric Fiselier typedef int& T; 505a83710eSEric Fiselier std::future<T> f0; 515a83710eSEric Fiselier std::shared_future<T> f = std::move(f0); 525a83710eSEric Fiselier assert(!f0.valid()); 535a83710eSEric Fiselier assert(!f.valid()); 545a83710eSEric Fiselier } 555a83710eSEric Fiselier { 565a83710eSEric Fiselier typedef void T; 575a83710eSEric Fiselier std::promise<T> p; 585a83710eSEric Fiselier std::future<T> f0 = p.get_future(); 595a83710eSEric Fiselier std::shared_future<T> f = std::move(f0); 605a83710eSEric Fiselier assert(!f0.valid()); 615a83710eSEric Fiselier assert(f.valid()); 625a83710eSEric Fiselier } 635a83710eSEric Fiselier { 645a83710eSEric Fiselier typedef void T; 655a83710eSEric Fiselier std::future<T> f0; 665a83710eSEric Fiselier std::shared_future<T> f = std::move(f0); 675a83710eSEric Fiselier assert(!f0.valid()); 685a83710eSEric Fiselier assert(!f.valid()); 695a83710eSEric Fiselier } 702df59c50SJF Bastien 712df59c50SJF Bastien return 0; 725a83710eSEric Fiselier } 73