================
@@ -10615,6 +10615,40 @@ bool clang::isBetterOverloadCandidate(
     auto *Guide1 = dyn_cast_or_null<CXXDeductionGuideDecl>(Cand1.Function);
     auto *Guide2 = dyn_cast_or_null<CXXDeductionGuideDecl>(Cand2.Function);
     if (Guide1 && Guide2) {
+      //  -- F1 and F2 are generated from class template argument deduction
+      //  for a class D, and F2 is generated from inheriting constructors
+      //  from a base class of D while F1 is not, ...
+      bool G1Inherited = Guide1->getSourceDeductionGuide() &&
+                         Guide1->getSourceDeductionGuideKind() ==
+                             CXXDeductionGuideDecl::SourceDeductionGuideKind::
+                                 InheritedConstructor;
+      bool G2Inherited = Guide2->getSourceDeductionGuide() &&
+                         Guide2->getSourceDeductionGuideKind() ==
+                             CXXDeductionGuideDecl::SourceDeductionGuideKind::
+                                 InheritedConstructor;
+      if (Guide1->isImplicit() && Guide2->isImplicit() &&
+          G1Inherited != G2Inherited) {
+        const FunctionProtoType *FPT1 =
+            Guide1->getType()->getAs<FunctionProtoType>();
+        const FunctionProtoType *FPT2 =
+            Guide2->getType()->getAs<FunctionProtoType>();
+        assert(FPT1 && FPT2);
+
+        // ... and for each explicit function argument, the parameters of F1 
and
+        // F2 are either both ellipses or have the same type
+        if (FPT1->isVariadic() == FPT2->isVariadic() &&
+            FPT1->getNumParams() == FPT2->getNumParams()) {
----------------
AaronBallman wrote:

This seems wrong compared to the comment -- the comment says we should be 
looking at each explicit function argument, but this predicate only handles the 
case where both functions are variadic and have the same number of params.

Am I missing something?

https://github.com/llvm/llvm-project/pull/98788
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to