blob: e127d2c37fafdd9532027c017f7dee5a98447dc0 [file] [log] [blame]
Howard Hinnantf39daa82010-08-28 21:01:06 +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 Hinnantf39daa82010-08-28 21:01:06 +00007//
8//===----------------------------------------------------------------------===//
Jonathan Roelofs8d86b2e2014-09-05 19:45:05 +00009//
10// UNSUPPORTED: libcpp-has-no-threads
Eric Fiselier031a3d22015-08-28 05:06:04 +000011// UNSUPPORTED: c++98, c++03
Howard Hinnantf39daa82010-08-28 21:01:06 +000012
13// <future>
14
15// class promise<R>
16
17// void promise<R&>::set_value_at_thread_exit(R& r);
18
19#include <future>
20#include <memory>
21#include <cassert>
22
23int i = 0;
24
Howard Hinnant932209b2011-05-17 23:32:48 +000025void func(std::promise<int&> p)
Howard Hinnantf39daa82010-08-28 21:01:06 +000026{
27 p.set_value_at_thread_exit(i);
28 i = 4;
29}
30
31int main()
32{
33 {
34 std::promise<int&> p;
35 std::future<int&> f = p.get_future();
36 std::thread(func, std::move(p)).detach();
37 assert(f.get() == 4);
38 }
39}