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: > 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{}; > ``` Nevermind. I found the language. The implicit object parameter isn't considered in this case. Repository: rC Clang https://reviews.llvm.org/D45680 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits