From 6a683bfb5fbf87fc37e155b3146094697a87b86f Mon Sep 17 00:00:00 2001 From: Howard Hinnant <hhinnant@apple.com> Date: Tue, 2 Jul 2013 18:01:41 +0000 Subject: [PATCH] Constrain launch ~ operator to defined bits. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@185452 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/future | 2 +- test/thread/futures/futures.overview/launch.pass.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/future b/include/future index 160114e5..dae1a4b8 100644 --- a/include/future +++ b/include/future @@ -443,7 +443,7 @@ _LIBCPP_CONSTEXPR launch operator~(launch __x) { - return static_cast<launch>(~static_cast<__launch_underlying_type>(__x)); + return static_cast<launch>(~static_cast<__launch_underlying_type>(__x) & 3); } inline _LIBCPP_INLINE_VISIBILITY diff --git a/test/thread/futures/futures.overview/launch.pass.cpp b/test/thread/futures/futures.overview/launch.pass.cpp index d634c8b5..5f4663ca 100644 --- a/test/thread/futures/futures.overview/launch.pass.cpp +++ b/test/thread/futures/futures.overview/launch.pass.cpp @@ -28,7 +28,7 @@ int main() static_assert(std::launch::any == (std::launch::async | std::launch::deferred), ""); static_assert(std::launch(0) == (std::launch::async & std::launch::deferred), ""); static_assert(std::launch::any == (std::launch::async ^ std::launch::deferred), ""); - static_assert(std::launch(~1) == ~std::launch::async, ""); + static_assert(std::launch::deferred == ~std::launch::async, ""); std::launch x = std::launch::async; x &= std::launch::deferred; assert(x == std::launch(0));