43 votes

Quels sont les changements de rupture provoqués par les opérateurs de comparaison réécrits ?

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 ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X