QFuture/QPromise: don't check for is_copy_constructible
The check is over-arching. is_move_constructible is sufficient; we don't have to support "ridiculous" types that are copiable but have deleted move operations (such types are fundamentally broken). This is in line with the Move* (legacy) named requirements. Change-Id: Idc7116b39013501b9be39628a4e7afd35fe15530 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io> Reviewed-by: Andrei Golubev <andrei.golubev@qt.io> Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
This commit is contained in:
parent
973700c546
commit
bf22f91441
@ -59,10 +59,9 @@ class QFutureWatcher;
|
||||
template <typename T>
|
||||
class QFuture
|
||||
{
|
||||
static_assert (std::is_copy_constructible_v<T>
|
||||
|| std::is_move_constructible_v<T>
|
||||
static_assert (std::is_move_constructible_v<T>
|
||||
|| std::is_same_v<T, void>,
|
||||
"Type with copy or move constructors or type void is required");
|
||||
"A move-constructible type or type void is required");
|
||||
public:
|
||||
QFuture()
|
||||
: d(QFutureInterface<T>::canceledResult())
|
||||
|
@ -52,10 +52,9 @@ QT_BEGIN_NAMESPACE
|
||||
template<typename T>
|
||||
class QPromise
|
||||
{
|
||||
static_assert (std::is_copy_constructible_v<T>
|
||||
|| std::is_move_constructible_v<T>
|
||||
static_assert (std::is_move_constructible_v<T>
|
||||
|| std::is_same_v<T, void>,
|
||||
"Type with copy or move constructors or type void is required");
|
||||
"A move-constructible type or type void is required");
|
||||
public:
|
||||
QPromise() = default;
|
||||
Q_DISABLE_COPY(QPromise)
|
||||
|
@ -77,7 +77,6 @@ private slots:
|
||||
|
||||
struct TrivialType { int field = 0; };
|
||||
struct CopyOnlyType {
|
||||
Q_DISABLE_MOVE(CopyOnlyType)
|
||||
constexpr CopyOnlyType(int field = 0) noexcept : field(field) {}
|
||||
CopyOnlyType(const CopyOnlyType &) = default;
|
||||
CopyOnlyType& operator=(const CopyOnlyType &) = default;
|
||||
|
Loading…
x
Reference in New Issue
Block a user