clang 20.0.0git
|
Provides information about a function template specialization, which is a FunctionDecl that has been explicitly specialization or instantiated from a function template. More...
#include "clang/AST/DeclTemplate.h"
Public Member Functions | |
FunctionDecl * | getFunction () const |
Retrieve the declaration of the function template specialization. | |
FunctionTemplateDecl * | getTemplate () const |
Retrieve the template from which this function was specialized. | |
TemplateSpecializationKind | getTemplateSpecializationKind () const |
Determine what kind of template specialization this is. | |
bool | isExplicitSpecialization () const |
bool | isExplicitInstantiationOrSpecialization () const |
True if this declaration is an explicit specialization, explicit instantiation declaration, or explicit instantiation definition. | |
void | setTemplateSpecializationKind (TemplateSpecializationKind TSK) |
Set the template specialization kind. | |
SourceLocation | getPointOfInstantiation () const |
Retrieve the first point of instantiation of this function template specialization. | |
void | setPointOfInstantiation (SourceLocation POI) |
Set the (first) point of instantiation of this function template specialization. | |
MemberSpecializationInfo * | getMemberSpecializationInfo () const |
Get the specialization info if this function template specialization is also a member specialization: | |
void | Profile (llvm::FoldingSetNodeID &ID) |
Static Public Member Functions | |
static FunctionTemplateSpecializationInfo * | Create (ASTContext &C, FunctionDecl *FD, FunctionTemplateDecl *Template, TemplateSpecializationKind TSK, TemplateArgumentList *TemplateArgs, const TemplateArgumentListInfo *TemplateArgsAsWritten, SourceLocation POI, MemberSpecializationInfo *MSInfo) |
static void | Profile (llvm::FoldingSetNodeID &ID, ArrayRef< TemplateArgument > TemplateArgs, const ASTContext &Context) |
Public Attributes | |
TemplateArgumentList * | TemplateArguments |
The template arguments used to produce the function template specialization from the function template. | |
const ASTTemplateArgumentListInfo * | TemplateArgumentsAsWritten |
The template arguments as written in the sources, if provided. | |
SourceLocation | PointOfInstantiation |
The point at which this function template specialization was first instantiated. | |
friend | TrailingObjects |
Provides information about a function template specialization, which is a FunctionDecl that has been explicitly specialization or instantiated from a function template.
Definition at line 469 of file DeclTemplate.h.
|
static |
Definition at line 940 of file DeclTemplate.cpp.
References clang::C, and clang::ASTTemplateArgumentListInfo::Create().
Referenced by clang::ASTDeclReader::VisitFunctionDecl().
|
inline |
Retrieve the declaration of the function template specialization.
Definition at line 524 of file DeclTemplate.h.
References clang::Function.
Referenced by clang::RedeclarableTemplateDecl::SpecEntryTraits< FunctionTemplateSpecializationInfo >::getDecl(), Profile(), and clang::ASTDeclReader::VisitFunctionDecl().
|
inline |
Get the specialization info if this function template specialization is also a member specialization:
Here, A<int>::f<int> is a function template specialization that is an explicit specialization of A<int>::f, but it's also a member specialization (an implicit instantiation in this case) of A::f<int>. Further:
... declares a function template specialization that is an explicit specialization of A<int>::f, and is also an explicit member specialization of A::f<int>.
Note that the TemplateSpecializationKind of the MemberSpecializationInfo need not be the same as that returned by getTemplateSpecializationKind(), and represents the relationship between the function and the class-scope explicit specialization in the original templated class – whereas our TemplateSpecializationKind represents the relationship between the function and the function template, and should always be TSK_ExplicitSpecialization whenever we have MemberSpecializationInfo.
Definition at line 598 of file DeclTemplate.h.
Referenced by clang::ASTDeclWriter::VisitCXXMethodDecl(), and clang::ASTDeclWriter::VisitFunctionDecl().
|
inline |
Retrieve the first point of instantiation of this function template specialization.
The point of instantiation may be an invalid source location if this function has yet to be instantiated.
Definition at line 558 of file DeclTemplate.h.
References PointOfInstantiation.
Referenced by clang::Sema::CheckFunctionTemplateSpecialization(), and clang::ASTDeclWriter::VisitFunctionDecl().
|
inline |
Retrieve the template from which this function was specialized.
Definition at line 527 of file DeclTemplate.h.
Referenced by clang::PredefinedExpr::ComputeName(), and clang::ASTDeclWriter::VisitFunctionDecl().
|
inline |
Determine what kind of template specialization this is.
Definition at line 530 of file DeclTemplate.h.
Referenced by clang::Sema::CheckFunctionTemplateSpecialization(), isExplicitInstantiationOrSpecialization(), isExplicitSpecialization(), and clang::ASTDeclWriter::VisitFunctionDecl().
|
inline |
True if this declaration is an explicit specialization, explicit instantiation declaration, or explicit instantiation definition.
Definition at line 541 of file DeclTemplate.h.
References getTemplateSpecializationKind(), and clang::isTemplateExplicitInstantiationOrSpecialization().
Referenced by clang::Sema::ActOnStartOfFunctionDef(), and shouldConsiderTemplateVisibility().
|
inline |
Definition at line 534 of file DeclTemplate.h.
References getTemplateSpecializationKind(), and clang::TSK_ExplicitSpecialization.
Referenced by clang::Sema::CheckFunctionTemplateSpecialization(), and clang::PredefinedExpr::ComputeName().
|
inline |
Definition at line 604 of file DeclTemplate.h.
References clang::TemplateArgumentList::asArray(), getFunction(), ID, Profile(), and TemplateArguments.
Referenced by Profile(), and clang::ASTDeclReader::VisitFunctionDecl().
|
inlinestatic |
Definition at line 609 of file DeclTemplate.h.
References ID, and clang::TemplateArg.
|
inline |
Set the (first) point of instantiation of this function template specialization.
Definition at line 564 of file DeclTemplate.h.
References PointOfInstantiation.
|
inline |
Set the template specialization kind.
Definition at line 547 of file DeclTemplate.h.
References clang::TSK_Undeclared.
Referenced by clang::Sema::CheckFunctionTemplateSpecialization().
SourceLocation clang::FunctionTemplateSpecializationInfo::PointOfInstantiation |
The point at which this function template specialization was first instantiated.
Definition at line 494 of file DeclTemplate.h.
Referenced by getPointOfInstantiation(), and setPointOfInstantiation().
TemplateArgumentList* clang::FunctionTemplateSpecializationInfo::TemplateArguments |
The template arguments used to produce the function template specialization from the function template.
Definition at line 486 of file DeclTemplate.h.
Referenced by clang::PredefinedExpr::ComputeName(), clang::RedeclarableTemplateDecl::SpecEntryTraits< FunctionTemplateSpecializationInfo >::getTemplateArgs(), Profile(), clang::ASTDeclWriter::VisitCXXMethodDecl(), and clang::ASTDeclWriter::VisitFunctionDecl().
const ASTTemplateArgumentListInfo* clang::FunctionTemplateSpecializationInfo::TemplateArgumentsAsWritten |
The template arguments as written in the sources, if provided.
FIXME: Normally null; tail-allocate this.
Definition at line 490 of file DeclTemplate.h.
Referenced by clang::ASTDeclWriter::VisitCXXMethodDecl(), and clang::ASTDeclWriter::VisitFunctionDecl().
friend clang::FunctionTemplateSpecializationInfo::TrailingObjects |
Definition at line 515 of file DeclTemplate.h.