diff --git a/src/corelib/configure.cmake b/src/corelib/configure.cmake index 6e8de890994..eca3b01886f 100644 --- a/src/corelib/configure.cmake +++ b/src/corelib/configure.cmake @@ -137,27 +137,6 @@ int pipes[2]; } ") -# cxx11_future -if (UNIX AND NOT ANDROID AND NOT QNX AND NOT INTEGRITY) - set(cxx11_future_TEST_LIBRARIES pthread) -endif() -qt_config_compile_test(cxx11_future - LABEL "C++11 " - LIBRARIES - "${cxx11_future_TEST_LIBRARIES}" - CODE -"#include - -int main(void) -{ - /* BEGIN TEST: */ -std::future f = std::async([]() { return 42; }); -(void)f.get(); - /* END TEST: */ - return 0; -} -") - # cxx17_filesystem qt_config_compile_test(cxx17_filesystem LABEL "C++17 " @@ -565,7 +544,7 @@ qt_feature("system-doubleconversion" PRIVATE ) qt_feature("cxx11_future" PUBLIC LABEL "C++11 " - CONDITION TEST_cxx11_future + CONDITION ON ) qt_feature("cxx17_filesystem" PUBLIC LABEL "C++17 " diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp index 61369420d14..111c6a93d53 100644 --- a/src/corelib/thread/qthread.cpp +++ b/src/corelib/thread/qthread.cpp @@ -1201,7 +1201,6 @@ bool QThread::isInterruptionRequested() const \sa start() */ -#if QT_CONFIG(cxx11_future) class QThreadCreateThread : public QThread { public: @@ -1230,7 +1229,6 @@ QThread *QThread::createThreadImpl(std::future &&future) { return new QThreadCreateThread(std::move(future)); } -#endif // QT_CONFIG(cxx11_future) /*! \class QDaemonThread diff --git a/src/corelib/thread/qthread.h b/src/corelib/thread/qthread.h index 40f363ee5a9..32a0bb703e8 100644 --- a/src/corelib/thread/qthread.h +++ b/src/corelib/thread/qthread.h @@ -9,10 +9,8 @@ #include // For QThread::create -#if QT_CONFIG(cxx11_future) -# include // for std::async -# include // for std::invoke; no guard needed as it's a C++98 header -#endif +#include // for std::async +#include // for std::invoke; no guard needed as it's a C++98 header // internal compiler error with mingw 8.1 #if defined(Q_CC_MSVC) && defined(Q_PROCESSOR_X86) #include @@ -70,10 +68,8 @@ public: bool event(QEvent *event) override; int loopLevel() const; -#if QT_CONFIG(cxx11_future) || defined(Q_QDOC) template [[nodiscard]] static QThread *create(Function &&f, Args &&... args); -#endif public Q_SLOTS: void start(Priority = InheritPriority); @@ -112,16 +108,13 @@ private: Q_DECLARE_PRIVATE(QThread) friend class QEventLoopLocker; -#if QT_CONFIG(cxx11_future) [[nodiscard]] static QThread *createThreadImpl(std::future &&future); -#endif static Qt::HANDLE currentThreadIdImpl() noexcept Q_DECL_PURE_FUNCTION; friend class QCoreApplication; friend class QThreadData; }; -#if QT_CONFIG(cxx11_future) template QThread *QThread::create(Function &&f, Args &&... args) { @@ -136,7 +129,6 @@ QThread *QThread::create(Function &&f, Args &&... args) std::move(threadFunction), std::forward(args)...)); } -#endif // QT_CONFIG(cxx11_future) /* On architectures and platforms we know, interpret the thread control diff --git a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp index 17deeb4c5ef..fdd3cb53a86 100644 --- a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp +++ b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp @@ -1342,14 +1342,10 @@ void tst_QTimer::timerOrder_data() void tst_QTimer::timerOrderBackgroundThread() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else auto *thread = QThread::create([this]() { timerOrder(); }); thread->start(); QVERIFY(thread->wait()); delete thread; -#endif } struct StaticSingleShotUser diff --git a/tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp b/tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp index 3d3b7245992..415dbd1d1cd 100644 --- a/tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp +++ b/tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp @@ -9,9 +9,7 @@ #include #include -#if QT_CONFIG(cxx11_future) -# include -#endif +#include // COM interface #if defined(Q_OS_WIN) && defined(interface) @@ -253,14 +251,7 @@ void tst_QByteArrayMatcher::haystacksWithMoreThan4GiBWork() QCOMPARE(large.size(), BaseSize + needle.size()); qDebug("created dataset in %lld ms", timer.elapsed()); -# if QT_CONFIG(cxx11_future) using MaybeThread = std::thread; -# else - struct MaybeThread { - std::function func; - void join() { func(); } - }; -# endif // // WHEN: trying to match an occurrence past the 4GiB mark diff --git a/tests/auto/corelib/text/qlatin1stringmatcher/tst_qlatin1stringmatcher.cpp b/tests/auto/corelib/text/qlatin1stringmatcher/tst_qlatin1stringmatcher.cpp index 9572466a7bb..19613105dd4 100644 --- a/tests/auto/corelib/text/qlatin1stringmatcher/tst_qlatin1stringmatcher.cpp +++ b/tests/auto/corelib/text/qlatin1stringmatcher/tst_qlatin1stringmatcher.cpp @@ -8,9 +8,7 @@ #include #include -#if QT_CONFIG(cxx11_future) -# include -#endif +#include // COM interface #if defined(interface) @@ -264,15 +262,7 @@ void tst_QLatin1StringMatcher::haystacksWithMoreThan4GiBWork() QCOMPARE(large.size(), BaseSize + needle.size()); qDebug("created dataset in %lld ms", timer.elapsed()); -# if QT_CONFIG(cxx11_future) using MaybeThread = std::thread; -# else - struct MaybeThread - { - std::function func; - void join() { func(); } - }; -# endif // // WHEN: trying to match an occurrence past the 4GiB mark diff --git a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp index 0bdeb96b141..adca1186181 100644 --- a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp +++ b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp @@ -3908,9 +3908,6 @@ void tst_QFuture::signalConnect() void tst_QFuture::waitForFinished() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else QFutureInterface fi; auto future = fi.future(); @@ -3931,7 +3928,6 @@ void tst_QFuture::waitForFinished() QVERIFY(waitingThread->wait()); QVERIFY(waitingThread->isFinished()); -#endif } void tst_QFuture::rejectResultOverwrite_data() diff --git a/tests/auto/corelib/thread/qpromise/tst_qpromise.cpp b/tests/auto/corelib/thread/qpromise/tst_qpromise.cpp index 10023610050..d332dbc5e4e 100644 --- a/tests/auto/corelib/thread/qpromise/tst_qpromise.cpp +++ b/tests/auto/corelib/thread/qpromise/tst_qpromise.cpp @@ -86,7 +86,6 @@ do { \ QFAIL("Test case " #test "(" #__VA_ARGS__ ") failed"); \ } while (false) -#if QT_CONFIG(cxx11_future) // std::thread-like wrapper that ensures that the thread is joined at the end of // a scope to prevent potential std::terminate struct ThreadWrapper @@ -103,7 +102,6 @@ struct ThreadWrapper t->wait(); } }; -#endif void tst_QPromise::promise() { @@ -344,9 +342,6 @@ void tst_QPromise::progress() void tst_QPromise::addInThread() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else const auto testAddResult = [] (auto promise, const auto &result) { promise.start(); auto f = promise.future(); @@ -362,14 +357,10 @@ void tst_QPromise::addInThread() RUN_TEST_FUNC(testAddResult, QPromise(), 42); RUN_TEST_FUNC(testAddResult, QPromise(), u8"42"); RUN_TEST_FUNC(testAddResult, QPromise(), CopyOnlyType{99}); -#endif } void tst_QPromise::addInThreadMoveOnlyObject() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else QPromise promise; promise.start(); auto f = promise.future(); @@ -381,14 +372,10 @@ void tst_QPromise::addInThreadMoveOnlyObject() // Iterators wait for result first for (auto& result : f) QCOMPARE(result, MoveOnlyType{-11}); -#endif } void tst_QPromise::reportFromMultipleThreads() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else QPromise promise; auto f = promise.future(); promise.start(); @@ -407,14 +394,10 @@ void tst_QPromise::reportFromMultipleThreads() QVERIFY(std::find(expected.begin(), expected.end(), actual) != expected.end()); expected.removeOne(actual); } -#endif } void tst_QPromise::reportFromMultipleThreadsByMovedPromise() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else QPromise initialPromise; auto f = initialPromise.future(); { @@ -441,14 +424,10 @@ void tst_QPromise::reportFromMultipleThreadsByMovedPromise() QVERIFY(std::find(expected.begin(), expected.end(), actual) != expected.end()); expected.removeOne(actual); } -#endif } void tst_QPromise::doNotCancelWhenFinished() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else const auto testFinishedPromise = [] (auto promise) { auto f = promise.future(); promise.start(); @@ -467,15 +446,11 @@ void tst_QPromise::doNotCancelWhenFinished() RUN_TEST_FUNC(testFinishedPromise, QPromise()); RUN_TEST_FUNC(testFinishedPromise, QPromise()); RUN_TEST_FUNC(testFinishedPromise, QPromise()); -#endif } #ifndef QT_NO_EXCEPTIONS void tst_QPromise::cancelWhenDestroyed() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else QPromise initialPromise; auto f = initialPromise.future(); @@ -503,15 +478,11 @@ void tst_QPromise::cancelWhenDestroyed() QVERIFY(std::find(expected.begin(), expected.end(), actual) != expected.end()); expected.removeOne(actual); } -#endif } #endif void tst_QPromise::cancelWhenReassigned() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else QPromise promise; auto f = promise.future(); promise.start(); @@ -525,7 +496,6 @@ void tst_QPromise::cancelWhenReassigned() QCOMPARE(f.isFinished(), true); QCOMPARE(f.isCanceled(), true); -#endif } template @@ -640,9 +610,6 @@ void tst_QPromise::continuationsRunWhenFinished() void tst_QPromise::finishWhenSwapped() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else QPromise promise1; auto f1 = promise1.future(); promise1.start(); @@ -677,15 +644,11 @@ void tst_QPromise::finishWhenSwapped() QCOMPARE(f2.resultAt(0), 1); QCOMPARE(f2.resultAt(1), 2); -#endif } template void testCancelWhenMoved() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else QPromise promise1; auto f1 = promise1.future(); promise1.start(); @@ -711,7 +674,6 @@ void testCancelWhenMoved() // Future #2 is explicitly finished inside thread QCOMPARE(f2.isFinished(), true); QCOMPARE(f2.isCanceled(), false); -#endif } void tst_QPromise::cancelWhenMoved() @@ -753,9 +715,6 @@ void tst_QPromise::waitUntilResumed() void tst_QPromise::waitUntilCanceled() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else QPromise promise; promise.start(); auto f = promise.future(); @@ -776,7 +735,6 @@ void tst_QPromise::waitUntilCanceled() f.waitForFinished(); QCOMPARE(f.resultCount(), 0); -#endif } // Below is a quick and dirty hack to make snippets a part of a test suite diff --git a/tests/auto/corelib/thread/qthread/tst_qthread.cpp b/tests/auto/corelib/thread/qthread/tst_qthread.cpp index 511bc02b45f..095b3dbf585 100644 --- a/tests/auto/corelib/thread/qthread/tst_qthread.cpp +++ b/tests/auto/corelib/thread/qthread/tst_qthread.cpp @@ -1355,9 +1355,6 @@ void tst_QThread::quitLock() void tst_QThread::create() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else { const auto &function = [](){}; QScopedPointer thread(QThread::create(function)); @@ -1597,7 +1594,6 @@ void tst_QThread::create() QVERIFY(!thread); } #endif // QT_NO_EXCEPTIONS -#endif // QT_CONFIG(cxx11_future) } void tst_QThread::createDestruction() diff --git a/tests/auto/corelib/tools/qcryptographichash/tst_qcryptographichash.cpp b/tests/auto/corelib/tools/qcryptographichash/tst_qcryptographichash.cpp index a7c22ffe292..dca993010d4 100644 --- a/tests/auto/corelib/tools/qcryptographichash/tst_qcryptographichash.cpp +++ b/tests/auto/corelib/tools/qcryptographichash/tst_qcryptographichash.cpp @@ -8,9 +8,7 @@ #include #include -#if QT_CONFIG(cxx11_future) -# include -#endif +#include Q_DECLARE_METATYPE(QCryptographicHash::Algorithm) @@ -520,14 +518,7 @@ void tst_QCryptographicHash::moreThan4GiBOfData() { QFETCH(const QCryptographicHash::Algorithm, algorithm); -# if QT_CONFIG(cxx11_future) using MaybeThread = std::thread; -# else - struct MaybeThread { - std::function func; - void join() { func(); } - }; -# endif QElapsedTimer timer; timer.start(); diff --git a/tests/auto/corelib/tools/qhash/tst_qhash.cpp b/tests/auto/corelib/tools/qhash/tst_qhash.cpp index c906924b2b5..003000c94a8 100644 --- a/tests/auto/corelib/tools/qhash/tst_qhash.cpp +++ b/tests/auto/corelib/tools/qhash/tst_qhash.cpp @@ -2820,9 +2820,6 @@ void tst_QHash::QTBUG98265() */ void tst_QHash::detachAndReferences() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires cxx11_future") -#else // Repeat a few times because it's not a guarantee for (int i = 0; i < 50; ++i) { QHash hash; @@ -2860,7 +2857,6 @@ void tst_QHash::detachAndReferences() QVERIFY(hash.contains(kCopy)); QCOMPARE(hash.value(kCopy), vCopy); } -#endif } void tst_QHash::lookupUsingKeyIterator() diff --git a/tests/auto/other/qobjectrace/tst_qobjectrace.cpp b/tests/auto/other/qobjectrace/tst_qobjectrace.cpp index 90b1b5c29a8..e25e99f2a11 100644 --- a/tests/auto/other/qobjectrace/tst_qobjectrace.cpp +++ b/tests/auto/other/qobjectrace/tst_qobjectrace.cpp @@ -318,9 +318,6 @@ private: void tst_QObjectRace::blockingQueuedDestroyRace() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else enum { MinIterations = 100, MinTime = 3000, WaitTime = 25 }; BlockingQueuedDestroyRaceObject sender; @@ -366,7 +363,6 @@ void tst_QObjectRace::blockingQueuedDestroyRace() thread->wait(); } -#endif } static QAtomicInteger countedStructObjectsCount; diff --git a/tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/tst_qtimer_vs_qmetaobject.cpp b/tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/tst_qtimer_vs_qmetaobject.cpp index d36ea17756d..c7f328c1bad 100644 --- a/tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/tst_qtimer_vs_qmetaobject.cpp +++ b/tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/tst_qtimer_vs_qmetaobject.cpp @@ -101,13 +101,9 @@ void qtimer_vs_qmetaobject::bench_data() void qtimer_vs_qmetaobject::benchBackgroundThread() { -#if !QT_CONFIG(cxx11_future) - QSKIP("This test requires QThread::create"); -#else QScopedPointer thread(QThread::create([this]() { bench(); })); thread->start(); QVERIFY(thread->wait()); -#endif } QTEST_MAIN(qtimer_vs_qmetaobject)