clang  19.0.0git
Macros | Enumerations | Functions
SemaTemplate.cpp File Reference
#include "TreeTransform.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/ASTContext.h"
#include "clang/AST/Decl.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/TemplateName.h"
#include "clang/AST/TypeVisitor.h"
#include "clang/Basic/Builtins.h"
#include "clang/Basic/DiagnosticSema.h"
#include "clang/Basic/LangOptions.h"
#include "clang/Basic/PartialDiagnostic.h"
#include "clang/Basic/SourceLocation.h"
#include "clang/Basic/Stack.h"
#include "clang/Basic/TargetInfo.h"
#include "clang/Sema/DeclSpec.h"
#include "clang/Sema/EnterExpressionEvaluationContext.h"
#include "clang/Sema/Initialization.h"
#include "clang/Sema/Lookup.h"
#include "clang/Sema/Overload.h"
#include "clang/Sema/ParsedTemplate.h"
#include "clang/Sema/Scope.h"
#include "clang/Sema/SemaCUDA.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 <optional>
#include "clang/AST/TypeNodes.inc"

Go to the source code of this file.

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 TemplateArgumentLoc translateTemplateArgument (Sema &SemaRef, const ParsedTemplateArgument &Arg)
 
static void maybeDiagnoseTemplateParameterShadow (Sema &SemaRef, Scope *S, SourceLocation Loc, const IdentifierInfo *Name)
 
static TemplateArgumentListInfo makeTemplateArgumentListInfo (Sema &S, TemplateIdAnnotation &TemplateId)
 Convert the parser's template argument list representation into our form. More...
 
template<typename ArgumentLocAppender >
static ExprResult formImmediatelyDeclaredConstraint (Sema &S, NestedNameSpecifierLoc NS, DeclarationNameInfo NameInfo, ConceptDecl *NamedConcept, NamedDecl *FoundDecl, SourceLocation LAngleLoc, SourceLocation RAngleLoc, QualType ConstrainedType, SourceLocation ParamNameLoc, ArgumentLocAppender Appender, SourceLocation EllipsisLoc)
 
static void SetNestedNameSpecifier (Sema &S, TagDecl *T, const CXXScopeSpec &SS)
 
static TemplateParameterListGetTemplateParameterList (TemplateDecl *TD)
 
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, ArrayRef< 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)
 
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 bool SubstDefaultTemplateArgument (Sema &SemaRef, TemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, TemplateTypeParmDecl *Param, ArrayRef< TemplateArgument > SugaredConverted, ArrayRef< TemplateArgument > CanonicalConverted, TemplateArgumentLoc &Output)
 Substitute template arguments into the default template argument for the given template type parameter. More...
 
static bool SubstDefaultTemplateArgument (Sema &SemaRef, TemplateDecl *Template, SourceLocation TemplateLoc, SourceLocation RAngleLoc, NonTypeTemplateParmDecl *Param, ArrayRef< TemplateArgument > SugaredConverted, ArrayRef< TemplateArgument > CanonicalConverted, TemplateArgumentLoc &Output)
 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, ArrayRef< TemplateArgument > SugaredConverted, ArrayRef< TemplateArgument > CanonicalConverted, NestedNameSpecifierLoc &QualifierLoc)
 Substitute template arguments into the default template argument for the given template template parameter. More...
 
static TemplateArgumentLoc convertTypeTemplateArgumentToTemplate (ASTContext &Context, TypeLoc TLoc)
 Convert a template-argument that we parsed as a type into a template, if possible. 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 &SugaredConverted, TemplateArgument &CanonicalConverted)
 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 &SugaredConverted, TemplateArgument &CanonicalConverted)
 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 Sema::SemaDiagnosticBuilder noteLocation (Sema &S, const NamedDecl &Decl, unsigned HereDiagID, unsigned ExternalDiagID)
 
static ExprBuildExpressionFromIntegralTemplateArgumentValue (Sema &S, QualType OrigT, const llvm::APSInt &Int, SourceLocation Loc)
 Construct a new expression that refers to the given integral template argument with the given source-location information. More...
 
static ExprBuildExpressionFromNonTypeTemplateArgumentValue (Sema &S, QualType T, const APValue &Val, SourceLocation Loc)
 
static bool MatchTemplateParameterKind (Sema &S, NamedDecl *New, const Sema::TemplateCompareNewDeclInfo &NewInstFrom, NamedDecl *Old, const NamedDecl *OldInstFrom, 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, bool MinGW)
 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 CheckExplicitInstantiation (Sema &S, NamedDecl *D, SourceLocation InstLoc, bool WasQualifiedName, TemplateSpecializationKind TSK)
 Common checks for whether an explicit instantiation of D is valid. 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 6946 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 6948 of file SemaTemplate.cpp.

◆ TYPE

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

Definition at line 6944 of file SemaTemplate.cpp.

Enumeration Type Documentation

◆ NullPointerValueKind

Enumerator
NPV_NotNullPointer 
NPV_NullPointer 
NPV_Error 

Definition at line 7249 of file SemaTemplate.cpp.

Function Documentation

◆ BuildExpressionFromIntegralTemplateArgumentValue()

static Expr* BuildExpressionFromIntegralTemplateArgumentValue ( Sema S,
QualType  OrigT,
const llvm::APSInt Int,
SourceLocation  Loc 
)
static

Construct a new expression that refers to the given integral template argument with the given source-location information.

This routine takes care of the mapping from an integral template argument (which may have any integral type) to the appropriate literal value.

Definition at line 8697 of file SemaTemplate.cpp.

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

◆ BuildExpressionFromNonTypeTemplateArgumentValue()

static Expr* BuildExpressionFromNonTypeTemplateArgumentValue ( Sema S,
QualType  T,
const APValue Val,
SourceLocation  Loc 
)
static

◆ checkBuiltinTemplateIdType()

static QualType checkBuiltinTemplateIdType ( Sema SemaRef,
BuiltinTemplateDecl BTD,
ArrayRef< TemplateArgument Converted,
SourceLocation  TemplateLoc,
TemplateArgumentListInfo TemplateArgs 
)
static

Definition at line 4359 of file SemaTemplate.cpp.

◆ CheckExplicitInstantiation()

static bool CheckExplicitInstantiation ( Sema S,
NamedDecl D,
SourceLocation  InstLoc,
bool  WasQualifiedName,
TemplateSpecializationKind  TSK 
)
static

Common checks for whether an explicit instantiation of D is valid.

Definition at line 10793 of file SemaTemplate.cpp.

◆ CheckExplicitInstantiationScope()

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

Check the scope of an explicit instantiation.

Returns
true if a serious error occurs, false otherwise.

Definition at line 10741 of file SemaTemplate.cpp.

◆ checkMoreSpecializedThanPrimary()

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

Definition at line 5124 of file SemaTemplate.cpp.

◆ 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 9331 of file SemaTemplate.cpp.

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

◆ CheckTemplateArgumentAddressOfObjectOrFunction()

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

Checks whether the given template argument is the address of an object or function according to C++ [temp.arg.nontype]p1.

Definition at line 7420 of file SemaTemplate.cpp.

◆ CheckTemplateArgumentIsCompatibleWithParameter()

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

Checks whether the given template argument is compatible with its template parameter.

Definition at line 7363 of file SemaTemplate.cpp.

◆ CheckTemplateArgumentPointerToMember()

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

Checks whether the given template argument is a pointer to member constant according to C++ [temp.arg.nontype]p1.

Definition at line 7687 of file SemaTemplate.cpp.

◆ checkTemplatePartialSpecialization()

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

Definition at line 5176 of file SemaTemplate.cpp.

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

◆ 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 9237 of file SemaTemplate.cpp.

◆ 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 4456 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 10707 of file SemaTemplate.cpp.

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

◆ convertTypeTemplateArgumentToTemplate()

static TemplateArgumentLoc convertTypeTemplateArgumentToTemplate ( ASTContext Context,
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 6257 of file SemaTemplate.cpp.

◆ DependsOnTemplateParameters()

static bool DependsOnTemplateParameters ( QualType  T,
TemplateParameterList Params 
)
static

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

Definition at line 3911 of file SemaTemplate.cpp.

References clang::TemplateParameterList::size(), and clang::T.

◆ DiagLocForExplicitInstantiation()

static SourceLocation DiagLocForExplicitInstantiation ( NamedDecl D,
SourceLocation  PointOfInstantiation 
)
static

Compute the diagnostic location for an explicit instantiation.

Definition at line 9955 of file SemaTemplate.cpp.

References clang::SourceLocation::isValid().

◆ 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 3416 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

Diagnose a missing template argument.

Definition at line 6566 of file SemaTemplate.cpp.

◆ DiagnoseTemplateParameterListArityMismatch()

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

Diagnose a known arity mismatch when comparing template argument lists.

Definition at line 9004 of file SemaTemplate.cpp.

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

◆ 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 3470 of file SemaTemplate.cpp.

◆ dllExportImportClassTemplateSpecialization()

static void dllExportImportClassTemplateSpecialization ( Sema S,
ClassTemplateSpecializationDecl Def 
)
static

Make a dllexport or dllimport attr on a class template specialization take effect.

Definition at line 10838 of file SemaTemplate.cpp.

◆ findTemplateParameter()

static SourceRange findTemplateParameter ( unsigned  Depth,
TypeLoc  TL 
)
static

◆ findTemplateParameterInType()

static SourceRange findTemplateParameterInType ( unsigned  Depth,
Expr E 
)
static

◆ formImmediatelyDeclaredConstraint()

template<typename ArgumentLocAppender >
static ExprResult formImmediatelyDeclaredConstraint ( Sema S,
NestedNameSpecifierLoc  NS,
DeclarationNameInfo  NameInfo,
ConceptDecl NamedConcept,
NamedDecl FoundDecl,
SourceLocation  LAngleLoc,
SourceLocation  RAngleLoc,
QualType  ConstrainedType,
SourceLocation  ParamNameLoc,
ArgumentLocAppender  Appender,
SourceLocation  EllipsisLoc 
)
static

Definition at line 1162 of file SemaTemplate.cpp.

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

◆ getRangeOfTypeInNestedNameSpecifier()

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

Definition at line 3922 of file SemaTemplate.cpp.

◆ GetTemplateParameterList()

static TemplateParameterList* GetTemplateParameterList ( TemplateDecl TD)
static

◆ getTemplateSpecializationKind()

static TemplateSpecializationKind getTemplateSpecializationKind ( Decl D)
static

Determine what kind of template specialization the given declaration is.

Definition at line 9199 of file SemaTemplate.cpp.

References clang::Function, and clang::TSK_Undeclared.

◆ 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".

libc++ >=14 uses "__enable_if_t" in C++11 mode.

Definition at line 4445 of file SemaTemplate.cpp.

References clang::AliasTemplate.

◆ isNullPointerValueTemplateArgument()

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

Determine whether the given template argument is a null pointer value of the appropriate type.

Definition at line 7258 of file SemaTemplate.cpp.

◆ isSameAsPrimaryTemplate()

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

◆ isTemplateArgumentTemplateParameter()

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

Definition at line 5059 of file SemaTemplate.cpp.

Referenced by isSameAsPrimaryTemplate().

◆ lookThroughRangesV3Condition()

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

◆ makeTemplateArgumentListInfo()

static TemplateArgumentListInfo makeTemplateArgumentListInfo ( Sema S,
TemplateIdAnnotation TemplateId 
)
static

Convert the parser's template argument list representation into our form.

Definition at line 1083 of file SemaTemplate.cpp.

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

◆ MatchTemplateParameterKind()

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

Match two template parameters within template parameter lists.

Definition at line 8852 of file SemaTemplate.cpp.

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

◆ maybeDiagnoseTemplateParameterShadow()

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

Definition at line 947 of file SemaTemplate.cpp.

◆ noteLocation()

static Sema::SemaDiagnosticBuilder noteLocation ( Sema S,
const NamedDecl Decl,
unsigned  HereDiagID,
unsigned  ExternalDiagID 
)
static

◆ noteNonDeducibleParameters()

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

Definition at line 5159 of file SemaTemplate.cpp.

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

◆ ScopeSpecifierHasTemplateId()

static bool ScopeSpecifierHasTemplateId ( const CXXScopeSpec SS)
static

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

Definition at line 10816 of file SemaTemplate.cpp.

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

◆ SetNestedNameSpecifier()

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

Definition at line 1801 of file SemaTemplate.cpp.

◆ StripImplicitInstantiation()

static void StripImplicitInstantiation ( NamedDecl D,
bool  MinGW 
)
static

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

Definition at line 9944 of file SemaTemplate.cpp.

References clang::Decl::dropAttrs().

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

◆ SubstDefaultTemplateArgument() [1/3]

static bool SubstDefaultTemplateArgument ( Sema SemaRef,
TemplateDecl Template,
SourceLocation  TemplateLoc,
SourceLocation  RAngleLoc,
NonTypeTemplateParmDecl Param,
ArrayRef< TemplateArgument SugaredConverted,
ArrayRef< TemplateArgument CanonicalConverted,
TemplateArgumentLoc Output 
)
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 6112 of file SemaTemplate.cpp.

References clang::MultiLevelTemplateArgumentList::addOuterTemplateArguments(), clang::Sema::ConstantEvaluated, clang::Decl::getDeclContext(), clang::NonTypeTemplateParmDecl::getDefaultArgument(), clang::NonTypeTemplateParmDecl::getDepth(), clang::Sema::InstantiatingTemplate::isInvalid(), and clang::Sema::SubstTemplateArgument().

◆ SubstDefaultTemplateArgument() [2/3]

static TemplateName SubstDefaultTemplateArgument ( Sema SemaRef,
TemplateDecl Template,
SourceLocation  TemplateLoc,
SourceLocation  RAngleLoc,
TemplateTemplateParmDecl Param,
ArrayRef< TemplateArgument SugaredConverted,
ArrayRef< TemplateArgument CanonicalConverted,
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 6162 of file SemaTemplate.cpp.

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

◆ SubstDefaultTemplateArgument() [3/3]

static bool SubstDefaultTemplateArgument ( Sema SemaRef,
TemplateDecl Template,
SourceLocation  TemplateLoc,
SourceLocation  RAngleLoc,
TemplateTypeParmDecl Param,
ArrayRef< TemplateArgument SugaredConverted,
ArrayRef< TemplateArgument CanonicalConverted,
TemplateArgumentLoc Output 
)
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.
Outputthe resulting substituted template argument.
Returns
true if an error occurred.

Definition at line 6052 of file SemaTemplate.cpp.

References clang::MultiLevelTemplateArgumentList::addOuterTemplateArguments(), clang::TemplateArgumentLoc::getArgument(), clang::Decl::getDeclContext(), clang::NamedDecl::getDeclName(), clang::TemplateTypeParmDecl::getDefaultArgument(), clang::TemplateTypeParmDecl::getDefaultArgumentLoc(), clang::TemplateTypeParmDecl::getDepth(), clang::TemplateArgument::isInstantiationDependent(), clang::Sema::InstantiatingTemplate::isInvalid(), and clang::Sema::SubstTemplateArgument().

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

◆ translateTemplateArgument()

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