diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 104a7263b4..a6b383d359 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -1398,8 +1398,7 @@ static void customConstruct(QVariant::Private *d, const void *copy) } // this logic should match with QVariantIntegrator::CanUseInternalSpace - if (size <= sizeof(QVariant::Private::Data) - && (type.flags() & (QMetaType::MovableType | QMetaType::IsEnumeration))) { + if (size <= sizeof(QVariant::Private::Data)) { type.construct(&d->data, copy); d->is_shared = false; } else { diff --git a/src/corelib/kernel/qvariant_p.h b/src/corelib/kernel/qvariant_p.h index 0682d1d6b3..f92f97d836 100644 --- a/src/corelib/kernel/qvariant_p.h +++ b/src/corelib/kernel/qvariant_p.h @@ -63,8 +63,7 @@ QT_BEGIN_NAMESPACE template struct QVariantIntegrator { - static const bool CanUseInternalSpace = sizeof(T) <= sizeof(QVariant::Private::Data) - && ((QTypeInfoQuery::isRelocatable) || std::is_enum::value); + static const bool CanUseInternalSpace = sizeof(T) <= sizeof(QVariant::Private::Data); typedef std::integral_constant CanUseInternalSpace_t; }; static_assert(QVariantIntegrator::CanUseInternalSpace); diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index e18b6e024a..4e67f42dce 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -1909,7 +1909,7 @@ void tst_QVariant::userType() QCOMPARE(instanceCount, 3); { QVariant second = myCarrier; - QCOMPARE(instanceCount, 3); + QCOMPARE(instanceCount, 4); second.detach(); QCOMPARE(instanceCount, 4); } @@ -3315,6 +3315,8 @@ struct MyNotMovable if (!ok) qFatal("MyNotMovable has been moved"); return ok; } + // Make it too big to store it in the variant itself + void *dummy[4]; }; int MyNotMovable::count = 0;