summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2016-11-10 14:57:04 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-01-25 17:05:18 +0000
commitf823af43f243b1848fd4a838847317d0ff6d4fdf (patch)
tree0e1b681700b86d8674e7f0e850bd77165e018641
parent374a173d1417a9f8c313088420cb1b792fe45977 (diff)
QVariant of nullptr should always be null
Implements isNull for QVariants of a nullptr so they always return true to isNull(), instead of depending on how they were constructed. Task-number: QTBUG-58296 Change-Id: Ibddec795cdadedef7e17d22c265c29e752d8f99f Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
-rw-r--r--src/corelib/kernel/qvariant_p.h22
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp11
2 files changed, 32 insertions, 1 deletions
diff --git a/src/corelib/kernel/qvariant_p.h b/src/corelib/kernel/qvariant_p.h
index bf88def438..487949431c 100644
--- a/src/corelib/kernel/qvariant_p.h
+++ b/src/corelib/kernel/qvariant_p.h
@@ -177,6 +177,26 @@ inline void v_clear(QVariant::Private *d, T* = 0)
}
+template <typename T>
+struct PrimitiveIsNull
+{
+public:
+ static bool isNull(const QVariant::Private *d)
+ {
+ return d->is_null;
+ }
+};
+
+template <>
+struct PrimitiveIsNull<std::nullptr_t>
+{
+public:
+ static bool isNull(const QVariant::Private *)
+ {
+ return true;
+ }
+};
+
template<class Filter>
class QVariantComparator {
template<typename T, bool IsAcceptedType = Filter::template Acceptor<T>::IsAccepted>
@@ -268,7 +288,7 @@ class QVariantIsNull
{
static bool isNull(const QVariant::Private *d)
{
- return d->is_null;
+ return PrimitiveIsNull<T>::isNull(d);
}
};
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index 75fa424ab1..3a51e67768 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -400,6 +400,17 @@ void tst_QVariant::isNull()
QVERIFY( !varLL.isNull() );
QVariant var7(QString::null);
QVERIFY(var7.isNull());
+ var7 = QVariant::fromValue<QString>(QString::null);
+ QVERIFY(var7.isNull());
+
+ QVariant var8(QMetaType::Nullptr, nullptr);
+ QVERIFY(var8.isNull());
+ var8 = QVariant::fromValue<std::nullptr_t>(nullptr);
+ QVERIFY(var8.isNull());
+ QVariant var9 = QVariant(QJsonValue(QJsonValue::Null));
+ QVERIFY(var9.isNull());
+ var9 = QVariant::fromValue<QJsonValue>(QJsonValue(QJsonValue::Null));
+ QVERIFY(var9.isNull());
}
void tst_QVariant::swap()