summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qvariant.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/kernel/qvariant.cpp')
-rw-r--r--src/corelib/kernel/qvariant.cpp13
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)