From bbe71efc23334ae928b887555d9cdee30fa826e3 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 27 Feb 2020 16:40:34 +0100 Subject: Only declare comparison operators for QVector when comparable This avoid SFINAE from incorrectly assuming QVectors of non-comparable types has them. Change-Id: Ie44eb7873384a0f41a6b8160c340b71ea25839dd Reviewed-by: Thiago Macieira --- src/corelib/tools/qvector.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index 026f99fd09..f8269bfe8c 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -738,31 +738,35 @@ uint qHash(const QVector &key, uint seed = 0) } template -bool operator<(const QVector &lhs, const QVector &rhs) +auto operator<(const QVector &lhs, const QVector &rhs) noexcept(noexcept(std::lexicographical_compare(lhs.begin(), lhs.end(), - rhs.begin(), rhs.end()))) + rhs.begin(), rhs.end()))) + -> decltype(std::declval() < std::declval()) { return std::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end()); } template -inline bool operator>(const QVector &lhs, const QVector &rhs) +auto operator>(const QVector &lhs, const QVector &rhs) noexcept(noexcept(lhs < rhs)) + -> decltype(lhs < rhs) { return rhs < lhs; } template -inline bool operator<=(const QVector &lhs, const QVector &rhs) +auto operator<=(const QVector &lhs, const QVector &rhs) noexcept(noexcept(lhs < rhs)) + -> decltype(lhs < rhs) { return !(lhs > rhs); } template -inline bool operator>=(const QVector &lhs, const QVector &rhs) +auto operator>=(const QVector &lhs, const QVector &rhs) noexcept(noexcept(lhs < rhs)) + -> decltype(lhs < rhs) { return !(lhs < rhs); } -- cgit v1.2.3