[clang] [clang-tools-extra] [Clang][C++29] Template pack indexing (PR #218738)

Corentin Jabot via cfe-commits cfe-commits at lists.llvm.org
Wed Aug 26 08:11:28 PDT 2026


================
@@ -482,6 +526,57 @@ class DeducedTemplateStorage : public UncommonTemplateNameStorage,
                       TemplateName Underlying, const DefaultArguments &DefArgs);
 };
 
+/// A structure for storing a pack-index-template-name ([temp.names]).
+///
+/// C++29 [temp.names]p1:
+///   pack-index-template-name:
+///     simple-template-name ... [ constant-expression ]
+class PackIndexingTemplateStorage final
+    : public UncommonTemplateNameStorage,
+      public llvm::FoldingSetNode,
+      private llvm::TrailingObjects<PackIndexingTemplateStorage, TemplateName> {
+  friend class ASTContext;
+  friend TrailingObjects;
+
+  TemplateName Pattern;
+  llvm::PointerIntPair<Expr *, 1> IndexAndIsFullySubstitited;
+
+  PackIndexingTemplateStorage(TemplateName Pattern, Expr *IndexExpr,
+                              bool FullySubstituted,
+                              ArrayRef<TemplateName> Expansions);
+
+public:
+  TemplateName getPattern() const { return Pattern; }
+
+  Expr *getIndexExpr() const { return IndexAndIsFullySubstitited.getPointer(); }
+
+  bool isFullySubstituted() const {
+    return IndexAndIsFullySubstitited.getInt();
+  }
+
+  ArrayRef<TemplateName> getExpansions() const {
+    return getTrailingObjects(Bits.Data);
----------------
cor3ntin wrote:

Well, there are TWO uses. A function it is!

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


More information about the cfe-commits mailing list