[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