EricWF added inline comments.
================
Comment at: lib/Sema/SemaOverload.cpp:9218-9219
+ // --- F2 is a rewritten candidate ([over.match.oper]) and F1 is not.
+ if (Cand2.getRewrittenKind() && !Cand1.getRewrittenKind())
+ return true;
+ if (Cand1.getRewrittenKind() && Cand2.getRewrittenKind() &&
----------------
EricWF wrote:
> rsmith wrote:
> > You also need to check the reverse condition and return false (the "or if
> > not that" is ... somehow ... supposed to imply that).
> Hmm. So I'm wondering what is intended by the language `F1 and F2 are
> rewritten candidates, and F2 is a synthesized candidate with reversed order
> of parameters and F1 is not`. For example, what happens when comparing two
> distinct member functions with only one explicit parameter?
>
> ```
> struct T;
> struct U { auto operator<=>(T); };
> struct T { auto operator<=>(U); };
> auto r = T{} < U{}; // Are the synthesized and rewritten overloads ambiguous?
> ```
And what about
```
struct U {};
struct T { auto operator<=>(U); };
auto operator<=>(U, T);
auto r = T{} < U{};
```
Repository:
rC Clang
https://reviews.llvm.org/D45680
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits