diff options
author | Douglas Gregor <dgregor@apple.com> | 2011-01-15 01:15:58 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2011-01-15 01:15:58 +0000 |
commit | c7793c73ba8a343de3f2552d984851985a46f159 (patch) | |
tree | 6028fb693f32a9f51ccb6d59e84a75817cdceac1 /lib/AST/ExprCXX.cpp | |
parent | 2be29f423acad3bbe39099a78db2805acb5bdf17 (diff) |
Introduce a new expression kind, SubstNonTypeTemplateParmPackExpr,
that captures the substitution of a non-type template argument pack
for a non-type template parameter pack within a pack expansion that
cannot be fully expanded. This follows the approach taken by
SubstTemplateTypeParmPackType.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@123506 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/ExprCXX.cpp')
-rw-r--r-- | lib/AST/ExprCXX.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/AST/ExprCXX.cpp b/lib/AST/ExprCXX.cpp index 0426e59a74..2c790bd273 100644 --- a/lib/AST/ExprCXX.cpp +++ b/lib/AST/ExprCXX.cpp @@ -1056,3 +1056,31 @@ Stmt::child_iterator SizeOfPackExpr::child_begin() { Stmt::child_iterator SizeOfPackExpr::child_end() { return child_iterator(); } + +SubstNonTypeTemplateParmPackExpr:: +SubstNonTypeTemplateParmPackExpr(QualType T, + NonTypeTemplateParmDecl *Param, + SourceLocation NameLoc, + const TemplateArgument &ArgPack) + : Expr(SubstNonTypeTemplateParmPackExprClass, T, VK_RValue, OK_Ordinary, + true, false, true), + Param(Param), Arguments(ArgPack.pack_begin()), + NumArguments(ArgPack.pack_size()), NameLoc(NameLoc) { } + +TemplateArgument SubstNonTypeTemplateParmPackExpr::getArgumentPack() const { + return TemplateArgument(Arguments, NumArguments); +} + +SourceRange SubstNonTypeTemplateParmPackExpr::getSourceRange() const { + return NameLoc; +} + +Stmt::child_iterator SubstNonTypeTemplateParmPackExpr::child_begin() { + return child_iterator(); +} + +Stmt::child_iterator SubstNonTypeTemplateParmPackExpr::child_end() { + return child_iterator(); +} + + |