https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102283
--- Comment #7 from Patrick Palka <ppalka at gcc dot gnu.org> --- (In reply to Fedor Chelnokov from comment #0 in PR102691) > This code is valid: > ``` > struct Foo {}; > struct Bar {}; > > constexpr int Baz(const Foo&) { return 0; } > constexpr int Baz(Bar&&) { return 1; } > > int main() > { > static_assert( Baz({}) == 1 ); > } > ``` > Here Baz(Bar&&) must be preferred according to [over.ics.rank]/(3.2), as > Clang does. But according to [over.ics.list]/8, isn't the conversion from {} to an aggregate type a user-defined conversion sequence and not a standard conversion sequence? And according to [over.ics.rank]/3.3, two such user-defined conversion sequences to different types are incomparable.