blob: da54f7ee67329ea6d87a597404a3234d5dab72e6 [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001//===----------------------------------------------------------------------===//
2//
Howard Hinnantf5256e12010-05-11 21:36:01 +00003// The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00004//
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 Hinnantbc8d3f92010-05-11 19:42:16 +00007//
8//===----------------------------------------------------------------------===//
Jonathan Roelofs8d86b2e2014-09-05 19:45:05 +00009//
10// UNSUPPORTED: libcpp-has-no-threads
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000011
12// <future>
13
14// enum class launch
15// {
Howard Hinnant66895642010-11-23 18:33:54 +000016// async = 1,
17// deferred = 2,
Dan Albert1d4a1ed2016-05-25 22:36:09 -070018// any = async | deferred
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000019// };
20
21#include <future>
Howard Hinnantf491e512013-06-29 18:38:17 +000022#include <cassert>
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000023
24int main()
25{
Howard Hinnantf491e512013-06-29 18:38:17 +000026#ifdef _LIBCPP_HAS_NO_STRONG_ENUMS
Dan Albert1d4a1ed2016-05-25 22:36:09 -070027 static_assert(static_cast<int>(std::launch::any) ==
Howard Hinnantf6d875f2011-12-02 19:36:40 +000028 (static_cast<int>(std::launch::async) | static_cast<int>(std::launch::deferred)), "");
Howard Hinnantf491e512013-06-29 18:38:17 +000029#else
Dan Albert1d4a1ed2016-05-25 22:36:09 -070030 static_assert(std::launch::any == (std::launch::async | std::launch::deferred), "");
Howard Hinnantf491e512013-06-29 18:38:17 +000031 static_assert(std::launch(0) == (std::launch::async & std::launch::deferred), "");
Dan Albert1d4a1ed2016-05-25 22:36:09 -070032 static_assert(std::launch::any == (std::launch::async ^ std::launch::deferred), "");
Howard Hinnant6a683bf2013-07-02 18:01:41 +000033 static_assert(std::launch::deferred == ~std::launch::async, "");
Howard Hinnantf491e512013-06-29 18:38:17 +000034 std::launch x = std::launch::async;
35 x &= std::launch::deferred;
36 assert(x == std::launch(0));
37 x = std::launch::async;
38 x |= std::launch::deferred;
Dan Albert1d4a1ed2016-05-25 22:36:09 -070039 assert(x == std::launch::any);
Howard Hinnantf491e512013-06-29 18:38:17 +000040 x ^= std::launch::deferred;
41 assert(x == std::launch::async);
42#endif
Howard Hinnantf6d875f2011-12-02 19:36:40 +000043 static_assert(static_cast<int>(std::launch::async) == 1, "");
44 static_assert(static_cast<int>(std::launch::deferred) == 2, "");
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000045}