================
@@ -1876,11 +1901,25 @@ namespace {
                               TemplateParameterList *OrigTPL)  {
       if (!OrigTPL || !OrigTPL->size()) return OrigTPL;
 
+      std::optional<MultiLevelTemplateArgumentList> OldMLTAL;
+      // We need to preserve the lambda depth in parameter mapping.
+      // Otherwise the template argument deduction would fail, if we reduced 
the
+      // depth too early.
+      if (SemaRef.inParameterMappingSubstitution() &&
+          getDepthAndIndex(OrigTPL->getParam(0)).first >=
+              TemplateArgs.getNumSubstitutedLevels())
+        OldMLTAL = ForgetSubstitution();
----------------
mizvekov wrote:

Okay, I think I understand now what you are trying to do. I initially 
misunderstood the problem as you trying to avoid getting the lambda's depth to 
go below zero.

I am not sure I understand why changing the depth is a problem for deduction, 
because deduction accepts the template depth as a parameter and this should be 
easy to figure out for the lambda since it has template parameters.

Anyway, you can use the `getDepth` method on the template parameter list 
directly:
```suggestion
      std::optional<MultiLevelTemplateArgumentList> OldMLTAL;
      // We need to preserve the lambda depth in parameter mapping.
      // Otherwise the template argument deduction would fail, if we reduced the
      // depth too early.
      if (SemaRef.inParameterMappingSubstitution() &&
         OrigTPL->getDepth() >= TemplateArgs.getNumSubstitutedLevels())
        OldMLTAL = ForgetSubstitution();
```


https://github.com/llvm/llvm-project/pull/195995
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to