diff --git a/examples/qtconcurrent/wordcount/main.cpp b/examples/qtconcurrent/wordcount/main.cpp index ae8542a7617..f4de2886a8b 100644 --- a/examples/qtconcurrent/wordcount/main.cpp +++ b/examples/qtconcurrent/wordcount/main.cpp @@ -157,7 +157,7 @@ int main(int argc, char** argv) { QElapsedTimer timer; timer.start(); - WordCount total = mappedReduced(files, countWords, reduce); + WordCount total = mappedReduced(files, countWords, reduce).result(); mapReduceTime = timer.elapsed(); qDebug() << "MapReduce" << mapReduceTime; } diff --git a/src/corelib/thread/qfuture.h b/src/corelib/thread/qfuture.h index c5966f7893f..44c53312618 100644 --- a/src/corelib/thread/qfuture.h +++ b/src/corelib/thread/qfuture.h @@ -81,7 +81,7 @@ public: } template> - QFuture(const QFuture &other) : d(other.d) + explicit QFuture(const QFuture &other) : d(other.d) { } @@ -96,9 +96,6 @@ public: ~QFuture() { } QFuture(const QFuture &) { } QFuture & operator=(const QFuture &) { } - - // This is required to allow QDoc to find the declaration of operator T(). - operator T() const; #endif void cancel() { d.cancel(); } @@ -150,10 +147,6 @@ QT_WARNING_POP template> bool isResultReadyAt(int resultIndex) const { return d.isResultReadyAt(resultIndex); } - // operator T() - template - operator typename std::enable_if_t, U>() const { return result(); } - template> QList results() const { return d.results(); } diff --git a/src/corelib/thread/qfuture.qdoc b/src/corelib/thread/qfuture.qdoc index 59f80da4afa..82b76570162 100644 --- a/src/corelib/thread/qfuture.qdoc +++ b/src/corelib/thread/qfuture.qdoc @@ -433,19 +433,6 @@ \sa resultAt(), resultCount(), takeResult() */ -/*! \fn template QFuture::operator T() const - - Returns the first result in the future. If the result is not immediately - available, this function will block and wait for the result to become - available. This is a convenience method for calling result() or - resultAt(0). - - \note Calling this function leads to undefined behavior if isValid() - returns \c false for this QFuture. - - \sa result(), resultAt(), results(), takeResult(), isValid() -*/ - /*! \fn template QList QFuture::results() const Returns all results from the future. If the results are not immediately available, diff --git a/tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp b/tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp index 32023f0a66d..8cce82defde 100644 --- a/tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp +++ b/tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp @@ -333,12 +333,12 @@ void testFilteredReduced(const QList &sourceObjectList, ReduceObject reduceObject) { const ResultObject result1 = QtConcurrent::filteredReduced( - sourceObjectList, filterObject, reduceObject); + sourceObjectList, filterObject, reduceObject).result(); QCOMPARE(result1, expectedResult); const ResultObject result2 = QtConcurrent::filteredReduced( - sourceObjectList.constBegin(), sourceObjectList.constEnd(), - filterObject, reduceObject); + sourceObjectList.constBegin(), sourceObjectList.constEnd(), + filterObject, reduceObject).result(); QCOMPARE(result2, expectedResult); const ResultObject result3 = QtConcurrent::blockingFilteredReduced( @@ -362,12 +362,13 @@ void testFilteredReduced(const QList &sourceObjectList, QtConcurrent::ReduceOptions options) { const ResultObject result1 = QtConcurrent::filteredReduced( - sourceObjectList, filterObject, reduceObject, options); + sourceObjectList, filterObject, reduceObject, options).result(); QCOMPARE(result1, expectedResult); - const ResultObject result2 = QtConcurrent::filteredReduced( - sourceObjectList.constBegin(), sourceObjectList.constEnd(), filterObject, - reduceObject, options); + const ResultObject result2 = + QtConcurrent::filteredReduced(sourceObjectList.constBegin(), + sourceObjectList.constEnd(), + filterObject, reduceObject, options).result(); QCOMPARE(result2, expectedResult); const ResultObject result3 = QtConcurrent::blockingFilteredReduced( @@ -492,13 +493,14 @@ void testFilteredReducedThreadPool(QThreadPool *pool, ReduceObject reduceObject) { const ResultObject result1 = QtConcurrent::filteredReduced( - pool, sourceObjectList, filterObject, reduceObject); + pool, sourceObjectList, filterObject, reduceObject).result(); QCOMPARE(result1, expectedResult); QCOMPARE(threadCount(), 1); // ensure the only one thread was working - const ResultObject result2 = QtConcurrent::filteredReduced( - pool, sourceObjectList.constBegin(), sourceObjectList.constEnd(), - filterObject, reduceObject); + const ResultObject result2 = + QtConcurrent::filteredReduced(pool, sourceObjectList.constBegin(), + sourceObjectList.constEnd(), filterObject, + reduceObject).result(); QCOMPARE(result2, expectedResult); QCOMPARE(threadCount(), 1); // ensure the only one thread was working @@ -640,12 +642,12 @@ void testFilteredReducedInitialValue(const QList &sourceObjectList InitialObject &&initialObject) { const ResultObject result1 = QtConcurrent::filteredReduced( - sourceObjectList, filterObject, reduceObject, initialObject); + sourceObjectList, filterObject, reduceObject, initialObject).result(); QCOMPARE(result1, expectedResult); const ResultObject result2 = QtConcurrent::filteredReduced( - sourceObjectList.constBegin(), sourceObjectList.constEnd(), - filterObject, reduceObject, initialObject); + sourceObjectList.constBegin(), sourceObjectList.constEnd(), + filterObject, reduceObject, initialObject).result(); QCOMPARE(result2, expectedResult); const ResultObject result3 = QtConcurrent::blockingFilteredReduced( @@ -671,12 +673,13 @@ void testFilteredReducedInitialValue(const QList &sourceObjectList QtConcurrent::ReduceOptions options) { const ResultObject result1 = QtConcurrent::filteredReduced( - sourceObjectList, filterObject, reduceObject, initialObject, options); + sourceObjectList, filterObject, reduceObject, initialObject, options).result(); QCOMPARE(result1, expectedResult); - const ResultObject result2 = QtConcurrent::filteredReduced( - sourceObjectList.constBegin(), sourceObjectList.constEnd(), - filterObject, reduceObject, initialObject, options); + const ResultObject result2 = + QtConcurrent::filteredReduced(sourceObjectList.constBegin(), + sourceObjectList.constEnd(), filterObject, reduceObject, + initialObject, options).result(); QCOMPARE(result2, expectedResult); const ResultObject result3 = QtConcurrent::blockingFilteredReduced( @@ -810,13 +813,14 @@ void testFilteredReducedInitialValueThreadPool(QThreadPool *pool, InitialObject &&initialObject) { const ResultObject result1 = QtConcurrent::filteredReduced( - pool, sourceObjectList, filterObject, reduceObject, initialObject); + pool, sourceObjectList, filterObject, reduceObject, initialObject).result(); QCOMPARE(result1, expectedResult); QCOMPARE(threadCount(), 1); // ensure the only one thread was working - const ResultObject result2 = QtConcurrent::filteredReduced( - pool, sourceObjectList.constBegin(), sourceObjectList.constEnd(), - filterObject, reduceObject, initialObject); + const ResultObject result2 = + QtConcurrent::filteredReduced(pool, sourceObjectList.constBegin(), + sourceObjectList.constEnd(), filterObject, + reduceObject, initialObject).result(); QCOMPARE(result2, expectedResult); QCOMPARE(threadCount(), 1); // ensure the only one thread was working diff --git a/tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.cpp b/tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.cpp index ca2db64a858..e3b61bb1097 100644 --- a/tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.cpp +++ b/tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.cpp @@ -674,11 +674,12 @@ template &sourceObjectList, const ResultObject &expectedResult, MapObject mapObject, ReduceObject reduceObject) { const ResultObject result1 = QtConcurrent::mappedReduced( - sourceObjectList, mapObject, reduceObject); + sourceObjectList, mapObject, reduceObject).result(); QCOMPARE(result1, expectedResult); const ResultObject result2 = QtConcurrent::mappedReduced( - sourceObjectList.constBegin(), sourceObjectList.constEnd(), mapObject, reduceObject); + sourceObjectList.constBegin(), sourceObjectList.constEnd(), + mapObject, reduceObject).result(); QCOMPARE(result2, expectedResult); const ResultObject result3 = QtConcurrent::blockingMappedReduced( @@ -694,11 +695,12 @@ template &sourceObjectList, const ResultObject &expectedResult, MapObject mapObject, ReduceObject reduceObject, QtConcurrent::ReduceOptions options) { const ResultObject result1 = QtConcurrent::mappedReduced( - sourceObjectList, mapObject, reduceObject, options); + sourceObjectList, mapObject, reduceObject, options).result(); QCOMPARE(result1, expectedResult); - const ResultObject result2 = QtConcurrent::mappedReduced( - sourceObjectList.constBegin(), sourceObjectList.constEnd(), mapObject, reduceObject, options); + const ResultObject result2 = + QtConcurrent::mappedReduced(sourceObjectList.constBegin(), sourceObjectList.constEnd(), + mapObject, reduceObject, options).result(); QCOMPARE(result2, expectedResult); const ResultObject result3 = QtConcurrent::blockingMappedReduced( @@ -796,13 +798,15 @@ void testMappedReducedThreadPool(QThreadPool *pool, MapObject mapObject, ReduceObject reduceObject) { - const ResultObject result1 = QtConcurrent::mappedReduced(pool, - sourceObjectList, mapObject, reduceObject); + const ResultObject result1 = QtConcurrent::mappedReduced( + pool, sourceObjectList, mapObject, reduceObject).result(); QCOMPARE(result1, expectedResult); QCOMPARE(threadCount(), 1); // ensure the only one thread was working - const ResultObject result2 = QtConcurrent::mappedReduced(pool, - sourceObjectList.constBegin(), sourceObjectList.constEnd(), mapObject, reduceObject); + const ResultObject result2 = + QtConcurrent::mappedReduced(pool, sourceObjectList.constBegin(), + sourceObjectList.constEnd(), mapObject, + reduceObject).result(); QCOMPARE(result2, expectedResult); QCOMPARE(threadCount(), 1); // ensure the only one thread was working @@ -954,12 +958,14 @@ void testMappedReducedInitialValue(const QList &sourceObjectList, ReduceObject reduceObject, InitialObject &&initialObject) { - const ResultObject result1 = QtConcurrent::mappedReduced( - sourceObjectList, mapObject, reduceObject, initialObject); + const ResultObject result1 = + QtConcurrent::mappedReduced(sourceObjectList, mapObject, reduceObject, + initialObject).result(); QCOMPARE(result1, expectedResult); const ResultObject result2 = QtConcurrent::mappedReduced( - sourceObjectList.constBegin(), sourceObjectList.constEnd(), mapObject, reduceObject, initialObject); + sourceObjectList.constBegin(), sourceObjectList.constEnd(), + mapObject, reduceObject, initialObject).result(); QCOMPARE(result2, expectedResult); const ResultObject result3 = QtConcurrent::blockingMappedReduced( @@ -980,11 +986,12 @@ void testMappedReducedInitialValue(const QList &sourceObjectList, QtConcurrent::ReduceOptions options) { const ResultObject result1 = QtConcurrent::mappedReduced( - sourceObjectList, mapObject, reduceObject, initialObject, options); + sourceObjectList, mapObject, reduceObject, initialObject, options).result(); QCOMPARE(result1, expectedResult); - const ResultObject result2 = QtConcurrent::mappedReduced( - sourceObjectList.constBegin(), sourceObjectList.constEnd(), mapObject, reduceObject, initialObject, options); + const ResultObject result2 = + QtConcurrent::mappedReduced(sourceObjectList.constBegin(), sourceObjectList.constEnd(), + mapObject, reduceObject, initialObject, options).result(); QCOMPARE(result2, expectedResult); const ResultObject result3 = QtConcurrent::blockingMappedReduced( @@ -1090,13 +1097,14 @@ void testMappedReducedInitialValueThreadPool(QThreadPool *pool, InitialObject &&initialObject) { const ResultObject result1 = QtConcurrent::mappedReduced( - pool, sourceObjectList, mapObject, reduceObject, initialObject); + pool, sourceObjectList, mapObject, reduceObject, initialObject).result(); QCOMPARE(result1, expectedResult); QCOMPARE(threadCount(), 1); // ensure the only one thread was working - const ResultObject result2 = QtConcurrent::mappedReduced( - pool, sourceObjectList.constBegin(), sourceObjectList.constEnd(), - mapObject, reduceObject, initialObject); + const ResultObject result2 = + QtConcurrent::mappedReduced(pool, sourceObjectList.constBegin(), + sourceObjectList.constEnd(), mapObject, + reduceObject, initialObject).result(); QCOMPARE(result2, expectedResult); QCOMPARE(threadCount(), 1); // ensure the only one thread was working diff --git a/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp b/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp index 01b7c1b8959..c4d7c1d3628 100644 --- a/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp +++ b/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp @@ -127,14 +127,14 @@ void tst_QtConcurrentRun::runLightFunction() void (*f3)(QPromise &) = lightOverloaded; qDebug("starting function with promise"); - QFuture future3 = run(f3); + QFuture future3 = run(f3); qDebug("waiting"); future3.waitForFinished(); qDebug("done"); void (*f4)(QPromise &, int v) = lightOverloaded; qDebug("starting function with promise and with arg"); - QFuture future4 = run(f4, 2); + QFuture future4 = run(f4, 2); qDebug("waiting"); future4.waitForFinished(); qDebug("done"); diff --git a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp index 54d2182e5ce..431ca4dd5ab 100644 --- a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp +++ b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp @@ -249,7 +249,7 @@ void tst_QLockFile::waitForLock() if (!releaseEarly) // only let the thread release the lock now semMainThreadDone.release(); - QVERIFY(ret); // waits for the thread to finish + QVERIFY(ret.result()); // waits for the thread to finish } void tst_QLockFile::staleLockFromCrashedProcess_data() diff --git a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp index 0faa8e0be79..18e11c35ad4 100644 --- a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp +++ b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp @@ -99,6 +99,7 @@ class tst_QFuture: public QObject private slots: void resultStore(); void future(); + void futureToVoid(); void futureInterface(); void refcounting(); void cancel(); @@ -109,7 +110,6 @@ private slots: void progressText(); void resultsAfterFinished(); void resultsAsList(); - void implicitConversions(); void iterators(); void iteratorsThread(); #if QT_DEPRECATED_SINCE(6, 0) @@ -609,6 +609,19 @@ void tst_QFuture::future() QCOMPARE(intFuture2.isFinished(), true); } +void tst_QFuture::futureToVoid() +{ + QPromise p; + QFuture future = p.future(); + + p.start(); + p.setProgressValue(42); + p.finish(); + + QFuture voidFuture = QFuture(future); + QCOMPARE(voidFuture.progressValue(), 42); +} + class IntResult : public QFutureInterface { public: @@ -1067,25 +1080,6 @@ void tst_QFuture::resultsAsList() QCOMPARE(results, QList() << 1 << 2); } -/* - Test that QFuture can be implicitly converted to T -*/ -void tst_QFuture::implicitConversions() -{ - QFutureInterface iface; - iface.reportStarted(); - - QFuture f(&iface); - - const QString input("FooBar 2000"); - iface.reportFinished(&input); - - const QString result = f; - QCOMPARE(result, input); - QCOMPARE(QString(f), input); - QCOMPARE(static_cast(f), input); -} - void tst_QFuture::iterators() { { diff --git a/tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp b/tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp index 027bd1313ef..e83ea07dd4a 100644 --- a/tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp +++ b/tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp @@ -864,7 +864,7 @@ void tst_QFutureWatcher::suspendEvents() void tst_QFutureWatcher::suspended() { - QFutureWatcher watcher; + QFutureWatcher watcher; QSignalSpy resultReadySpy(&watcher, &QFutureWatcher::resultReadyAt); #if QT_DEPRECATED_SINCE(6, 0) QT_WARNING_PUSH