[llvm-branch-commits] [clang] [clang] Finish implementation of P0522 (PR #96023)
Matheus Izvekov via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Jun 19 09:20:51 PDT 2024
================
@@ -6369,27 +6451,88 @@ bool Sema::isTemplateTemplateParameterAtLeastAsSpecializedAs(
// be inverted between Ps and As. On non-deduced context, matching needs to
// happen both ways, according to [temp.arg.template]p3, but this is
// currently implemented as a special case elsewhere.
- if (::DeduceTemplateArguments(*this, A, AArgs, PArgs, Info, Deduced,
- /*NumberOfArgumentsMustMatch=*/false,
- IsDeduced ? PackFold::ArgumentToParameter
- : PackFold::ParameterToArgument) !=
- TemplateDeductionResult::Success)
+ switch (TemplateDeductionResult Result = ::DeduceTemplateArguments(
+ *this, A, AArgs, PArgs, Info, Deduced,
+ /*NumberOfArgumentsMustMatch=*/false,
+ IsDeduced ? PackFold::ArgumentToParameter : PackFold::Both)) {
+ case clang::TemplateDeductionResult::Success:
+ break;
+
+ case TemplateDeductionResult::MiscellaneousDeductionFailure:
+ Diag(AArg->getLocation(), diag::err_template_param_list_different_arity)
+ << (A->size() > P->size()) << /*isTemplateTemplateParameter=*/true
+ << SourceRange(A->getTemplateLoc(), P->getRAngleLoc());
+ return false;
----------------
mizvekov wrote:
The right thing would be to introduce a new enumerator, but I think this patch keeps the status quo while being large enough already.
https://github.com/llvm/llvm-project/pull/96023
More information about the llvm-branch-commits
mailing list