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.

Reply via email to