================ @@ -4371,6 +4397,41 @@ Sema::TemplateDeductionResult Sema::DeduceTemplateArguments( // corresponding argument is a list? PackScope.nextPackElement(); } + } else if (!IsTrailingPack && !PackScope.isPartiallyExpanded() && + PackScope.isDeducedFromEarlierParameter() && + !isa<PackExpansionType>(ParamTypes[ParamIdx + 1])) { + // [temp.deduct.general#3] + // When all template arguments have been deduced + // or obtained from default template arguments, all uses of template + // parameters in the template parameter list of the template are + // replaced with the corresponding deduced or default argument values + // + // If we have a trailing parameter pack, that has been deduced + // perviously we substitute the pack here in a similar fashion as seen + // above with the trailing parameter packs. The main difference here is + // that, in this case we are not processing all of the remaining + // arguments. We are only process as many arguments as much we have in + // the already deduced parameter. + SmallVector<UnexpandedParameterPack, 2> Unexpanded; + collectUnexpandedParameterPacks(ParamPattern, Unexpanded); + if (Unexpanded.size() == 0) + continue; ---------------- cor3ntin wrote:
can `unexpanded` ever be empty? This should be an assert https://github.com/llvm/llvm-project/pull/79371 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits