[clang] [Clang] Unify interface for accessing template arguments as written for class/variable template specializations (PR #81642)

Chuanqi Xu via cfe-commits cfe-commits at lists.llvm.org
Sun Feb 18 00:15:14 PST 2024


================
@@ -1792,23 +1807,11 @@ class ClassTemplateSpecializationDecl
   llvm::PointerUnion<ClassTemplateDecl *, SpecializedPartialSpecialization *>
     SpecializedTemplate;
 
-  /// Further info for explicit template specialization/instantiation.
-  struct ExplicitSpecializationInfo {
-    /// The type-as-written.
-    TypeSourceInfo *TypeAsWritten = nullptr;
-
-    /// The location of the extern keyword.
-    SourceLocation ExternLoc;
-
-    /// The location of the template keyword.
-    SourceLocation TemplateKeywordLoc;
-
-    ExplicitSpecializationInfo() = default;
-  };
-
   /// Further info for explicit template specialization/instantiation.
   /// Does not apply to implicit specializations.
-  ExplicitSpecializationInfo *ExplicitInfo = nullptr;
+  llvm::PointerUnion<const ASTTemplateArgumentListInfo *,
+                     ExplicitInstantiationInfo *>
+      ExplicitInfo = nullptr;
----------------
ChuanqiXu9 wrote:

I spent some time to understand `const ASTTemplateArgumentListInfo *` is only meaningful for partial specializations. Can we reuse ExplicitInstantiationInfo::TemplateArgsAsWrittenTemplateArgsAsWritten? And make `ExplicitInstantiationInfo` to `InstantiationInfo` so that we can use it generally?

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


More information about the cfe-commits mailing list