[clang] [clang] simplify constant template parameter type deduction for partial ordering (PR #160433)

Erich Keane via cfe-commits cfe-commits at lists.llvm.org
Wed Sep 24 06:20:30 PDT 2025


================
@@ -2653,23 +2653,11 @@ DeduceTemplateArguments(Sema &S, TemplateParameterList *TemplateParams,
       switch (A.getKind()) {
       case TemplateArgument::Expression: {
         const Expr *E = A.getAsExpr();
-        // When checking NTTP, if either the parameter or the argument is
-        // dependent, as there would be otherwise nothing to deduce, we force
-        // the argument to the parameter type using this dependent implicit
-        // cast, in order to maintain invariants. Now we can deduce the
-        // resulting type from the original type, and deduce the original type
-        // against the parameter we are checking.
-        if (const auto *ICE = dyn_cast<ImplicitCastExpr>(E);
-            ICE && ICE->getCastKind() == clang::CK_Dependent) {
+        // The type of the value is the type of the expression before any
+        // implicit conversions.
+        if (const auto *ICE = dyn_cast<ImplicitCastExpr>(E)) {
           E = ICE->getSubExpr();
-          if (auto Result = DeduceTemplateArgumentsByTypeMatch(
-                  S, TemplateParams, ICE->getType(), E->getType(), Info,
-                  Deduced, TDF_SkipNonDependent,
-                  PartialOrdering ? PartialOrderingKind::NonCall
-                                  : PartialOrderingKind::None,
-                  /*DeducedFromArrayBound=*/false, HasDeducedAnyParam);
-              Result != TemplateDeductionResult::Success)
-            return Result;
+          assert(!isa<ImplicitCastExpr>(E));
----------------
erichkeane wrote:

Yeah, it seems reasonable for an implicit cast to contain another implicit cast (I think I've seen that quite a bit?).  SO I think this just needs to be `E = E->IgnoreImpCasts()` (and maybe paren casts too?).

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


More information about the cfe-commits mailing list