[Interest] can't dump QStringList with qDebug()

Thiago Macieira thiago.macieira at intel.com
Wed Mar 8 07:11:13 CET 2023


On Tuesday, 7 March 2023 21:20:02 PST Hamish Moffatt via Interest wrote:
> I confirm that my test code compiles in 6.5.0-beta3.

And I can reproduce the error with GCC 13 if I check out the 6.4.2 headers.

GCC 13 says:

note: candidate: ‘template<class T> QDebugIfHasDebugStreamContainer<QList<T>, 
T> operator<<(QDebug, const QList<T>&)’

note:   template argument deduction/substitution failed

qdebug.h:217:53:   required by substitution of ‘template<class T> 
QDebugIfHasDebugStreamContainer<QList<T>, T> operator<<(QDebug, const 
QList<T>&) [with T = QString]’

type_traits:2594:11: error: no type named ‘type’ in ‘struct 
std::enable_if<false, QDebug>’

This is GCC speak for "condition evaluated to false"

By moving the constraint from the return type to a static_assert inside the 
function, I can prove that the ostream test fails:

qdebug.h:219:5: error: static assertion failed due to requirement 
'QTypeTraits::has_ostream_operator_v<QDebug, QString>'

But that test is:
std::void_t<decltype(detail::reference<Stream>() << 
detail::const_reference<T>())>

and if I copy that expression to the function, it does compile.

Moreover, the changes to qdebug.h and qtypeinfo.h don't seem related.

So I have no clue *why* the check fails and *how* it was fixed.

This is template black magic. It works right now and I've spent enough time 
investigating.
-- 
Thiago Macieira - thiago.macieira (AT) intel.com
  Cloud Software Architect - Intel DCAI Cloud Engineering
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 5152 bytes
Desc: not available
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20230307/78822d21/attachment.bin>


More information about the Interest mailing list