summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/corelib/thread/qfuture.h8
-rw-r--r--src/corelib/thread/qfutureinterface.h3
-rw-r--r--tests/auto/corelib/thread/qfuture/tst_qfuture.cpp11
3 files changed, 22 insertions, 0 deletions
diff --git a/src/corelib/thread/qfuture.h b/src/corelib/thread/qfuture.h
index 8c04b8c437..ab08f7861c 100644
--- a/src/corelib/thread/qfuture.h
+++ b/src/corelib/thread/qfuture.h
@@ -300,6 +300,8 @@ private:
template<class U>
friend class QFuture;
+ friend class QFutureInterfaceBase;
+
template<class Function, class ResultType, class ParentResultType>
friend class QtPrivate::Continuation;
@@ -430,6 +432,12 @@ inline QFuture<void> QFutureInterface<void>::future()
return QFuture<void>(this);
}
+template<typename T>
+QFutureInterfaceBase QFutureInterfaceBase::get(const QFuture<T> &future)
+{
+ return future.d;
+}
+
Q_DECLARE_SEQUENTIAL_ITERATOR(Future)
QT_END_NAMESPACE
diff --git a/src/corelib/thread/qfutureinterface.h b/src/corelib/thread/qfutureinterface.h
index 6924378bf1..ecc31d6ec3 100644
--- a/src/corelib/thread/qfutureinterface.h
+++ b/src/corelib/thread/qfutureinterface.h
@@ -177,6 +177,9 @@ public:
// ### Qt 7: inline
void swap(QFutureInterfaceBase &other) noexcept;
+ template<typename T>
+ static QFutureInterfaceBase get(const QFuture<T> &future); // implemented in qfuture.h
+
protected:
// ### Qt 7: remove const from refT/derefT
bool refT() const noexcept;
diff --git a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
index eff07ce309..8eadaee62a 100644
--- a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
+++ b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
@@ -163,6 +163,8 @@ private slots:
void createReadyFutures();
+ void getFutureInterface();
+
private:
using size_type = std::vector<int>::size_type;
@@ -3521,5 +3523,14 @@ void tst_QFuture::createReadyFutures()
#endif
}
+void tst_QFuture::getFutureInterface()
+{
+ const int val = 42;
+ QFuture<int> f = QtFuture::makeReadyFuture(val);
+
+ auto interface = QFutureInterfaceBase::get(f);
+ QCOMPARE(interface.resultCount(), 1);
+}
+
QTEST_MAIN(tst_QFuture)
#include "tst_qfuture.moc"