diff options
Diffstat (limited to 'clang/include/clang/AST/TemplateBase.h')
| -rw-r--r-- | clang/include/clang/AST/TemplateBase.h | 21 | 
1 files changed, 15 insertions, 6 deletions
diff --git a/clang/include/clang/AST/TemplateBase.h b/clang/include/clang/AST/TemplateBase.h index 058a5bc0a067..51fd8ba51034 100644 --- a/clang/include/clang/AST/TemplateBase.h +++ b/clang/include/clang/AST/TemplateBase.h @@ -14,6 +14,7 @@  #ifndef LLVM_CLANG_AST_TEMPLATEBASE_H  #define LLVM_CLANG_AST_TEMPLATEBASE_H +#include "clang/AST/DependenceFlags.h"  #include "clang/AST/NestedNameSpecifier.h"  #include "clang/AST/TemplateName.h"  #include "clang/AST/Type.h" @@ -81,8 +82,7 @@ public:      /// The template argument is an expression, and we've not resolved it to one      /// of the other forms yet, either because it's dependent or because we're      /// representing a non-canonical template argument (for instance, in a -    /// TemplateSpecializationType). Also used to represent a non-dependent -    /// __uuidof expression (a Microsoft extension). +    /// TemplateSpecializationType).      Expression,      /// The template argument is actually a parameter pack. Arguments are stored @@ -236,6 +236,8 @@ public:    /// Determine whether this template argument has no value.    bool isNull() const { return getKind() == Null; } +  TemplateArgumentDependence getDependence() const; +    /// Whether this template argument is dependent on a template    /// parameter such that its result can change from one instantiation to    /// another. @@ -637,7 +639,7 @@ public:    }    static const ASTTemplateArgumentListInfo * -  Create(ASTContext &C, const TemplateArgumentListInfo &List); +  Create(const ASTContext &C, const TemplateArgumentListInfo &List);  };  /// Represents an explicit template argument list in C++, e.g., @@ -666,11 +668,13 @@ struct alignas(void *) ASTTemplateKWAndArgsInfo {    void initializeFrom(SourceLocation TemplateKWLoc,                        const TemplateArgumentListInfo &List,                        TemplateArgumentLoc *OutArgArray); +  // FIXME: The parameter Deps is the result populated by this method, the +  // caller doesn't need it since it is populated by computeDependence. remove +  // it.    void initializeFrom(SourceLocation TemplateKWLoc,                        const TemplateArgumentListInfo &List, -                      TemplateArgumentLoc *OutArgArray, bool &Dependent, -                      bool &InstantiationDependent, -                      bool &ContainsUnexpandedParameterPack); +                      TemplateArgumentLoc *OutArgArray, +                      TemplateArgumentDependence &Deps);    void initializeFrom(SourceLocation TemplateKWLoc);    void copyInto(const TemplateArgumentLoc *ArgArray, @@ -702,6 +706,11 @@ inline const TemplateArgument &    return getArgs()[Idx];  } +inline const TemplateArgument &AutoType::getArg(unsigned Idx) const { +  assert(Idx < getNumArgs() && "Template argument out of range"); +  return getArgs()[Idx]; +} +  } // namespace clang  #endif // LLVM_CLANG_AST_TEMPLATEBASE_H  | 
