I filed a bug in Bugzilla: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114549 On Sun, Mar 31, 2024 at 3:00 PM Chris Peterson <cpeterso@xxxxxxxxxxxx> wrote: > While updating Firefox from -std=c++17 to -std=c++20, I found a case where > GCC's resolution of C++20 reversed operator== functions behaves differently > from the Clang, MSVC, and ICX compilers. I believe this difference was a > regression in GCC 10.1. > > Here's a Godbolt test case comparing those compilers' output: > > https://godbolt.org/z/qneax5oaW > > ``` > #include <type_traits> > > struct Thing { > template <typename T> > bool operator==(const T& rhs) const { > /* This operator== is selected by: > * GCC versions >= 10.1 -std=c++17 > * GCC version 9.5 -std=c++2a > * Clang 18.1 -std=c++2a > * MSVC 19.38 -std=c++20 > * Intel's ICX 2024.0.0 -std=c++20 > */ > return false; > } > }; > > template <typename T> > bool operator==(T const& lhs, Thing const& rhs) { > /* This operator== is selected by: > * GCC versions >= 10.1 -std=c++2a > */ > return true; > } > > bool test() { > Thing const v{}; > return v == 3; > } > ``` > > (I have an account on the GCC Bugzilla, but I'm not able to log in or > reset my password to file a bug there.) > > chris >