================ @@ -61,27 +61,43 @@ TemplateParameterList::TemplateParameterList(const ASTContext& C, bool IsPack = P->isTemplateParameterPack(); if (const auto *NTTP = dyn_cast<NonTypeTemplateParmDecl>(P)) { - if (!IsPack && NTTP->getType()->containsUnexpandedParameterPack()) - ContainsUnexpandedParameterPack = true; + if (!IsPack) { + if (NTTP->getType()->containsUnexpandedParameterPack()) + ContainsUnexpandedParameterPack = true; + else if (NTTP->hasDefaultArgument() && + NTTP->getDefaultArgument() + .getArgument() + .containsUnexpandedParameterPack()) + ContainsUnexpandedParameterPack = true; + } if (NTTP->hasPlaceholderTypeConstraint()) HasConstrainedParameters = true; } else if (const auto *TTP = dyn_cast<TemplateTemplateParmDecl>(P)) { - if (!IsPack && - TTP->getTemplateParameters()->containsUnexpandedParameterPack()) - ContainsUnexpandedParameterPack = true; - } else if (const auto *TTP = dyn_cast<TemplateTypeParmDecl>(P)) { - if (const TypeConstraint *TC = TTP->getTypeConstraint()) { - if (TC->getImmediatelyDeclaredConstraint() - ->containsUnexpandedParameterPack()) + if (!IsPack) { + if (TTP->getTemplateParameters()->containsUnexpandedParameterPack()) ContainsUnexpandedParameterPack = true; + else if (TTP->hasDefaultArgument() && + TTP->getDefaultArgument() + .getArgument() + .containsUnexpandedParameterPack()) + ContainsUnexpandedParameterPack = true; + } + } else if (const auto *TTP = dyn_cast<TemplateTypeParmDecl>(P)) { + if (!IsPack && TTP->hasDefaultArgument() && + TTP->getDefaultArgument() + .getArgument() + .containsUnexpandedParameterPack()) { + ContainsUnexpandedParameterPack = true; + } else if (const TypeConstraint *TC = TTP->getTypeConstraint(); + TC && TC->getImmediatelyDeclaredConstraint() + ->containsUnexpandedParameterPack()) { + ContainsUnexpandedParameterPack = true; ---------------- ilya-biryukov wrote:
This code on line 84 does the right thing, assuming the `TempateArgument` returns correct values for `containsUnexpandedParameterPack()`. If `TemplateArgument` is wrong, I would argue it's a problem for another patch, I'll make sure we test this when fixing the fold expressions (I don't know any other way to notice if we're getting the result wrong here). https://github.com/llvm/llvm-project/pull/99880 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits