diff options
Diffstat (limited to 'lib/AST')
-rw-r--r-- | lib/AST/DeclTemplate.cpp | 16 | ||||
-rw-r--r-- | lib/AST/Type.cpp | 7 |
2 files changed, 23 insertions, 0 deletions
diff --git a/lib/AST/DeclTemplate.cpp b/lib/AST/DeclTemplate.cpp index 5b1bf9b3af..d57a43040f 100644 --- a/lib/AST/DeclTemplate.cpp +++ b/lib/AST/DeclTemplate.cpp @@ -238,6 +238,22 @@ TemplateArgument::TemplateArgument(Expr *E) : Kind(Expression) { StartLoc = E->getSourceRange().getBegin(); } +/// \brief Construct a template argument pack. +TemplateArgument::TemplateArgument(SourceLocation Loc, TemplateArgument *args, + unsigned NumArgs, bool CopyArgs) + : Kind(Pack) { + Args.NumArgs = NumArgs; + Args.CopyArgs = CopyArgs; + if (!Args.CopyArgs) { + Args.Args = args; + return; + } + + Args.Args = new TemplateArgument[NumArgs]; + for (unsigned I = 0; I != NumArgs; ++I) + Args.Args[I] = args[I]; +} + //===----------------------------------------------------------------------===// // TemplateArgumentListBuilder Implementation //===----------------------------------------------------------------------===// diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp index e304f54226..40a997cebc 100644 --- a/lib/AST/Type.cpp +++ b/lib/AST/Type.cpp @@ -1068,6 +1068,10 @@ anyDependentTemplateArguments(const TemplateArgument *Args, unsigned NumArgs) { Args[Idx].getAsExpr()->isValueDependent()) return true; break; + + case TemplateArgument::Pack: + assert(0 && "FIXME: Implement!"); + break; } } @@ -1476,6 +1480,9 @@ TemplateSpecializationType::PrintTemplateArgumentList( Args[Arg].getAsExpr()->printPretty(s, 0, Policy); break; } + case TemplateArgument::Pack: + assert(0 && "FIXME: Implement!"); + break; } // If this is the first argument and its string representation |