Il existe de nouvelles règles concernant les opérateurs de comparaison réécrits en C++20, et j'essaie de comprendre comment ils fonctionnent. Je suis tombé sur le programme suivant :
struct B {};
struct A
{
bool operator==(B const&); // #1
};
bool operator==(B const&, A const&); // #2
int main()
{
B{} == A{}; // C++17: calls #2
// C++20: calls #1
}
qui casse en fait le code existant. Je suis un peu surpris par cela; #2
me semble toujours mieux :p
Alors, comment ces nouvelles règles changent-elles le sens du code existant ?