set_lvalue.pass.cpp revision f39daa8e5a5f7d7eb19f391497a29b4fa0eec28d
1f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant//===----------------------------------------------------------------------===// 2f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant// 3f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant// The LLVM Compiler Infrastructure 4f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant// 5f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant// This file is distributed under the University of Illinois Open Source 6f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant// License. See LICENSE.TXT for details. 7f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant// 8f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant//===----------------------------------------------------------------------===// 9f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant 10f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant// <future> 11f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant 12f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant// class promise<R> 13f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant 14f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant// void promise<R&>::set_value(R& r); 15f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant 16f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant#include <future> 17f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant#include <cassert> 18f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant 19f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnantint main() 20f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant{ 21f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant { 22f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant typedef int& T; 23f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant int i = 3; 24f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant std::promise<T> p; 25f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant std::future<T> f = p.get_future(); 26f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant p.set_value(i); 27f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant assert(f.get() == 3); 28f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant ++i; 29f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant f = p.get_future(); 30f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant assert(f.get() == 4); 31f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant try 32f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant { 33f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant p.set_value(i); 34f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant assert(false); 35f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant } 36f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant catch (const std::future_error& e) 37f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant { 38f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant assert(e.code() == make_error_code(std::future_errc::promise_already_satisfied)); 39f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant } 40f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant } 41f39daa8e5a5f7d7eb19f391497a29b4fa0eec28dHoward Hinnant} 42