diff options
Diffstat (limited to 'src/corelib/kernel/qvariant.cpp')
-rw-r--r-- | src/corelib/kernel/qvariant.cpp | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 5ffac55cfd..2844f09949 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -253,11 +253,15 @@ static void customConstruct(QVariant::Private *d, const void *copy) *d = QVariant::Private(); return; } + if (!iface->copyCtr || (!copy && !iface->defaultCtr)) { + // QVariant requires type to be copy and default constructible + *d = QVariant::Private(); + qWarning("QVariant: Provided metatype does not support " + "destruction, copy and default construction"); + return; + } if (QVariant::Private::canUseInternalSpace(iface)) { - // QVariant requires type to be copy and default constructible - Q_ASSERT(iface->copyCtr); - Q_ASSERT(iface->defaultCtr); if (copy) iface->copyCtr(iface, &d->data, copy); else @@ -814,6 +818,9 @@ QVariant::QVariant(const QVariant &p) instead to construct variants from the pointer types represented by \c QMetaType::VoidStar, and \c QMetaType::QObjectStar. + If \a type does not support copy and default construction, the variant will + be invalid. + \sa QVariant::fromValue(), QMetaType::Type */ QVariant::QVariant(QMetaType type, const void *copy) : d(type) |