Review Request 116542: Fix compilation with clang 3.4.
Milian Wolff
mail at milianw.de
Tue Mar 4 19:58:31 UTC 2014
> On March 4, 2014, 6:03 a.m., Michael Pyne wrote:
> > 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...
so can I merge this then?
- Milian
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://git.reviewboard.kde.org/r/116542/#review51851
-----------------------------------------------------------
On March 2, 2014, 8:20 p.m., Milian Wolff wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://git.reviewboard.kde.org/r/116542/
> -----------------------------------------------------------
>
> (Updated March 2, 2014, 8:20 p.m.)
>
>
> Review request for KDE Frameworks.
>
>
> Repository: kio
>
>
> Description
> -------
>
> 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
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
>
> Diffs
> -----
>
> tests/udsentrybenchmark.cpp 75fc758e583f7586c7b9a576d984b40912fa3ace
>
> Diff: https://git.reviewboard.kde.org/r/116542/diff/
>
>
> Testing
> -------
>
>
> Thanks,
>
> Milian Wolff
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20140304/af281a78/attachment.html>
More information about the Kde-frameworks-devel
mailing list