[libcxx-commits] [PATCH] D144262: [libc++][ranges] Implement LWG-3865 Sorting a range of pairs
Mark de Wever via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Mar 16 09:52:45 PDT 2023
Mordante added a comment.
In D144262#4199883 <https://reviews.llvm.org/D144262#4199883>, @alexfh wrote:
> The following snippet (reduced from a version of mysql) compiles well before this commit and fails to compile after it (https://gcc.godbolt.org/z/zrGbbbWb5):
>
> #include <utility>
>
> struct X {};
> struct Y {};
>
> bool operator==(const std::pair<const X, const X> &a, const std::pair<Y, Y> &b);
>
> bool f(std::pair<const X, X> x, std::pair<Y, Y> y) {
> return x == y;
> }
>
> The error is:
>
> In file included from bin/../include/c++/v1/utility:259:
> bin/../include/c++/v1/__utility/pair.h:432:22: error: invalid operands to binary expression ('const X' and 'const Y')
> return __x.first == __y.first && __x.second == __y.second;
> ~~~~~~~~~ ^ ~~~~~~~~~
> <source>:9:12: note: in instantiation of function template specialization 'std::operator==<const X, X, Y, Y>' requested here
> return x == y;
> ^
> <source>:6:6: note: candidate function not viable: no known conversion from 'const X' to 'const std::pair<const X, const X>' for 1st argument
> bool operator==(const std::pair<const X, const X> &a, const std::pair<Y, Y> &b);
> ^
> bin/../include/c++/v1/__utility/pair.h:430:1: note: candidate template ignored: could not match 'const pair<_T1, _T2>' against 'const X'
> operator==(const pair<_T1,_T2>& __x, const pair<_U1,_U2>& __y)
> ^
>
> I can fix this by changing the custom operator== declaration to `bool operator==(const std::pair<const X, X> &a, const std::pair<Y, Y> &b);` (removing the second `const`), but I wonder if this sort of a breakage is intended.
This is a known issue, see this bug report https://bugs.mysql.com/bug.php?id=110254
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D144262/new/
https://reviews.llvm.org/D144262
More information about the libcxx-commits
mailing list