class FunctionTemplateSpecializationInfo

Declaration

class FunctionTemplateSpecializationInfo : public Node,
                                           private TrailingObjects { /* full declaration omitted */ };

Description

Provides information about a function template specialization, which is a FunctionDecl that has been explicitly specialization or instantiated from a function template.

Declared at: clang/include/clang/AST/DeclTemplate.h:477

Inherits from: FoldingSetBase::Node, TrailingObjects

Member Variables

private llvm::PointerIntPair<FunctionDecl*, 1, bool> Function
The function template specialization that this structure describes and a flag indicating if the function is a member specialization.
private llvm::PointerIntPair<FunctionTemplateDecl*, 2> Template
The two bits contain the top 4 values of TemplateSpecializationKind.
public const clang::TemplateArgumentList* TemplateArguments
The template arguments used to produce the function template specialization from the function template.
public const clang::ASTTemplateArgumentListInfo* TemplateArgumentsAsWritten
The template arguments as written in the sources, if provided. FIXME: Normally null; tail-allocate this.
public clang::SourceLocation PointOfInstantiation
The point at which this function template specialization was first instantiated.

Method Overview

  • public static clang::FunctionTemplateSpecializationInfo * Create(clang::ASTContext & C, clang::FunctionDecl * FD, clang::FunctionTemplateDecl * Template, clang::TemplateSpecializationKind TSK, const clang::TemplateArgumentList * TemplateArgs, const clang::TemplateArgumentListInfo * TemplateArgsAsWritten, clang::SourceLocation POI, clang::MemberSpecializationInfo * MSInfo)
  • private FunctionTemplateSpecializationInfo(clang::FunctionDecl * FD, clang::FunctionTemplateDecl * Template, clang::TemplateSpecializationKind TSK, const clang::TemplateArgumentList * TemplateArgs, const clang::ASTTemplateArgumentListInfo * TemplateArgsAsWritten, clang::SourceLocation POI, clang::MemberSpecializationInfo * MSInfo)
  • public void Profile(llvm::FoldingSetNodeID & ID)
  • public static void Profile(llvm::FoldingSetNodeID & ID, ArrayRef<clang::TemplateArgument> TemplateArgs, clang::ASTContext & Context)
  • public clang::FunctionDecl * getFunction() const
  • public clang::MemberSpecializationInfo * getMemberSpecializationInfo() const
  • public clang::SourceLocation getPointOfInstantiation() const
  • public clang::FunctionTemplateDecl * getTemplate() const
  • public clang::TemplateSpecializationKind getTemplateSpecializationKind() const
  • public bool isExplicitInstantiationOrSpecialization() const
  • public bool isExplicitSpecialization() const
  • private size_t numTrailingObjects(OverloadToken<clang::MemberSpecializationInfo *>) const
  • public void setPointOfInstantiation(clang::SourceLocation POI)
  • public void setTemplateSpecializationKind(clang::TemplateSpecializationKind TSK)

Inherited from FoldingSetBase::Node:

Methods

static clang::FunctionTemplateSpecializationInfo*
Create(clang::ASTContext& C,
       clang::FunctionDecl* FD,
       clang::FunctionTemplateDecl* Template,
       clang::TemplateSpecializationKind TSK,
       const clang::TemplateArgumentList*
           TemplateArgs,
       const clang::TemplateArgumentListInfo*
           TemplateArgsAsWritten,
       clang::SourceLocation POI,
       clang::MemberSpecializationInfo* MSInfo)

Declared at: clang/include/clang/AST/DeclTemplate.h:526

Parameters

clang::ASTContext& C
clang::FunctionDecl* FD
clang::FunctionTemplateDecl* Template
clang::TemplateSpecializationKind TSK
const clang::TemplateArgumentList* TemplateArgs
const clang::TemplateArgumentListInfo* TemplateArgsAsWritten
clang::SourceLocation POI
clang::MemberSpecializationInfo* MSInfo

FunctionTemplateSpecializationInfo(
    clang::FunctionDecl* FD,
    clang::FunctionTemplateDecl* Template,
    clang::TemplateSpecializationKind TSK,
    const clang::TemplateArgumentList*
        TemplateArgs,
    const clang::ASTTemplateArgumentListInfo*
        TemplateArgsAsWritten,
    clang::SourceLocation POI,
    clang::MemberSpecializationInfo* MSInfo)

Declared at: clang/include/clang/AST/DeclTemplate.h:505

Parameters

clang::FunctionDecl* FD
clang::FunctionTemplateDecl* Template
clang::TemplateSpecializationKind TSK
const clang::TemplateArgumentList* TemplateArgs
const clang::ASTTemplateArgumentListInfo* TemplateArgsAsWritten
clang::SourceLocation POI
clang::MemberSpecializationInfo* MSInfo

void Profile(llvm::FoldingSetNodeID& ID)

Declared at: clang/include/clang/AST/DeclTemplate.h:613

Parameters

llvm::FoldingSetNodeID& ID

static void Profile(
    llvm::FoldingSetNodeID& ID,
    ArrayRef<clang::TemplateArgument>
        TemplateArgs,
    clang::ASTContext& Context)

Declared at: clang/include/clang/AST/DeclTemplate.h:618

Parameters

llvm::FoldingSetNodeID& ID
ArrayRef<clang::TemplateArgument> TemplateArgs
clang::ASTContext& Context

clang::FunctionDecl* getFunction() const

Description

Retrieve the declaration of the function template specialization.

Declared at: clang/include/clang/AST/DeclTemplate.h:533

clang::MemberSpecializationInfo*
getMemberSpecializationInfo() const

Description

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.

Declared at: clang/include/clang/AST/DeclTemplate.h:607

clang::SourceLocation getPointOfInstantiation()
    const

Description

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.

Declared at: clang/include/clang/AST/DeclTemplate.h:567

clang::FunctionTemplateDecl* getTemplate() const

Description

Retrieve the template from which this function was specialized.

Declared at: clang/include/clang/AST/DeclTemplate.h:536

clang::TemplateSpecializationKind
getTemplateSpecializationKind() const

Description

Determine what kind of template specialization this is.

Declared at: clang/include/clang/AST/DeclTemplate.h:539

bool isExplicitInstantiationOrSpecialization()
    const

Description

True if this declaration is an explicit specialization, explicit instantiation declaration, or explicit instantiation definition.

Declared at: clang/include/clang/AST/DeclTemplate.h:550

bool isExplicitSpecialization() const

Declared at: clang/include/clang/AST/DeclTemplate.h:543

size_t numTrailingObjects(
    OverloadToken<
        clang::MemberSpecializationInfo*>) const

Declared at: clang/include/clang/AST/DeclTemplate.h:518

Parameters

OverloadToken<clang::MemberSpecializationInfo*>

void setPointOfInstantiation(
    clang::SourceLocation POI)

Description

Set the (first) point of instantiation of this function template specialization.

Declared at: clang/include/clang/AST/DeclTemplate.h:573

Parameters

clang::SourceLocation POI

void setTemplateSpecializationKind(
    clang::TemplateSpecializationKind TSK)

Description

Set the template specialization kind.

Declared at: clang/include/clang/AST/DeclTemplate.h:556

Parameters

clang::TemplateSpecializationKind TSK