[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