diff --git a/src/corelib/thread/qwaitcondition_p.h b/src/corelib/thread/qwaitcondition_p.h index 93ae628143..26a7e03ba7 100644 --- a/src/corelib/thread/qwaitcondition_p.h +++ b/src/corelib/thread/qwaitcondition_p.h @@ -58,12 +58,20 @@ #include #include +// There's no feature macro for C++11 std::mutex, so we use the C++14 one +// for shared_mutex to detect it. +// Needed for: MinGW without gthreads, Integrity +#if __has_include() +# include +#endif + QT_BEGIN_NAMESPACE namespace QtPrivate { -#if defined(Q_OS_INTEGRITY) +#if !defined(__cpp_lib_shared_timed_mutex) +enum class cv_status { no_timeout, timeout }; class condition_variable; class mutex : private QMutex @@ -97,12 +105,12 @@ public: } template - std::cv_status wait_for(std::unique_lock &lock, + cv_status wait_for(std::unique_lock &lock, const std::chrono::duration &d) { return QWaitCondition::wait(lock.mutex(), QDeadlineTimer{d}) - ? std::cv_status::no_timeout - : std::cv_status::timeout; + ? cv_status::no_timeout + : cv_status::timeout; } template bool wait_for(std::unique_lock &lock, @@ -117,12 +125,12 @@ public: } template - std::cv_status wait_until(std::unique_lock &lock, + cv_status wait_until(std::unique_lock &lock, const std::chrono::time_point &t) { return QWaitCondition::wait(lock.mutex(), QDeadlineTimer{t}) - ? std::cv_status::no_timeout - : std::cv_status::timeout; + ? cv_status::no_timeout + : cv_status::timeout; } template @@ -139,12 +147,12 @@ public: }; -#else // Integrity +#else // C++11 threads using mutex = std::mutex; using condition_variable = std::condition_variable; -#endif // Integrity +#endif // C++11 threads } // namespace QtPrivate