/ depends / patches / qt / fix-gcc16-sfinae-qbitarray.patch
fix-gcc16-sfinae-qbitarray.patch
 1  From 679e8bda1eb0cc98acb981e9a10204bed1c179f2 Mon Sep 17 00:00:00 2001
 2  From: Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
 3  Date: Tue, 20 Jan 2026 15:23:31 +0100
 4  Subject: [PATCH] qhashfunctions.h: include QBitArray
 5  
 6  In qhashfunctions.h we're declaring a std::hash specialization for
 7  QBitArray. That specialization instantiates
 8  QNothrowHashable_v<QBitArray>, which checks if qHash(QBitArray) is
 9  noexcept.
10  
11  The problem is that there are already qHash(QByteArrayView) and
12  qHash(QStringView) around, which will be picked up by overload
13  resolution. That, in turn, will try to instantiate the QBAV/QSV
14  constructors from a generic container. That instantiation will fail
15  because QBitArray is not complete yet.
16  
17  When we later complete QBitArray, GCC is going to complain.
18  
19  Therefore, complete QBitArray before attempting SFINAE tricks on it.
20  
21  As an alternative, I could've moved the std::hash specialization
22  to qbitarray.h. However I noticed that qHash(QBitArray) is still
23  declared into qhashfunctions.h, i.e. hashing QBitArrays didn't
24  require the full type, and therefore moving std::hash would've been
25  a potential SIC?
26  
27  Task-number: QTBUG-143470
28  Change-Id: Ie79d15e77d1fb3c86de6d7480a66bddc39f17666
29  Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
30  ---
31   src/corelib/tools/qhashfunctions.h | 5 +++--
32   1 file changed, 3 insertions(+), 2 deletions(-)
33  
34  diff --git a/qtbase/src/corelib/tools/qhashfunctions.h b/qtbase/src/corelib/tools/qhashfunctions.h
35  index 8f1394c8ad35..beef80557865 100644
36  --- a/qtbase/src/corelib/tools/qhashfunctions.h
37  +++ b/qtbase/src/corelib/tools/qhashfunctions.h
38  @@ -8,6 +8,9 @@
39  
40   #include <QtCore/qstring.h>
41   #include <QtCore/qstringfwd.h>
42  +#ifndef QT_BOOTSTRAPPED
43  +#include <QtCore/qbitarray.h>
44  +#endif
45  
46   #include <numeric> // for std::accumulate
47   #include <functional> // for std::hash
48  @@ -25,8 +28,6 @@
49  
50   QT_BEGIN_NAMESPACE
51  
52  -class QBitArray;
53  -
54   #if QT_DEPRECATED_SINCE(6,6)
55   QT_DEPRECATED_VERSION_X_6_6("Use QHashSeed instead")
56   Q_CORE_EXPORT int qGlobalQHashSeed();