diff --git a/src/corelib/thread/qfutureinterface.h b/src/corelib/thread/qfutureinterface.h index 7e682e69b6..ecb0f5b7ea 100644 --- a/src/corelib/thread/qfutureinterface.h +++ b/src/corelib/thread/qfutureinterface.h @@ -236,6 +236,8 @@ public: inline QFuture future(); // implemented in qfuture.h + template , bool> = true> + inline bool reportAndEmplaceResult(int index, Args&&...args); inline bool reportResult(const T *result, int index = -1); inline bool reportAndMoveResult(T &&result, int index = -1); inline bool reportResult(T &&result, int index = -1); @@ -301,7 +303,8 @@ inline bool QFutureInterface::reportResult(const T *result, int index) } template -bool QFutureInterface::reportAndMoveResult(T &&result, int index) +template, bool>> +bool QFutureInterface::reportAndEmplaceResult(int index, Args&&...args) { QMutexLocker locker{&mutex()}; if (queryState(Canceled) || queryState(Finished)) @@ -311,13 +314,19 @@ bool QFutureInterface::reportAndMoveResult(T &&result, int index) QtPrivate::ResultStoreBase &store = resultStoreBase(); const int oldResultCount = store.count(); - const int insertIndex = store.moveResult(index, std::move(result)); + const int insertIndex = store.emplaceResult(index, std::forward(args)...); // Let's make sure it's not in pending results. if (insertIndex != -1 && (!store.filterMode() || oldResultCount < store.count())) reportResultsReady(insertIndex, store.count()); return insertIndex != -1; } +template +bool QFutureInterface::reportAndMoveResult(T &&result, int index) +{ + return reportAndEmplaceResult(index, std::move(result)); +} + template bool QFutureInterface::reportResult(T &&result, int index) {