[clang] [Clang] Handle default template arguments for alias CTAD guides (PR #134807)

Matheus Izvekov via cfe-commits cfe-commits at lists.llvm.org
Fri Apr 11 09:12:26 PDT 2025


================
@@ -690,6 +690,23 @@ SmallVector<unsigned> TemplateParamsReferencedInTemplateArgumentList(
   SemaRef.MarkUsedTemplateParameters(
       DeducedArgs, TemplateParamsList->getDepth(), ReferencedTemplateParams);
 
+  auto MarkDefaultArgs = [&](auto *Param) {
+    if (!Param || !Param->hasDefaultArgument())
+      return;
+    SemaRef.MarkUsedTemplateParameters(
+        Param->getDefaultArgument().getArgument(),
+        TemplateParamsList->getDepth(), ReferencedTemplateParams);
+  };
+
+  for (unsigned Index = 0; Index < TemplateParamsList->size(); ++Index) {
+    if (!ReferencedTemplateParams[Index])
+      continue;
+    auto *Param = TemplateParamsList->getParam(Index);
+    MarkDefaultArgs(dyn_cast<TemplateTypeParmDecl>(Param));
+    MarkDefaultArgs(dyn_cast<NonTypeTemplateParmDecl>(Param));
+    MarkDefaultArgs(dyn_cast<TemplateTemplateParmDecl>(Param));
+  }
+
----------------
mizvekov wrote:

`Re the ConvertDeducedTemplateArguments, i think we probably want it, but I couldn't immediately recall what job it does to handle default arguments.`

I will produce a full list of template arguments, including default arguments where a parameter is not deduced.

It will also pack the arguments for template parameter packs, and do other things which might not be relevant here.

https://github.com/llvm/llvm-project/pull/134807


More information about the cfe-commits mailing list