diff --git a/src/corelib/thread/qresultstore.h b/src/corelib/thread/qresultstore.h index 083290f9b7..30ce1fe904 100644 --- a/src/corelib/thread/qresultstore.h +++ b/src/corelib/thread/qresultstore.h @@ -134,6 +134,14 @@ protected: } public: + template + int emplaceResult(int index, Args&&...args) + { + if (containsValidResultItem(index)) // reject if already present + return -1; + return addResult(index, static_cast(new T(std::forward(args)...))); + } + template int addResult(int index, const T *result) { @@ -151,10 +159,7 @@ public: { static_assert(!std::is_reference_v, "trying to move from an lvalue!"); - if (containsValidResultItem(index)) // reject if already present - return -1; - - return addResult(index, static_cast(new T(std::move(result)))); + return emplaceResult>(index, std::forward(result)); } template