diff --git a/src/corelib/tools/qhashfunctions.h b/src/corelib/tools/qhashfunctions.h index 90a269deaa5..f34c26d4985 100644 --- a/src/corelib/tools/qhashfunctions.h +++ b/src/corelib/tools/qhashfunctions.h @@ -231,8 +231,10 @@ constexpr inline bool HasQHashSingleArgOverload> = true; } -template && !std::is_enum_v, bool> = true> -size_t qHash(const T &t, size_t seed) noexcept(noexcept(qHash(t))) +// Add Args... to make this overload consistently a worse match than +// original 2-arg qHash overloads (QTBUG-126659) +template && sizeof...(Args) == 0 && !std::is_enum_v, bool> = true> +size_t qHash(const T &t, size_t seed, Args&&...) noexcept(noexcept(qHash(t))) { return qHash(t) ^ seed; } #endif // < Qt 7 diff --git a/tests/auto/corelib/tools/qhashfunctions/tst_qhashfunctions.cpp b/tests/auto/corelib/tools/qhashfunctions/tst_qhashfunctions.cpp index 00ee5763edc..4358aa0d1dc 100644 --- a/tests/auto/corelib/tools/qhashfunctions/tst_qhashfunctions.cpp +++ b/tests/auto/corelib/tools/qhashfunctions/tst_qhashfunctions.cpp @@ -3,6 +3,8 @@ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include + +#include #include #include @@ -44,6 +46,7 @@ private Q_SLOTS: void qhash_of_empty_and_null_qstring(); void qhash_of_empty_and_null_qbytearray(); void qhash_of_zero_floating_points(); + void qmap(); void qthash_data(); void qthash(); void range(); @@ -439,6 +442,14 @@ void tst_QHashFunctions::qhash_of_zero_floating_points() QCOMPARE(qHash(-0.0L, seed), qHash(0.0L, seed)); } +void tst_QHashFunctions::qmap() +{ + // QTBUG-126659 + QMap map; + size_t s = seed; + QCOMPARE(qHash(map, s), seed); +} + void tst_QHashFunctions::qthash_data() { QTest::addColumn("key");