clang  6.0.0svn
Namespaces | Macros | Enumerations | Functions
SemaTemplate.cpp File Reference
#include "TreeTransform.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/DeclFriend.h"
#include "clang/AST/DeclTemplate.h"
#include "clang/AST/Expr.h"
#include "clang/AST/ExprCXX.h"
#include "clang/AST/RecursiveASTVisitor.h"
#include "clang/AST/TypeVisitor.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/PartialDiagnostic.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Sema/DeclSpec.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/ParsedTemplate.h"
#include "clang/Sema/Scope.h"
#include "clang/Sema/SemaInternal.h"
#include "clang/Sema/Template.h"
#include "clang/Sema/TemplateDeduction.h"
#include "llvm/ADT/SmallBitVector.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringExtras.h"
#include <iterator>
#include "clang/AST/TypeNodes.def"
Include dependency graph for SemaTemplate.cpp:

Go to the source code of this file.

Namespaces

 clang
 Dataflow Directional Tag Classes.
 

Macros

#define TYPE(Class, Parent)   bool Visit##Class##Type(const Class##Type *);
 
#define ABSTRACT_TYPE(Class, Parent)   bool Visit##Class##Type(const Class##Type *) { return false; }
 
#define NON_CANONICAL_TYPE(Class, Parent)   bool Visit##Class##Type(const Class##Type *) { return false; }
 

Enumerations

enum  NullPointerValueKind { NPV_NotNullPointer, NPV_NullPointer, NPV_Error }
 

Functions

static Exprclang::formAssociatedConstraints (TemplateParameterList *Params, FunctionDecl *FD)
 [temp.constr.decl]p2: A template's associated constraints are defined as a single constraint-expression derived from the introduced constraint-expressions [ ... More...
 
static NamedDeclisAcceptableTemplateName (ASTContext &Context, NamedDecl *Orig, bool AllowFunctionTemplates)
 Determine whether the declaration found is acceptable as the name of a template and, if so, return that template declaration. More...
 
static TemplateArgumentLoc translateTemplateArgument (Sema &SemaRef, const ParsedTemplateArgument &Arg)
 
static void maybeDiagnoseTemplateParameterShadow (Sema &SemaRef, Scope *S, SourceLocation Loc, IdentifierInfo *Name)
 
static void SetNestedNameSpecifier (TagDecl *T, const CXXScopeSpec &SS)
 
static bool DiagnoseDefaultTemplateArgument (Sema &S, Sema::TemplateParamListContext TPC, SourceLocation ParamLoc, SourceRange DefArgRange)
 Diagnose the presence of a default template argument on a template parameter, which is ill-formed in certain contexts. More...
 
static bool DiagnoseUnexpandedParameterPacks (Sema &S, TemplateTemplateParmDecl *TTP)
 Check for unexpanded parameter packs within the template parameters of a template template parameter, recursively. More...
 
static bool DependsOnTemplateParameters (QualType T, TemplateParameterList *Params)
 Determines whether a given type depends on the given parameter list. More...
 
static SourceRange getRangeOfTypeInNestedNameSpecifier (ASTContext &Context, QualType T, const CXXScopeSpec &SS)
 
static QualType checkBuiltinTemplateIdType (Sema &SemaRef, BuiltinTemplateDecl *BTD, const SmallVectorImpl< TemplateArgument > &Converted, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs)
 
static bool isEnableIfAliasTemplate (TypeAliasTemplateDecl *AliasTemplate)
 Determine whether this alias template is "enable_if_t". More...
 
static void collectConjunctionTerms (Expr *Clause, SmallVectorImpl< Expr *> &Terms)
 Collect all of the separable terms in the given condition, which might be a conjunction. More...
 
static ExprlookThroughRangesV3Condition (Preprocessor &PP, Expr *Cond)
 
static bool CheckTemplateSpecializationScope (Sema &S, NamedDecl *Specialized, NamedDecl *PrevDecl, SourceLocation Loc, bool IsPartialSpecialization)
 Check whether a specialization is well-formed in the current context. More...
 
static TemplateSpecializationKind getTemplateSpecializationKind (Decl *D)
 Determine what kind of template specialization the given declaration is. More...
 
static bool isTemplateArgumentTemplateParameter (const TemplateArgument &Arg, unsigned Depth, unsigned Index)
 
static bool isSameAsPrimaryTemplate (TemplateParameterList *Params, ArrayRef< TemplateArgument > Args)
 
static TemplateArgumentListInfo makeTemplateArgumentListInfo (Sema &S, TemplateIdAnnotation &TemplateId)
 Convert the parser's template argument list representation into our form. More...
 
template<typename PartialSpecDecl >
static void checkMoreSpecializedThanPrimary (Sema &S, PartialSpecDecl *Partial)
 
static void noteNonDeducibleParameters (Sema &S, TemplateParameterList *TemplateParams, const llvm::SmallBitVector &DeducibleParams)
 
template<typename PartialSpecDecl >
static void checkTemplatePartialSpecialization (Sema &S, PartialSpecDecl *Partial)
 
static TypeSourceInfoSubstDefaultTemplateArgument (Sema &SemaRef, TemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, TemplateTypeParmDecl *Param, SmallVectorImpl< TemplateArgument > &Converted)
 Substitute template arguments into the default template argument for the given template type parameter. More...
 
static ExprResult SubstDefaultTemplateArgument (Sema &SemaRef, TemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, NonTypeTemplateParmDecl *Param, SmallVectorImpl< TemplateArgument > &Converted)
 Substitute template arguments into the default template argument for the given non-type template parameter. More...
 
static TemplateName SubstDefaultTemplateArgument (Sema &SemaRef, TemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, TemplateTemplateParmDecl *Param, SmallVectorImpl< TemplateArgument > &Converted, NestedNameSpecifierLoc &QualifierLoc)
 Substitute template arguments into the default template argument for the given template template parameter. More...
 
static TemplateArgumentLoc convertTypeTemplateArgumentToTemplate (TypeLoc TLoc)
 Convert a template-argument that we parsed as a type into a template, if possible. More...
 
static bool diagnoseArityMismatch (Sema &S, TemplateDecl *Template, SourceLocation TemplateLoc, TemplateArgumentListInfo &TemplateArgs)
 Diagnose an arity mismatch in the. More...
 
static Optional< unsigned > getExpandedPackSize (NamedDecl *Param)
 Check whether the template parameter is a pack expansion, and if so, determine the number of parameters produced by that expansion. More...
 
template<typename TemplateParmDecl >
static bool diagnoseMissingArgument (Sema &S, SourceLocation Loc, TemplateDecl *TD, const TemplateParmDecl *D, TemplateArgumentListInfo &Args)
 Diagnose a missing template argument. More...
 
static NullPointerValueKind isNullPointerValueTemplateArgument (Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *Arg, Decl *Entity=nullptr)
 Determine whether the given template argument is a null pointer value of the appropriate type. More...
 
static bool CheckTemplateArgumentIsCompatibleWithParameter (Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, Expr *Arg, QualType ArgType)
 Checks whether the given template argument is compatible with its template parameter. More...
 
static bool CheckTemplateArgumentAddressOfObjectOrFunction (Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *ArgIn, TemplateArgument &Converted)
 Checks whether the given template argument is the address of an object or function according to C++ [temp.arg.nontype]p1. More...
 
static bool CheckTemplateArgumentPointerToMember (Sema &S, NonTypeTemplateParmDecl *Param, QualType ParamType, Expr *&ResultArg, TemplateArgument &Converted)
 Checks whether the given template argument is a pointer to member constant according to C++ [temp.arg.nontype]p1. More...
 
static void DiagnoseTemplateParameterListArityMismatch (Sema &S, TemplateParameterList *New, TemplateParameterList *Old, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc)
 Diagnose a known arity mismatch when comparing template argument lists. More...
 
static bool MatchTemplateParameterKind (Sema &S, NamedDecl *New, NamedDecl *Old, bool Complain, Sema::TemplateParameterListEqualKind Kind, SourceLocation TemplateArgLoc)
 Match two template parameters within template parameter lists. More...
 
static SourceRange findTemplateParameterInType (unsigned Depth, Expr *E)
 
static SourceRange findTemplateParameter (unsigned Depth, TypeLoc TL)
 
static bool CheckNonTypeTemplatePartialSpecializationArgs (Sema &S, SourceLocation TemplateNameLoc, NonTypeTemplateParmDecl *Param, const TemplateArgument *Args, unsigned NumArgs, bool IsDefaultArgument)
 Subroutine of Sema::CheckTemplatePartialSpecializationArgs that checks non-type template partial specialization arguments. More...
 
static void StripImplicitInstantiation (NamedDecl *D)
 Strips various properties off an implicit instantiation that has just been explicitly specialized. More...
 
static SourceLocation DiagLocForExplicitInstantiation (NamedDecl *D, SourceLocation PointOfInstantiation)
 Compute the diagnostic location for an explicit instantiation. More...
 
template<typename DeclT >
static void completeMemberSpecializationImpl (Sema &S, DeclT *OrigD, SourceLocation Loc)
 Complete the explicit specialization of a member of a class template by updating the instantiated member to be marked as an explicit specialization. More...
 
static bool CheckExplicitInstantiationScope (Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName)
 Check the scope of an explicit instantiation. More...
 
static bool ScopeSpecifierHasTemplateId (const CXXScopeSpec &SS)
 Determine whether the given scope specifier has a template-id in it. More...
 
static void dllExportImportClassTemplateSpecialization (Sema &S, ClassTemplateSpecializationDecl *Def)
 Make a dllexport or dllimport attr on a class template specialization take effect. More...
 
static bool isEnableIf (NestedNameSpecifierLoc NNS, const IdentifierInfo &II, SourceRange &CondRange, Expr *&Cond)
 Determine whether this failed name lookup should be treated as being disabled by a usage of std::enable_if. More...
 

Macro Definition Documentation

◆ ABSTRACT_TYPE

#define ABSTRACT_TYPE (   Class,
  Parent 
)    bool Visit##Class##Type(const Class##Type *) { return false; }

Definition at line 5069 of file SemaTemplate.cpp.

◆ NON_CANONICAL_TYPE

#define NON_CANONICAL_TYPE (   Class,
  Parent 
)    bool Visit##Class##Type(const Class##Type *) { return false; }

Definition at line 5071 of file SemaTemplate.cpp.

◆ TYPE

#define TYPE (   Class,
  Parent 
)    bool Visit##Class##Type(const Class##Type *);

Definition at line 5067 of file SemaTemplate.cpp.

Enumeration Type Documentation

◆ NullPointerValueKind

Enumerator
NPV_NotNullPointer 
NPV_NullPointer 
NPV_Error 

Definition at line 5335 of file SemaTemplate.cpp.

Function Documentation

◆ checkBuiltinTemplateIdType()

static QualType checkBuiltinTemplateIdType ( Sema SemaRef,
BuiltinTemplateDecl BTD,
const SmallVectorImpl< TemplateArgument > &  Converted,
SourceLocation  TemplateLoc,
TemplateArgumentListInfo TemplateArgs 
)
static

Definition at line 2742 of file SemaTemplate.cpp.

◆ CheckExplicitInstantiationScope()

static bool CheckExplicitInstantiationScope ( Sema S,
NamedDecl D,
SourceLocation  InstLoc,
bool  WasQualifiedName 
)
static

◆ checkMoreSpecializedThanPrimary()

template<typename PartialSpecDecl >
static void checkMoreSpecializedThanPrimary ( Sema S,
PartialSpecDecl *  Partial 
)
static

◆ CheckNonTypeTemplatePartialSpecializationArgs()

static bool CheckNonTypeTemplatePartialSpecializationArgs ( Sema S,
SourceLocation  TemplateNameLoc,
NonTypeTemplateParmDecl Param,
const TemplateArgument Args,
unsigned  NumArgs,
bool  IsDefaultArgument 
)
static

Subroutine of Sema::CheckTemplatePartialSpecializationArgs that checks non-type template partial specialization arguments.

Definition at line 7162 of file SemaTemplate.cpp.

◆ CheckTemplateArgumentAddressOfObjectOrFunction()

static bool CheckTemplateArgumentAddressOfObjectOrFunction ( Sema S,
NonTypeTemplateParmDecl Param,
QualType  ParamType,
Expr ArgIn,
TemplateArgument Converted 
)
static

◆ CheckTemplateArgumentIsCompatibleWithParameter()

static bool CheckTemplateArgumentIsCompatibleWithParameter ( Sema S,
NonTypeTemplateParmDecl Param,
QualType  ParamType,
Expr ArgIn,
Expr Arg,
QualType  ArgType 
)
static

◆ CheckTemplateArgumentPointerToMember()

static bool CheckTemplateArgumentPointerToMember ( Sema S,
NonTypeTemplateParmDecl Param,
QualType  ParamType,
Expr *&  ResultArg,
TemplateArgument Converted 
)
static

◆ checkTemplatePartialSpecialization()

template<typename PartialSpecDecl >
static void checkTemplatePartialSpecialization ( Sema S,
PartialSpecDecl *  Partial 
)
static

◆ CheckTemplateSpecializationScope()

static bool CheckTemplateSpecializationScope ( Sema S,
NamedDecl Specialized,
NamedDecl PrevDecl,
SourceLocation  Loc,
bool  IsPartialSpecialization 
)
static

Check whether a specialization is well-formed in the current context.

This routine determines whether a template specialization can be declared in the current context (C++ [temp.expl.spec]p2).

Parameters
Sthe semantic analysis object for which this check is being performed.
Specializedthe entity being specialized or instantiated, which may be a kind of template (class template, function template, etc.) or a member of a class template (member function, static data member, member class).
PrevDeclthe previous declaration of this entity, if any.
Locthe location of the explicit specialization or instantiation of this entity.
IsPartialSpecializationwhether this is a partial specialization of a class template.
Returns
true if there was an error that we cannot recover from, false otherwise.

Definition at line 6991 of file SemaTemplate.cpp.

References clang::Sema::CurContext, Diag(), clang::Sema::Diag(), clang::DeclContext::Encloses(), clang::DeclContext::Equals(), clang::Decl::getDeclContext(), clang::DeclContext::getEnclosingNamespaceContext(), clang::Sema::getLangOpts(), clang::Decl::getLocation(), clang::DeclContext::getRedeclContext(), getTemplateSpecializationKind(), clang::DeclContext::InEnclosingNamespaceSetOf(), clang::Sema::inTemplateInstantiation(), clang::DeclContext::isFunctionOrMethod(), clang::DeclContext::isRecord(), clang::TSK_ImplicitInstantiation, and clang::TSK_Undeclared.

◆ collectConjunctionTerms()

static void collectConjunctionTerms ( Expr Clause,
SmallVectorImpl< Expr *> &  Terms 
)
static

Collect all of the separable terms in the given condition, which might be a conjunction.

FIXME: The right answer is to convert the logical expression into disjunctive normal form, so we can find the first failed term within each possible clause.

Definition at line 2824 of file SemaTemplate.cpp.

References clang::Expr::IgnoreParenImpCasts().

Referenced by clang::Sema::findFailedBooleanCondition().

◆ completeMemberSpecializationImpl()

template<typename DeclT >
static void completeMemberSpecializationImpl ( Sema S,
DeclT *  OrigD,
SourceLocation  Loc 
)
static

Complete the explicit specialization of a member of a class template by updating the instantiated member to be marked as an explicit specialization.

Parameters
OrigDThe member declaration instantiated from the template.
LocThe location of the explicit specialization of the member.

Definition at line 8320 of file SemaTemplate.cpp.

References clang::TSK_ExplicitSpecialization, and clang::TSK_ImplicitInstantiation.

Referenced by clang::Sema::CompleteMemberSpecialization().

◆ convertTypeTemplateArgumentToTemplate()

static TemplateArgumentLoc convertTypeTemplateArgumentToTemplate ( TypeLoc  TLoc)
static

Convert a template-argument that we parsed as a type into a template, if possible.

C++ permits injected-class-names to perform dual service as template template arguments and as template type arguments.

Definition at line 4438 of file SemaTemplate.cpp.

References clang::ETK_None, and clang::TypeLoc::getAs().

◆ DependsOnTemplateParameters()

static bool DependsOnTemplateParameters ( QualType  T,
TemplateParameterList Params 
)
static

Determines whether a given type depends on the given parameter list.

Definition at line 2303 of file SemaTemplate.cpp.

◆ DiagLocForExplicitInstantiation()

static SourceLocation DiagLocForExplicitInstantiation ( NamedDecl D,
SourceLocation  PointOfInstantiation 
)
static

Compute the diagnostic location for an explicit instantiation.

Definition at line 7678 of file SemaTemplate.cpp.

References clang::SourceLocation::isValid().

Referenced by clang::Sema::CheckSpecializationInstantiationRedecl().

◆ diagnoseArityMismatch()

static bool diagnoseArityMismatch ( Sema S,
TemplateDecl Template,
SourceLocation  TemplateLoc,
TemplateArgumentListInfo TemplateArgs 
)
static

◆ DiagnoseDefaultTemplateArgument()

static bool DiagnoseDefaultTemplateArgument ( Sema S,
Sema::TemplateParamListContext  TPC,
SourceLocation  ParamLoc,
SourceRange  DefArgRange 
)
static

Diagnose the presence of a default template argument on a template parameter, which is ill-formed in certain contexts.

Returns
true if the default template argument should be dropped.

Definition at line 1878 of file SemaTemplate.cpp.

Referenced by clang::Sema::CheckTemplateParameterList().

◆ diagnoseMissingArgument()

template<typename TemplateParmDecl >
static bool diagnoseMissingArgument ( Sema S,
SourceLocation  Loc,
TemplateDecl TD,
const TemplateParmDecl *  D,
TemplateArgumentListInfo Args 
)
static

◆ DiagnoseTemplateParameterListArityMismatch()

static void DiagnoseTemplateParameterListArityMismatch ( Sema S,
TemplateParameterList New,
TemplateParameterList Old,
Sema::TemplateParameterListEqualKind  Kind,
SourceLocation  TemplateArgLoc 
)
static

◆ DiagnoseUnexpandedParameterPacks()

static bool DiagnoseUnexpandedParameterPacks ( Sema S,
TemplateTemplateParmDecl TTP 
)
static

Check for unexpanded parameter packs within the template parameters of a template template parameter, recursively.

Definition at line 1932 of file SemaTemplate.cpp.

Referenced by clang::Sema::checkExceptionSpecification(), and clang::Sema::DiagnoseUnexpandedParameterPack().

◆ dllExportImportClassTemplateSpecialization()

static void dllExportImportClassTemplateSpecialization ( Sema S,
ClassTemplateSpecializationDecl Def 
)
static

◆ findTemplateParameter()

static SourceRange findTemplateParameter ( unsigned  Depth,
TypeLoc  TL 
)
static

◆ findTemplateParameterInType()

static SourceRange findTemplateParameterInType ( unsigned  Depth,
Expr E 
)
static

Definition at line 7140 of file SemaTemplate.cpp.

◆ getExpandedPackSize()

static Optional<unsigned> getExpandedPackSize ( NamedDecl Param)
static

Check whether the template parameter is a pack expansion, and if so, determine the number of parameters produced by that expansion.

For instance:

template<typename ...Ts> struct A {
template<Ts ...NTs, template<Ts> class ...TTs, typename ...Us> struct B;
};

In A<int,int>::B, NTs and TTs have expanded pack size 2, and Us is not a pack expansion, so returns an empty Optional.

Definition at line 4751 of file SemaTemplate.cpp.

Referenced by clang::Sema::CheckTemplateArgumentList().

◆ getRangeOfTypeInNestedNameSpecifier()

static SourceRange getRangeOfTypeInNestedNameSpecifier ( ASTContext Context,
QualType  T,
const CXXScopeSpec SS 
)
static

Definition at line 2311 of file SemaTemplate.cpp.

◆ getTemplateSpecializationKind()

static TemplateSpecializationKind getTemplateSpecializationKind ( Decl D)
static

◆ isAcceptableTemplateName()

static NamedDecl* isAcceptableTemplateName ( ASTContext Context,
NamedDecl Orig,
bool  AllowFunctionTemplates 
)
static

Determine whether the declaration found is acceptable as the name of a template and, if so, return that template declaration.

Otherwise, returns NULL.

Definition at line 71 of file SemaTemplate.cpp.

Referenced by clang::Sema::FilterAcceptableTemplateNames().

◆ isEnableIf()

static bool isEnableIf ( NestedNameSpecifierLoc  NNS,
const IdentifierInfo II,
SourceRange CondRange,
Expr *&  Cond 
)
static

◆ isEnableIfAliasTemplate()

static bool isEnableIfAliasTemplate ( TypeAliasTemplateDecl AliasTemplate)
static

Determine whether this alias template is "enable_if_t".

Definition at line 2814 of file SemaTemplate.cpp.

References clang::NamedDecl::getName().

◆ isNullPointerValueTemplateArgument()

static NullPointerValueKind isNullPointerValueTemplateArgument ( Sema S,
NonTypeTemplateParmDecl Param,
QualType  ParamType,
Expr Arg,
Decl Entity = nullptr 
)
static

◆ isSameAsPrimaryTemplate()

static bool isSameAsPrimaryTemplate ( TemplateParameterList Params,
ArrayRef< TemplateArgument Args 
)
static

◆ isTemplateArgumentTemplateParameter()

static bool isTemplateArgumentTemplateParameter ( const TemplateArgument Arg,
unsigned  Depth,
unsigned  Index 
)
static

◆ lookThroughRangesV3Condition()

static Expr* lookThroughRangesV3Condition ( Preprocessor PP,
Expr Cond 
)
static

◆ makeTemplateArgumentListInfo()

static TemplateArgumentListInfo makeTemplateArgumentListInfo ( Sema S,
TemplateIdAnnotation TemplateId 
)
static

◆ MatchTemplateParameterKind()

static bool MatchTemplateParameterKind ( Sema S,
NamedDecl New,
NamedDecl Old,
bool  Complain,
Sema::TemplateParameterListEqualKind  Kind,
SourceLocation  TemplateArgLoc 
)
static

◆ maybeDiagnoseTemplateParameterShadow()

static void maybeDiagnoseTemplateParameterShadow ( Sema SemaRef,
Scope S,
SourceLocation  Loc,
IdentifierInfo Name 
)
static

Definition at line 777 of file SemaTemplate.cpp.

◆ noteNonDeducibleParameters()

static void noteNonDeducibleParameters ( Sema S,
TemplateParameterList TemplateParams,
const llvm::SmallBitVector &  DeducibleParams 
)
static

Definition at line 3421 of file SemaTemplate.cpp.

Referenced by checkTemplatePartialSpecialization().

◆ ScopeSpecifierHasTemplateId()

static bool ScopeSpecifierHasTemplateId ( const CXXScopeSpec SS)
static

Determine whether the given scope specifier has a template-id in it.

Definition at line 8406 of file SemaTemplate.cpp.

References clang::NestedNameSpecifier::getAsType(), clang::NestedNameSpecifier::getPrefix(), clang::CXXScopeSpec::getScopeRep(), and clang::CXXScopeSpec::isSet().

◆ SetNestedNameSpecifier()

static void SetNestedNameSpecifier ( TagDecl T,
const CXXScopeSpec SS 
)
static

◆ StripImplicitInstantiation()

static void StripImplicitInstantiation ( NamedDecl D)
static

Strips various properties off an implicit instantiation that has just been explicitly specialized.

Definition at line 7668 of file SemaTemplate.cpp.

References clang::Decl::dropAttr().

Referenced by clang::Sema::CheckSpecializationInstantiationRedecl().

◆ SubstDefaultTemplateArgument() [1/3]

static TypeSourceInfo* SubstDefaultTemplateArgument ( Sema SemaRef,
TemplateDecl Template,
SourceLocation  TemplateLoc,
SourceLocation  RAngleLoc,
TemplateTypeParmDecl Param,
SmallVectorImpl< TemplateArgument > &  Converted 
)
static

Substitute template arguments into the default template argument for the given template type parameter.

Parameters
SemaRefthe semantic analysis object for which we are performing the substitution.
Templatethe template that we are synthesizing template arguments for.
TemplateLocthe location of the template name that started the template-id we are checking.
RAngleLocthe location of the right angle bracket ('>') that terminates the template-id.
Paramthe template template parameter whose default we are substituting into.
Convertedthe list of template arguments provided for template parameters that precede Param in the template parameter list.
Returns
the substituted template argument, or NULL if an error occurred.

Definition at line 4221 of file SemaTemplate.cpp.

References clang::MultiLevelTemplateArgumentList::addOuterTemplateArguments(), clang::Decl::getDeclContext(), clang::NamedDecl::getDeclName(), clang::TemplateTypeParmDecl::getDefaultArgumentInfo(), clang::TemplateTypeParmDecl::getDefaultArgumentLoc(), clang::TemplateTypeParmDecl::getDepth(), clang::TypeSourceInfo::getType(), clang::Type::isDependentType(), clang::Sema::InstantiatingTemplate::isInvalid(), clang::TemplateArgumentList::OnStack, and clang::Sema::SubstType().

Referenced by clang::Sema::SubstDefaultTemplateArgumentIfAvailable().

◆ SubstDefaultTemplateArgument() [2/3]

static ExprResult SubstDefaultTemplateArgument ( Sema SemaRef,
TemplateDecl Template,
SourceLocation  TemplateLoc,
SourceLocation  RAngleLoc,
NonTypeTemplateParmDecl Param,
SmallVectorImpl< TemplateArgument > &  Converted 
)
static

Substitute template arguments into the default template argument for the given non-type template parameter.

Parameters
SemaRefthe semantic analysis object for which we are performing the substitution.
Templatethe template that we are synthesizing template arguments for.
TemplateLocthe location of the template name that started the template-id we are checking.
RAngleLocthe location of the right angle bracket ('>') that terminates the template-id.
Paramthe non-type template parameter whose default we are substituting into.
Convertedthe list of template arguments provided for template parameters that precede Param in the template parameter list.
Returns
the substituted template argument, or NULL if an error occurred.

Definition at line 4278 of file SemaTemplate.cpp.

References clang::MultiLevelTemplateArgumentList::addOuterTemplateArguments(), clang::Sema::ConstantEvaluated, clang::ExprError(), clang::NonTypeTemplateParmDecl::getDefaultArgument(), clang::TemplateParmPosition::getDepth(), clang::Sema::InstantiatingTemplate::isInvalid(), clang::TemplateArgumentList::OnStack, and clang::Sema::SubstExpr().

◆ SubstDefaultTemplateArgument() [3/3]

static TemplateName SubstDefaultTemplateArgument ( Sema SemaRef,
TemplateDecl Template,
SourceLocation  TemplateLoc,
SourceLocation  RAngleLoc,
TemplateTemplateParmDecl Param,
SmallVectorImpl< TemplateArgument > &  Converted,
NestedNameSpecifierLoc QualifierLoc 
)
static

Substitute template arguments into the default template argument for the given template template parameter.

Parameters
SemaRefthe semantic analysis object for which we are performing the substitution.
Templatethe template that we are synthesizing template arguments for.
TemplateLocthe location of the template name that started the template-id we are checking.
RAngleLocthe location of the right angle bracket ('>') that terminates the template-id.
Paramthe template template parameter whose default we are substituting into.
Convertedthe list of template arguments provided for template parameters that precede Param in the template parameter list.
QualifierLocWill be set to the nested-name-specifier (with source-location information) that precedes the template name.
Returns
the substituted template argument, or NULL if an error occurred.

Definition at line 4329 of file SemaTemplate.cpp.

References clang::MultiLevelTemplateArgumentList::addOuterTemplateArguments(), clang::TemplateArgumentLoc::getArgument(), clang::TemplateArgument::getAsTemplate(), clang::Decl::getDeclContext(), clang::TemplateTemplateParmDecl::getDefaultArgument(), clang::TemplateParmPosition::getDepth(), clang::TemplateArgumentLoc::getTemplateNameLoc(), clang::TemplateArgumentLoc::getTemplateQualifierLoc(), clang::Sema::InstantiatingTemplate::isInvalid(), clang::TemplateArgumentList::OnStack, clang::Sema::SubstNestedNameSpecifierLoc(), and clang::Sema::SubstTemplateName().

◆ translateTemplateArgument()

static TemplateArgumentLoc translateTemplateArgument ( Sema SemaRef,
const ParsedTemplateArgument Arg 
)
static