================
@@ -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:

But we could augment ConvertDeducedTemplateArguments with the option of 
producing rewrites.
Or eventually I think the rewrite flag could be removed entirely, everything 
being handled automatically.

I am more worried about the big picture here, I find it strange that this 
operates on the Deduced arguments directly,
which is kind of an arbitrary / clang specific point where the problem is 
divided,
and that there might be more stuff related to conversions which don't happen 
correctly in CTAD.

But since I have too much on my plate to dive on this problem now, I digress, 
lets go ahead :)

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

Reply via email to