Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-92910

Hashing for nested QPair is broken in Qt 6

    XMLWordPrintable

    Details

    • Commits:
      64bfc927b09b46bb7fc0dc6caf1bf1a4d4133ab4 (qt/qtbase/dev)

      Description

      This code builds fine with Qt5:

      #include <QPair>
      #include <QSet>
      #include <QString>
      
      int main()
      {
          QSet<QPair<QString, QPair<int, int>>> s;
          s.insert(qMakePair(QString(), qMakePair(1, 2)));
      }
      

      With Qt 6, I get:

      In file included from /usr/include/qt6/QtCore/qhash.h:44,
                       from /usr/include/qt6/QtCore/qset.h:43,
                       from /usr/include/qt6/QtCore/QSet:1,
                       from /tmp/blubb/main.cpp:2:
      /usr/include/qt6/QtCore/qhashfunctions.h: In instantiation of ‘size_t qHash(const std::pair<_T1, _T2>&, size_t) [with T1 = QString; T2 = std::pair<int, int>; size_t = long unsigned int]’:
      /usr/include/qt6/QtCore/qhashfunctions.h:98:41:   required by substitution of ‘template<class T> constexpr const bool QHashPrivate::HasQHashSingleArgOverload<T, typename std::enable_if<is_convertible_v<decltype (qHash(declval<const T&>())), long unsigned int>, void>::type> [with T = std::pair<QString, std::pair<int, int> >]’
      /usr/include/qt6/QtCore/qhashfunctions.h:177:54:   required by substitution of ‘template<class T, typename std::enable_if<HasQHashSingleArgOverload<T>, bool>::type <anonymous> > size_t qHash(const T&, size_t) [with T = std::pair<QString, std::pair<int, int> >; typename std::enable_if<HasQHashSingleArgOverload<T>, bool>::type <anonymous> = <missing>]’
      /usr/include/qt6/QtCore/qhash.h:548:28:   required from ‘QHashPrivate::Data<Node>::iterator QHashPrivate::Data<Node>::find(const Key&) const [with Node = QHashPrivate::Node<std::pair<QString, std::pair<int, int> >, QHashDummyValue>; QHashPrivate::Data<Node>::iterator = QHashPrivate::iterator<QHashPrivate::Node<std::pair<QString, std::pair<int, int> >, QHashDummyValue> >; QHashPrivate::Data<Node>::Key = std::pair<QString, std::pair<int, int> >]’
      /usr/include/qt6/QtCore/qhash.h:590:23:   required from ‘QHashPrivate::Data<Node>::InsertionResult QHashPrivate::Data<Node>::findOrInsert(const Key&) [with Node = QHashPrivate::Node<std::pair<QString, std::pair<int, int> >, QHashDummyValue>; QHashPrivate::Data<Node>::Key = std::pair<QString, std::pair<int, int> >]’
      /usr/include/qt6/QtCore/qhash.h:1125:38:   required from ‘QHash<Key, T>::iterator QHash<Key, T>::emplace(Key&&, Args&& ...) [with Args = {const QHashDummyValue&}; Key = std::pair<QString, std::pair<int, int> >; T = QHashDummyValue]’
      /usr/include/qt6/QtCore/qhash.h:1117:23:   required from ‘QHash<Key, T>::iterator QHash<Key, T>::emplace(const Key&, Args&& ...) [with Args = {const QHashDummyValue&}; Key = std::pair<QString, std::pair<int, int> >; T = QHashDummyValue]’
      /usr/include/qt6/QtCore/qhash.h:1095:23:   required from ‘QHash<Key, T>::iterator QHash<Key, T>::insert(const Key&, const T&) [with Key = std::pair<QString, std::pair<int, int> >; T = QHashDummyValue]’
      /usr/include/qt6/QtCore/qset.h:181:68:   required from ‘QSet<T>::iterator QSet<T>::insert(const T&) [with T = std::pair<QString, std::pair<int, int> >]’
      /tmp/blubb/main.cpp:8:51:   required from here
      /usr/include/qt6/QtCore/qhashfunctions.h:274:64: error: no matching function for call to ‘qHash(const std::pair<int, int>&, size_t&)’
        274 |     noexcept(noexcept(qHash(key.first, seed)) && noexcept(qHash(key.second, seed)))
            |                                                           ~~~~~^~~~~~~~~~~~~~~~~~
      In file included from /usr/include/qt6/QtCore/qstringview.h:58,
                       from /usr/include/qt6/QtCore/qchar.h:665,
                       from /usr/include/qt6/QtCore/qstring.h:50,
                       from /usr/include/qt6/QtCore/qhashfunctions.h:44,
                       from /usr/include/qt6/QtCore/qhash.h:44,
                       from /usr/include/qt6/QtCore/qset.h:43,
                       from /usr/include/qt6/QtCore/QSet:1,
                       from /tmp/blubb/main.cpp:2:
      /usr/include/qt6/QtCore/qbytearray.h:721:43: note: candidate: ‘size_t qHash(const QByteArray::FromBase64Result&, size_t)’
        721 | Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(const QByteArray::FromBase64Result &key, size_t seed = 0) noexcept;
            |                                           ^~~~~
      /usr/include/qt6/QtCore/qbytearray.h:721:85: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘const QByteArray::FromBase64Result&’
        721 | Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(const QByteArray::FromBase64Result &key, size_t seed = 0) noexcept;
            |                                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~
      In file included from /usr/include/qt6/QtCore/qhash.h:44,
                       from /usr/include/qt6/QtCore/qset.h:43,
                       from /usr/include/qt6/QtCore/QSet:1,
                       from /tmp/blubb/main.cpp:2:
      /usr/include/qt6/QtCore/qhashfunctions.h:106:47: note: candidate: ‘constexpr size_t qHash(char, size_t)’
        106 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(char key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:106:58: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘char’
        106 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(char key, size_t seed = 0) noexcept
            |                                                     ~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:108:47: note: candidate: ‘constexpr size_t qHash(uchar, size_t)’
        108 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(uchar key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:108:59: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘uchar’ {aka ‘unsigned char’}
        108 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(uchar key, size_t seed = 0) noexcept
            |                                                     ~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:110:47: note: candidate: ‘constexpr size_t qHash(signed char, size_t)’
        110 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(signed char key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:110:65: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘signed char’
        110 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(signed char key, size_t seed = 0) noexcept
            |                                                     ~~~~~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:112:47: note: candidate: ‘constexpr size_t qHash(ushort, size_t)’
        112 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(ushort key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:112:60: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘ushort’ {aka ‘short unsigned int’}
        112 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(ushort key, size_t seed = 0) noexcept
            |                                                     ~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:114:47: note: candidate: ‘constexpr size_t qHash(short int, size_t)’
        114 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(short key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:114:59: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘short int’
        114 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(short key, size_t seed = 0) noexcept
            |                                                     ~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:116:47: note: candidate: ‘constexpr size_t qHash(uint, size_t)’
        116 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(uint key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:116:58: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘uint’ {aka ‘unsigned int’}
        116 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(uint key, size_t seed = 0) noexcept
            |                                                     ~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:118:47: note: candidate: ‘constexpr size_t qHash(int, size_t)’
        118 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(int key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:118:57: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘int’
        118 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(int key, size_t seed = 0) noexcept
            |                                                     ~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:120:47: note: candidate: ‘constexpr size_t qHash(ulong, size_t)’
        120 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(ulong key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:120:59: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘ulong’ {aka ‘long unsigned int’}
        120 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(ulong key, size_t seed = 0) noexcept
            |                                                     ~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:122:47: note: candidate: ‘constexpr size_t qHash(long int, size_t)’
        122 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(long key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:122:58: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘long int’
        122 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(long key, size_t seed = 0) noexcept
            |                                                     ~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:124:47: note: candidate: ‘constexpr size_t qHash(quint64, size_t)’
        124 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(quint64 key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:124:61: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘quint64’ {aka ‘long long unsigned int’}
        124 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(quint64 key, size_t seed = 0) noexcept
            |                                                     ~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:130:47: note: candidate: ‘constexpr size_t qHash(qint64, size_t)’
        130 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(qint64 key, size_t seed = 0) noexcept { return qHash(quint64(key), seed); }
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:130:60: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘qint64’ {aka ‘long long int’}
        130 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(qint64 key, size_t seed = 0) noexcept { return qHash(quint64(key), seed); }
            |                                                     ~~~~~~~^~~
      In file included from /usr/include/qt6/QtCore/qhash.h:44,
                       from /usr/include/qt6/QtCore/qset.h:43,
                       from /usr/include/qt6/QtCore/QSet:1,
                       from /tmp/blubb/main.cpp:2:
      /usr/include/qt6/QtCore/qhashfunctions.h:131:37: note: candidate: ‘size_t qHash(float, size_t)’
        131 | Q_DECL_CONST_FUNCTION inline size_t qHash(float key, size_t seed = 0) noexcept
            |                                     ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:131:49: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘float’
        131 | Q_DECL_CONST_FUNCTION inline size_t qHash(float key, size_t seed = 0) noexcept
            |                                           ~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:139:44: note: candidate: ‘size_t qHash(double, size_t)’
        139 | Q_CORE_EXPORT Q_DECL_CONST_FUNCTION size_t qHash(double key, size_t seed = 0) noexcept;
            |                                            ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:139:57: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘double’
        139 | Q_CORE_EXPORT Q_DECL_CONST_FUNCTION size_t qHash(double key, size_t seed = 0) noexcept;
            |                                                  ~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:141:44: note: candidate: ‘size_t qHash(long double, size_t)’
        141 | Q_CORE_EXPORT Q_DECL_CONST_FUNCTION size_t qHash(long double key, size_t seed = 0) noexcept;
            |                                            ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:141:62: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘long double’
        141 | Q_CORE_EXPORT Q_DECL_CONST_FUNCTION size_t qHash(long double key, size_t seed = 0) noexcept;
            |                                                  ~~~~~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:143:47: note: candidate: ‘constexpr size_t qHash(wchar_t, size_t)’
        143 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(wchar_t key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:143:61: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘wchar_t’
        143 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(wchar_t key, size_t seed = 0) noexcept
            |                                                     ~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:145:47: note: candidate: ‘constexpr size_t qHash(char16_t, size_t)’
        145 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(char16_t key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:145:62: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘char16_t’
        145 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(char16_t key, size_t seed = 0) noexcept
            |                                                     ~~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:147:47: note: candidate: ‘constexpr size_t qHash(char32_t, size_t)’
        147 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(char32_t key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:147:62: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘char32_t’
        147 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(char32_t key, size_t seed = 0) noexcept
            |                                                     ~~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:153:34: note: candidate: ‘template<class T> size_t qHash(const T*, size_t)’
        153 | template <class T> inline size_t qHash(const T *key, size_t seed = 0) noexcept
            |                                  ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:153:34: note:   template argument deduction/substitution failed:
      /usr/include/qt6/QtCore/qhashfunctions.h:274:64: note:   mismatched types ‘const T*’ and ‘std::pair<int, int>’
        274 |     noexcept(noexcept(qHash(key.first, seed)) && noexcept(qHash(key.second, seed)))
            |                                                           ~~~~~^~~~~~~~~~~~~~~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:157:47: note: candidate: ‘constexpr size_t qHash(std::nullptr_t, size_t)’
        157 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(std::nullptr_t, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:157:53: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘std::nullptr_t’
        157 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(std::nullptr_t, size_t seed = 0) noexcept
            |                                                     ^~~~~~~~~~~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:163:47: note: candidate: ‘constexpr size_t qHash(QChar, size_t)’
        163 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(const QChar key, size_t seed = 0) noexcept { return qHash(key.unicode(), seed); }
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:163:65: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘QChar’
        163 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(const QChar key, size_t seed = 0) noexcept { return qHash(key.unicode(), seed); }
            |                                                     ~~~~~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:164:43: note: candidate: ‘size_t qHash(const QByteArray&, size_t)’
        164 | Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(const QByteArray &key, size_t seed = 0) noexcept;
            |                                           ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:164:67: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘const QByteArray&’
        164 | Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(const QByteArray &key, size_t seed = 0) noexcept;
            |                                                 ~~~~~~~~~~~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:165:43: note: candidate: ‘size_t qHash(const QByteArrayView&, size_t)’
        165 | Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(const QByteArrayView &key, size_t seed = 0) noexcept;
            |                                           ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:165:71: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘const QByteArrayView&’
        165 | Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(const QByteArrayView &key, size_t seed = 0) noexcept;
            |                                                 ~~~~~~~~~~~~~~~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:166:43: note: candidate: ‘size_t qHash(QStringView, size_t)’
        166 | Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(QStringView key, size_t seed = 0) noexcept;
            |                                           ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:166:61: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘QStringView’
        166 | Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(QStringView key, size_t seed = 0) noexcept;
            |                                                 ~~~~~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:168:36: note: candidate: ‘size_t qHash(const QString&, size_t)’
        168 | inline Q_DECL_PURE_FUNCTION size_t qHash(const QString &key, size_t seed = 0) noexcept
            |                                    ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:168:57: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘const QString&’
        168 | inline Q_DECL_PURE_FUNCTION size_t qHash(const QString &key, size_t seed = 0) noexcept
            |                                          ~~~~~~~~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:171:43: note: candidate: ‘size_t qHash(const QBitArray&, size_t)’
        171 | Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(const QBitArray &key, size_t seed = 0) noexcept;
            |                                           ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:171:66: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘const QBitArray&’
        171 | Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(const QBitArray &key, size_t seed = 0) noexcept;
            |                                                 ~~~~~~~~~~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:172:43: note: candidate: ‘size_t qHash(QLatin1String, size_t)’
        172 | Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(QLatin1String key, size_t seed = 0) noexcept;
            |                                           ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:172:63: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘QLatin1String’
        172 | Q_CORE_EXPORT Q_DECL_PURE_FUNCTION size_t qHash(QLatin1String key, size_t seed = 0) noexcept;
            |                                                 ~~~~~~~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:173:47: note: candidate: ‘constexpr size_t qHash(QKeyCombination, size_t)’
        173 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(QKeyCombination key, size_t seed = 0) noexcept
            |                                               ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:173:69: note:   no known conversion for argument 1 from ‘const std::pair<int, int>’ to ‘QKeyCombination’
        173 | Q_DECL_CONST_FUNCTION constexpr inline size_t qHash(QKeyCombination key, size_t seed = 0) noexcept
            |                                                     ~~~~~~~~~~~~~~~~^~~
      /usr/include/qt6/QtCore/qhashfunctions.h:178:8: note: candidate: ‘template<class T, typename std::enable_if<HasQHashSingleArgOverload<T>, bool>::type <anonymous> > size_t qHash(const T&, size_t)’
        178 | size_t qHash(const T &t, size_t seed) noexcept(noexcept(qHash(t)))
            |        ^~~~~
      /usr/include/qt6/QtCore/qhashfunctions.h:178:8: note:   template argument deduction/substitution failed:
      /usr/include/qt6/QtCore/qhashfunctions.h:177:92: error: no type named ‘type’ in ‘struct std::enable_if<false, bool>’
        177 | template <typename T, std::enable_if_t<QHashPrivate::HasQHashSingleArgOverload<T>, bool> = true>
            |                                                                                            ^~~~
      

        Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

          Activity

            People

            Assignee:
            thiago Thiago Macieira
            Reporter:
            kandeler Christian Kandeler
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Dates

              Created:
              Updated:
              Resolved:

                Gerrit Reviews

                There are no open Gerrit changes