summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
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;
}