aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/base/QXmppPromise.h5
-rw-r--r--src/base/QXmppTask.h9
2 files changed, 4 insertions, 10 deletions
diff --git a/src/base/QXmppPromise.h b/src/base/QXmppPromise.h
index 09bc5bcb..91443c7f 100644
--- a/src/base/QXmppPromise.h
+++ b/src/base/QXmppPromise.h
@@ -21,6 +21,7 @@
template<typename T>
class QXmppPromise
{
+ static_assert(!std::is_abstract_v<T>);
public:
template<typename U = T, std::enable_if_t<std::is_void_v<U>> * = nullptr>
QXmppPromise()
@@ -43,7 +44,7 @@ public:
#ifdef QXMPP_DOC
void reportFinished(T &&value)
#else
- template<typename U, std::enable_if_t<!std::is_void_v<T> && std::is_base_of_v<T, U>> * = nullptr>
+ template<typename U, std::enable_if_t<!std::is_void_v<T> && std::is_same_v<T, U>> * = nullptr>
void finish(U &&value)
#endif
{
@@ -59,7 +60,7 @@ public:
}
/// \cond
- template<typename U, std::enable_if_t<!std::is_void_v<T> && std::is_constructible_v<T, U> && !std::is_base_of_v<T, U>> * = nullptr>
+ template<typename U, std::enable_if_t<!std::is_void_v<T> && std::is_constructible_v<T, U> && !std::is_same_v<T, U>> * = nullptr>
void finish(U &&value)
{
Q_ASSERT(!d.isFinished());
diff --git a/src/base/QXmppTask.h b/src/base/QXmppTask.h
index 141cf10e..84ba8a33 100644
--- a/src/base/QXmppTask.h
+++ b/src/base/QXmppTask.h
@@ -50,10 +50,6 @@ private:
///
/// Tasks are generated by QXmppPromise and can be handled using QXmppTask::then().
///
-/// It supports abstract types, i.e. you can create a QXmppTask<QXmppStanza> and report MyIq
-/// (derived from QXmppStanza) to it and when handling the result it is possible to cast the result
-/// back to MyIq.
-///
/// Unlike QFuture, this is not thread-safe. This avoids the need to do mutex locking at every
/// access though.
///
@@ -177,10 +173,7 @@ public:
///
/// Moves the result of the operation out of the task.
///
- /// Since this returns by value, you will not be able to cast the result to derived types. Use
- /// result() for read-only access or register a handler function using then().
- ///
- /// \warning This can only be used once the operation is finished.
+ /// \warning This can only be used once and only after the operation has finished.
///
#ifdef QXMPP_DOC
[[nodiscard]] T takeResult()