summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2020-07-15 14:17:35 +0200
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2020-07-15 16:16:53 +0200
commit124590850b7017233e25366688715ef642c5cdc3 (patch)
tree0d8e3b2f0a32ad65c415bb70c0c83e7bb7cb5482 /src
parent5f3f23462e7990800b7d93daecd4ab8e895ef036 (diff)
Don't test for equality if types can't be compared
For types that don't have an operator==(), always trigger the binding and the changed notification. Task-number: QTBUG-85578 Change-Id: I41374f6d13c88106f4de83864e82172f3a248150 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/kernel/qproperty.h6
-rw-r--r--src/corelib/kernel/qpropertyprivate.h12
2 files changed, 12 insertions, 6 deletions
diff --git a/src/corelib/kernel/qproperty.h b/src/corelib/kernel/qproperty.h
index 5d26c1c0f4..c2949c3022 100644
--- a/src/corelib/kernel/qproperty.h
+++ b/src/corelib/kernel/qproperty.h
@@ -155,8 +155,10 @@ class QPropertyBinding : public QUntypedPropertyBinding
{
PropertyType *propertyPtr = static_cast<PropertyType *>(dataPtr);
PropertyType newValue = impl();
- if (newValue == *propertyPtr)
- return false;
+ if constexpr (QTypeTraits::has_operator_equal_v<PropertyType>) {
+ if (newValue == *propertyPtr)
+ return false;
+ }
*propertyPtr = std::move(newValue);
return true;
}
diff --git a/src/corelib/kernel/qpropertyprivate.h b/src/corelib/kernel/qpropertyprivate.h
index ad5ed59e88..dde6bb8d01 100644
--- a/src/corelib/kernel/qpropertyprivate.h
+++ b/src/corelib/kernel/qpropertyprivate.h
@@ -139,15 +139,19 @@ public:
T getValue() const { return value; }
bool setValueAndReturnTrueIfChanged(T &&v)
{
- if (v == value)
- return false;
+ if constexpr (QTypeTraits::has_operator_equal_v<T>) {
+ if (v == value)
+ return false;
+ }
value = std::move(v);
return true;
}
bool setValueAndReturnTrueIfChanged(const T &v)
{
- if (v == value)
- return false;
+ if constexpr (QTypeTraits::has_operator_equal_v<T>) {
+ if (v == value)
+ return false;
+ }
value = v;
return true;
}