[clang] [clang] disallow narrowing when matching template template parameters (PR #124313)

Matheus Izvekov via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 24 12:49:08 PST 2025


================
@@ -6930,17 +6934,20 @@ ExprResult Sema::CheckTemplateArgument(NonTypeTemplateParmDecl *Param,
     IsConvertedConstantExpression = false;
   }
 
-  if (getLangOpts().CPlusPlus17) {
+  if (getLangOpts().CPlusPlus17 || PartialOrderingTTP) {
     // C++17 [temp.arg.nontype]p1:
     //   A template-argument for a non-type template parameter shall be
     //   a converted constant expression of the type of the template-parameter.
     APValue Value;
     ExprResult ArgResult;
     if (IsConvertedConstantExpression) {
-      ArgResult = BuildConvertedConstantExpression(Arg, ParamType,
-                                                   CCEK_TemplateArg, Param);
-      if (ArgResult.isInvalid())
+      ArgResult = BuildConvertedConstantExpression(
+          Arg, ParamType,
+          PartialOrderingTTP ? CCEK_InjectedTTP : CCEK_TemplateArg, Param);
+      if (ArgResult.isInvalid()) {
----------------
mizvekov wrote:

The big question for me about updating these users around here would be: Does the function returning uninitialized mean that's an error, and has that error already been diagnosed?

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


More information about the cfe-commits mailing list