blob: 794b5ce38feba16c841fc26715d6896280585d58 [file] [log] [blame]
Howard Hinnante6e4d012010-09-03 21:46:37 +00001//===----------------------------------------------------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
Howard Hinnantb64f8b02010-11-16 22:09:02 +00005// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
Howard Hinnante6e4d012010-09-03 21:46:37 +00007//
8//===----------------------------------------------------------------------===//
Jonathan Roelofs8d86b2e2014-09-05 19:45:05 +00009//
10// UNSUPPORTED: libcpp-has-no-threads
Howard Hinnante6e4d012010-09-03 21:46:37 +000011
12// <future>
13
Howard Hinnant7de47902010-11-30 20:23:32 +000014// class future<R>
Howard Hinnante6e4d012010-09-03 21:46:37 +000015
Howard Hinnant7de47902010-11-30 20:23:32 +000016// shared_future<R> share() &&;
Howard Hinnante6e4d012010-09-03 21:46:37 +000017
18#include <future>
19#include <cassert>
20
21int main()
22{
23 {
24 typedef int T;
25 std::promise<T> p;
26 std::future<T> f0 = p.get_future();
Howard Hinnant7de47902010-11-30 20:23:32 +000027 std::shared_future<T> f = std::move(f0.share());
Howard Hinnante6e4d012010-09-03 21:46:37 +000028 assert(!f0.valid());
29 assert(f.valid());
30 }
31 {
32 typedef int T;
33 std::future<T> f0;
Howard Hinnant7de47902010-11-30 20:23:32 +000034 std::shared_future<T> f = std::move(f0.share());
Howard Hinnante6e4d012010-09-03 21:46:37 +000035 assert(!f0.valid());
36 assert(!f.valid());
37 }
38 {
39 typedef int& T;
40 std::promise<T> p;
41 std::future<T> f0 = p.get_future();
Howard Hinnant7de47902010-11-30 20:23:32 +000042 std::shared_future<T> f = std::move(f0.share());
Howard Hinnante6e4d012010-09-03 21:46:37 +000043 assert(!f0.valid());
44 assert(f.valid());
45 }
46 {
47 typedef int& T;
48 std::future<T> f0;
Howard Hinnant7de47902010-11-30 20:23:32 +000049 std::shared_future<T> f = std::move(f0.share());
Howard Hinnante6e4d012010-09-03 21:46:37 +000050 assert(!f0.valid());
51 assert(!f.valid());
52 }
53 {
54 typedef void T;
55 std::promise<T> p;
56 std::future<T> f0 = p.get_future();
Howard Hinnant7de47902010-11-30 20:23:32 +000057 std::shared_future<T> f = std::move(f0.share());
Howard Hinnante6e4d012010-09-03 21:46:37 +000058 assert(!f0.valid());
59 assert(f.valid());
60 }
61 {
62 typedef void T;
63 std::future<T> f0;
Howard Hinnant7de47902010-11-30 20:23:32 +000064 std::shared_future<T> f = std::move(f0.share());
Howard Hinnante6e4d012010-09-03 21:46:37 +000065 assert(!f0.valid());
66 assert(!f.valid());
67 }
68}