QSharedPointer: fix undefined behavior in operator<
Pointers belonging to different arrays must be compared using std::less. Change-Id: Ib77af7b1b2da58d7243fa77273a8a45ee9035a1a Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
2740b9d668
commit
81a19050d8
@ -850,17 +850,20 @@ Q_INLINE_TEMPLATE typename QSharedPointer<X>::difference_type operator-(T *ptr1,
|
||||
template <class T, class X>
|
||||
Q_INLINE_TEMPLATE bool operator<(const QSharedPointer<T> &ptr1, const QSharedPointer<X> &ptr2)
|
||||
{
|
||||
return ptr1.data() < ptr2.data();
|
||||
using CT = typename std::common_type<T *, X *>::type;
|
||||
return std::less<CT>()(ptr1.data(), ptr2.data());
|
||||
}
|
||||
template <class T, class X>
|
||||
Q_INLINE_TEMPLATE bool operator<(const QSharedPointer<T> &ptr1, X *ptr2)
|
||||
{
|
||||
return ptr1.data() < ptr2;
|
||||
using CT = typename std::common_type<T *, X *>::type;
|
||||
return std::less<CT>()(ptr1.data(), ptr2);
|
||||
}
|
||||
template <class T, class X>
|
||||
Q_INLINE_TEMPLATE bool operator<(T *ptr1, const QSharedPointer<X> &ptr2)
|
||||
{
|
||||
return ptr1 < ptr2.data();
|
||||
using CT = typename std::common_type<T *, X *>::type;
|
||||
return std::less<CT>()(ptr1, ptr2.data());
|
||||
}
|
||||
|
||||
//
|
||||
|
Loading…
x
Reference in New Issue
Block a user