Make cv_status a class enum. Fixes PR18314. Thanks to Andersca for the report and the patch.
llvm-svn: 197921
GitOrigin-RevId: ce81aed463eadb24bfe79d4103b39f8dfc21b1b8
diff --git a/include/__mutex_base b/include/__mutex_base
index d4023a6..abb1c12 100644
--- a/include/__mutex_base
+++ b/include/__mutex_base
@@ -254,19 +254,13 @@
swap(unique_lock<_Mutex>& __x, unique_lock<_Mutex>& __y) _NOEXCEPT
{__x.swap(__y);}
-struct _LIBCPP_TYPE_VIS cv_status
+//enum class cv_status
+_LIBCPP_DECLARE_STRONG_ENUM(cv_status)
{
- enum __lx {
- no_timeout,
- timeout
- };
-
- __lx __v_;
-
- _LIBCPP_INLINE_VISIBILITY cv_status(__lx __v) : __v_(__v) {}
- _LIBCPP_INLINE_VISIBILITY operator int() const {return __v_;}
-
+ no_timeout,
+ timeout
};
+_LIBCPP_DECLARE_STRONG_ENUM_EPILOG(cv_status)
class _LIBCPP_TYPE_VIS condition_variable
{
diff --git a/test/thread/thread.condition/cv_status.pass.cpp b/test/thread/thread.condition/cv_status.pass.cpp
index d897657..d5e0947 100644
--- a/test/thread/thread.condition/cv_status.pass.cpp
+++ b/test/thread/thread.condition/cv_status.pass.cpp
@@ -16,6 +16,6 @@
int main()
{
- assert(std::cv_status::no_timeout == 0);
- assert(std::cv_status::timeout == 1);
+ assert(static_cast<int>(std::cv_status::no_timeout) == 0);
+ assert(static_cast<int>(std::cv_status::timeout) == 1);
}