<html>
<body>
<div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
<table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
<tr>
<td>
This is an automatically generated e-mail. To reply, visit:
<a href="https://git.reviewboard.kde.org/r/116542/">https://git.reviewboard.kde.org/r/116542/</a>
</td>
</tr>
</table>
<br />
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">From what I can tell declaring *any* type A::B is a "qualified id" per the C++ spec and therefore changes the template lookup rules for argument-dependent lookup (which means the specialized function to be called must already be in scope with matching argument types). However I think clang might actually be wrong here as the lookup is happening at the template instantiation (i.e. the QCOMPARE of two UDSEntryLists, which are properly declared in kio as using an unqualified id). But then again I think ADL works based on which names are available in the dependent namespace (in this case KIO) at the time of the lookup, and operator==() is not part of KIO namespace until your patch, and so might not get included as an option during ADL (and the compiler has no other official way to tie "UDSEntry" back to "KIO::UDSEntry").
Well, there might be one: Does adding a "using KIO::UDSEntry" at the top of the file work instead? It doesn't actually matter, all the solutions are probably equally a hack...</pre>
<br />
<p>- Michael Pyne</p>
<br />
<p>On March 2nd, 2014, 8:20 p.m. UTC, Milian Wolff wrote:</p>
<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://git.reviewboard.kde.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
<tr>
<td>
<div>Review request for KDE Frameworks.</div>
<div>By Milian Wolff.</div>
<p style="color: grey;"><i>Updated March 2, 2014, 8:20 p.m.</i></p>
<div style="margin-top: 1.5em;">
<b style="color: #575012; font-size: 10pt;">Repository: </b>
kio
</div>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
<tr>
<td>
<pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Fix compilation with clang 3.4.
Note that I'm not too sure why this compiled with GCC
and why clang rejects the global operator== definition and
wants to have it in the KIO namespace. Someone with more C++
ADL knowledge should chime in whether this is the right fix.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from kio/tests/udsentrybenchmark.cpp:22:
In file included from /usr/include/qt/QtTest/QTest:1:
/usr/include/qt/QtTest/qtest.h:203:24:
error: call to function 'operator==' that is neither visible
in the template definition nor found by argument-dependent lookup
if (!(t1.at(i) == t2.at(i))) {
^
kio/tests/udsentrybenchmark.cpp:286:22: note: in instantiation of
function template specialization 'QTest::qCompare<KIO::UDSEntry>'
requested here
do { if (!QTest::qCompare(entries, m_smallEntries, "entries",
"m_smallEntries", "kio/tests/udsentrybenchmark.cpp", 286)) return;}
while (0);
kio/tests/udsentrybenchmark.cpp:246:6: note: 'operator==' should be
declared prior to the call site or in namespace 'KIO'
bool operator==(const KIO::UDSEntry &a, const KIO::UDSEntry &b)
^
1 error generated.
udsentrybenchmark.dir/build.make:54: recipe for target
'tests/CMakeFiles/udsentrybenchmark.dir/udsentrybenchmark.cpp.o'
failed
~~~~~~~~~~~~~~~~~~~~~~~~~~~~</pre>
</td>
</tr>
</table>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">
<li>tests/udsentrybenchmark.cpp <span style="color: grey">(75fc758e583f7586c7b9a576d984b40912fa3ace)</span></li>
</ul>
<p><a href="https://git.reviewboard.kde.org/r/116542/diff/" style="margin-left: 3em;">View Diff</a></p>
</td>
</tr>
</table>
</div>
</body>
</html>