diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/kernel/qproperty.h | 6 | ||||
-rw-r--r-- | src/corelib/kernel/qpropertyprivate.h | 12 |
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; } |