clang
3.9.0
|
Declaration of a template function. More...
#include <DeclTemplate.h>
Classes | |
struct | Common |
Data that is common to all of the declarations of a given function template. More... | |
Public Types | |
typedef SpecIterator < FunctionTemplateSpecializationInfo > | spec_iterator |
typedef llvm::iterator_range < spec_iterator > | spec_range |
![]() | |
typedef redeclarable_base::redecl_range | redecl_range |
typedef redeclarable_base::redecl_iterator | redecl_iterator |
![]() | |
enum | ExplicitVisibilityKind { VisibilityForType, VisibilityForValue } |
Kinds of explicit visibility. More... | |
![]() | |
typedef llvm::iterator_range < redecl_iterator > | redecl_range |
Public Member Functions | |
void | LoadLazySpecializations () const |
Load any lazily-loaded specializations from the external source. More... | |
FunctionDecl * | getTemplatedDecl () const |
Get the underlying function declaration of the template. More... | |
bool | isThisDeclarationADefinition () const |
Returns whether this template declaration defines the primary pattern. More... | |
FunctionDecl * | findSpecialization (ArrayRef< TemplateArgument > Args, void *&InsertPos) |
Return the specialization with the provided arguments if it exists, otherwise return the insertion point. More... | |
FunctionTemplateDecl * | getCanonicalDecl () override |
const FunctionTemplateDecl * | getCanonicalDecl () const |
FunctionTemplateDecl * | getPreviousDecl () |
Retrieve the previous declaration of this function template, or NULL if no such declaration exists. More... | |
const FunctionTemplateDecl * | getPreviousDecl () const |
Retrieve the previous declaration of this function template, or NULL if no such declaration exists. More... | |
FunctionTemplateDecl * | getMostRecentDecl () |
const FunctionTemplateDecl * | getMostRecentDecl () const |
FunctionTemplateDecl * | getInstantiatedFromMemberTemplate () const |
spec_range | specializations () const |
spec_iterator | spec_begin () const |
spec_iterator | spec_end () const |
ArrayRef< TemplateArgument > | getInjectedTemplateArgs () |
Retrieve the "injected" template arguments that correspond to the template parameters of this function template. More... | |
![]() | |
RedeclarableTemplateDecl * | getCanonicalDecl () override |
Retrieves the canonical declaration of this template. More... | |
const RedeclarableTemplateDecl * | getCanonicalDecl () const |
bool | isMemberSpecialization () const |
Determines whether this template was a specialization of a member template. More... | |
void | setMemberSpecialization () |
Note that this member template is a specialization. More... | |
RedeclarableTemplateDecl * | getInstantiatedFromMemberTemplate () const |
Retrieve the member template from which this template was instantiated, or NULL if this template was not instantiated from a member template. More... | |
void | setInstantiatedFromMemberTemplate (RedeclarableTemplateDecl *TD) |
![]() | |
TemplateParameterList * | getTemplateParameters () const |
Get the list of template parameters. More... | |
NamedDecl * | getTemplatedDecl () const |
Get the underlying, templated declaration. More... | |
SourceRange | getSourceRange () const override LLVM_READONLY |
bool | isConcept () const |
Whether this is a (C++ Concepts TS) function or variable concept. More... | |
void | setConcept () |
void | init (NamedDecl *templatedDecl, TemplateParameterList *templateParams) |
Initialize the underlying templated declaration and template parameters. More... | |
![]() | |
IdentifierInfo * | getIdentifier () const |
getIdentifier - Get the identifier that names this declaration, if there is one. More... | |
StringRef | getName () const |
getName - Get the name of identifier for this declaration as a StringRef. More... | |
std::string | getNameAsString () const |
getNameAsString - Get a human-readable name for the declaration, even if it is one of the special kinds of names (C++ constructor, Objective-C selector, etc). More... | |
void | printName (raw_ostream &os) const |
DeclarationName | getDeclName () const |
getDeclName - Get the actual, stored name of the declaration, which may be a special name. More... | |
void | setDeclName (DeclarationName N) |
Set the name of this declaration. More... | |
void | printQualifiedName (raw_ostream &OS) const |
printQualifiedName - Returns human-readable qualified name for declaration, like A::B::i, for i being member of namespace A::B. More... | |
void | printQualifiedName (raw_ostream &OS, const PrintingPolicy &Policy) const |
std::string | getQualifiedNameAsString () const |
virtual void | getNameForDiagnostic (raw_ostream &OS, const PrintingPolicy &Policy, bool Qualified) const |
getNameForDiagnostic - Appends a human-readable name for this declaration into the given stream. More... | |
bool | declarationReplaces (NamedDecl *OldD, bool IsKnownNewer=true) const |
Determine whether this declaration, if known to be well-formed within its context, will replace the declaration OldD if introduced into scope. More... | |
bool | hasLinkage () const |
Determine whether this declaration has linkage. More... | |
bool | isHidden () const |
Determine whether this declaration is hidden from name lookup. More... | |
void | setHidden (bool Hide) |
Set whether this declaration is hidden from name lookup. More... | |
bool | isCXXClassMember () const |
Determine whether this declaration is a C++ class member. More... | |
bool | isCXXInstanceMember () const |
Determine whether the given declaration is an instance member of a C++ class. More... | |
Linkage | getLinkageInternal () const |
Determine what kind of linkage this entity has. More... | |
Linkage | getFormalLinkage () const |
Get the linkage from a semantic point of view. More... | |
bool | hasExternalFormalLinkage () const |
True if this decl has external linkage. More... | |
bool | isExternallyVisible () const |
Visibility | getVisibility () const |
Determines the visibility of this entity. More... | |
LinkageInfo | getLinkageAndVisibility () const |
Determines the linkage and visibility of this entity. More... | |
Optional< Visibility > | getExplicitVisibility (ExplicitVisibilityKind kind) const |
If visibility was explicitly specified for this declaration, return that visibility. More... | |
bool | isLinkageValid () const |
True if the computed linkage is valid. More... | |
bool | hasLinkageBeenComputed () const |
True if something has required us to compute the linkage of this declaration. More... | |
NamedDecl * | getUnderlyingDecl () |
Looks through UsingDecls and ObjCCompatibleAliasDecls for the underlying named decl. More... | |
const NamedDecl * | getUnderlyingDecl () const |
NamedDecl * | getMostRecentDecl () |
const NamedDecl * | getMostRecentDecl () const |
ObjCStringFormatFamily | getObjCFStringFormattingFamily () const |
![]() | |
Redeclarable (const ASTContext &Ctx) | |
RedeclarableTemplateDecl * | getPreviousDecl () |
Return the previous declaration of this declaration or NULL if this is the first declaration. More... | |
const RedeclarableTemplateDecl * | getPreviousDecl () const |
RedeclarableTemplateDecl * | getFirstDecl () |
Return the first declaration of this declaration or itself if this is the only declaration. More... | |
const RedeclarableTemplateDecl * | getFirstDecl () const |
Return the first declaration of this declaration or itself if this is the only declaration. More... | |
bool | isFirstDecl () const |
True if this is the first declaration in its redeclaration chain. More... | |
RedeclarableTemplateDecl * | getMostRecentDecl () |
Returns the most recent (re)declaration of this declaration. More... | |
const RedeclarableTemplateDecl * | getMostRecentDecl () const |
Returns the most recent (re)declaration of this declaration. More... | |
void | setPreviousDecl (RedeclarableTemplateDecl *PrevDecl) |
Set the previous declaration. More... | |
redecl_range | redecls () const |
Returns an iterator range for all the redeclarations of the same decl. More... | |
redecl_iterator | redecls_begin () const |
redecl_iterator | redecls_end () const |
Static Public Member Functions | |
static FunctionTemplateDecl * | Create (ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name, TemplateParameterList *Params, NamedDecl *Decl) |
Create a function template node. More... | |
static FunctionTemplateDecl * | CreateDeserialized (ASTContext &C, unsigned ID) |
Create an empty function template node. More... | |
static bool | classof (const Decl *D) |
static bool | classofKind (Kind K) |
![]() | |
static bool | classof (const Decl *D) |
static bool | classofKind (Kind K) |
![]() | |
static bool | classof (const Decl *D) |
static bool | classofKind (Kind K) |
![]() | |
static bool | classof (const Decl *D) |
static bool | classofKind (Kind K) |
Protected Member Functions | |
FunctionTemplateDecl (ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name, TemplateParameterList *Params, NamedDecl *Decl) | |
CommonBase * | newCommon (ASTContext &C) const override |
Common * | getCommonPtr () const |
llvm::FoldingSetVector < FunctionTemplateSpecializationInfo > & | getSpecializations () const |
Retrieve the set of function template specializations of this function template. More... | |
void | addSpecialization (FunctionTemplateSpecializationInfo *Info, void *InsertPos) |
Add a specialization of this function template. More... | |
![]() | |
template<class EntryType > | |
SpecEntryTraits< EntryType > ::DeclType * | findSpecializationImpl (llvm::FoldingSetVector< EntryType > &Specs, ArrayRef< TemplateArgument > Args, void *&InsertPos) |
template<class Derived , class EntryType > | |
void | addSpecializationImpl (llvm::FoldingSetVector< EntryType > &Specs, EntryType *Entry, void *InsertPos) |
CommonBase * | getCommonPtr () const |
Retrieves the "common" pointer shared by all (re-)declarations of the same template. More... | |
RedeclarableTemplateDecl (Kind DK, ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name, TemplateParameterList *Params, NamedDecl *Decl) | |
![]() | |
TemplateDecl (Kind DK, DeclContext *DC, SourceLocation L, DeclarationName Name) | |
TemplateDecl (Kind DK, DeclContext *DC, SourceLocation L, DeclarationName Name, TemplateParameterList *Params) | |
TemplateDecl (Kind DK, DeclContext *DC, SourceLocation L, DeclarationName Name, TemplateParameterList *Params, NamedDecl *Decl) | |
![]() | |
NamedDecl (Kind DK, DeclContext *DC, SourceLocation L, DeclarationName N) | |
![]() | |
RedeclarableTemplateDecl * | getNextRedeclaration () const |
Friends | |
class | FunctionDecl |
class | ASTDeclReader |
class | ASTDeclWriter |
Additional Inherited Members | |
![]() | |
template<typename EntryType > | |
static SpecIterator< EntryType > | makeSpecIterator (llvm::FoldingSetVector< EntryType > &Specs, bool isEnd) |
![]() | |
static DeclLink | PreviousDeclLink (RedeclarableTemplateDecl *D) |
static DeclLink | LatestDeclLink (const ASTContext &Ctx) |
![]() | |
CommonBase * | Common |
Pointer to the common data shared by all declarations of this template. More... | |
![]() | |
llvm::PointerIntPair < NamedDecl *, 1, bool > | TemplatedDecl |
The named declaration from which this template was instantiated. More... | |
TemplateParameterList * | TemplateParams |
![]() | |
DeclLink | RedeclLink |
Points to the next redeclaration in the chain. More... | |
RedeclarableTemplateDecl * | First |
Declaration of a template function.
Definition at line 838 of file DeclTemplate.h.
Definition at line 951 of file DeclTemplate.h.
typedef llvm::iterator_range<spec_iterator> clang::FunctionTemplateDecl::spec_range |
Definition at line 952 of file DeclTemplate.h.
|
inlineprotected |
Definition at line 868 of file DeclTemplate.h.
Referenced by Create(), and CreateDeserialized().
|
protected |
Add a specialization of this function template.
InsertPos | Insert position in the FoldingSetVector, must have been retrieved by an earlier call to findSpecialization(). |
Definition at line 296 of file DeclTemplate.cpp.
References getSpecializations().
Definition at line 985 of file DeclTemplate.h.
Definition at line 986 of file DeclTemplate.h.
|
static |
Create a function template node.
Definition at line 246 of file DeclTemplate.cpp.
References AdoptTemplateParameterList(), and FunctionTemplateDecl().
Referenced by clang::Sema::ActOnFunctionDeclarator(), addFunctionPointerConversion(), clang::Sema::startLambdaDefinition(), clang::TemplateDeclInstantiator::VisitCXXMethodDecl(), and clang::TemplateDeclInstantiator::VisitFunctionDecl().
|
static |
Create an empty function template node.
Definition at line 256 of file DeclTemplate.cpp.
References FunctionTemplateDecl(), and ID.
FunctionDecl * FunctionTemplateDecl::findSpecialization | ( | ArrayRef< TemplateArgument > | Args, |
void *& | InsertPos | ||
) |
Return the specialization with the provided arguments if it exists, otherwise return the insertion point.
Definition at line 291 of file DeclTemplate.cpp.
References clang::RedeclarableTemplateDecl::findSpecializationImpl(), and getSpecializations().
Referenced by clang::Sema::DefineImplicitLambdaToFunctionPointerConversion(), clang::CodeGen::CodeGenFunction::EmitLambdaDelegatingInvokeBody(), clang::TemplateDeclInstantiator::VisitCXXMethodDecl(), and clang::TemplateDeclInstantiator::VisitFunctionDecl().
|
inlineoverride |
Definition at line 914 of file DeclTemplate.h.
References clang::RedeclarableTemplateDecl::getCanonicalDecl().
Referenced by clang::Sema::FinishTemplateArgumentDeduction(), isInstantiationOf(), MatchesFriend(), and clang::ASTDeclWriter::VisitFunctionDecl().
|
inline |
Definition at line 918 of file DeclTemplate.h.
References clang::RedeclarableTemplateDecl::getCanonicalDecl().
|
inlineprotected |
Definition at line 876 of file DeclTemplate.h.
References clang::RedeclarableTemplateDecl::getCommonPtr().
Referenced by getInjectedTemplateArgs(), getSpecializations(), LoadLazySpecializations(), clang::ASTDeclReader::VisitFunctionDecl(), and clang::ASTDeclReader::VisitFunctionTemplateDecl().
ArrayRef< TemplateArgument > FunctionTemplateDecl::getInjectedTemplateArgs | ( | ) |
Retrieve the "injected" template arguments that correspond to the template parameters of this function template.
Although the C++ standard has no notion of the "injected" template arguments for a function template, the notion is convenient when we need to perform substitutions inside the definition of a function template.
Definition at line 302 of file DeclTemplate.cpp.
References GenerateInjectedTemplateArgs(), getCommonPtr(), clang::TemplateDecl::getTemplateParameters(), clang::FunctionTemplateDecl::Common::InjectedArgs, and clang::TemplateParameterList::size().
|
inline |
Definition at line 946 of file DeclTemplate.h.
References clang::RedeclarableTemplateDecl::getInstantiatedFromMemberTemplate().
Referenced by clang::Sema::CheckFunctionDeclaration(), and isInstantiationOf().
|
inline |
Definition at line 937 of file DeclTemplate.h.
Referenced by LoadLazySpecializations().
|
inline |
Definition at line 942 of file DeclTemplate.h.
|
inline |
Retrieve the previous declaration of this function template, or NULL if no such declaration exists.
Definition at line 925 of file DeclTemplate.h.
Referenced by clang::Sema::ActOnFunctionDeclarator().
|
inline |
Retrieve the previous declaration of this function template, or NULL if no such declaration exists.
Definition at line 932 of file DeclTemplate.h.
|
protected |
Retrieve the set of function template specializations of this function template.
Definition at line 285 of file DeclTemplate.cpp.
References getCommonPtr(), LoadLazySpecializations(), and clang::FunctionTemplateDecl::Common::Specializations.
Referenced by addSpecialization(), and findSpecialization().
|
inline |
Get the underlying function declaration of the template.
Definition at line 899 of file DeclTemplate.h.
Referenced by clang::Sema::ActOnExplicitInstantiation(), clang::Sema::ActOnFunctionDeclarator(), clang::Sema::AddFunctionCandidates(), clang::Sema::AddMethodTemplateCandidate(), clang::Sema::AddTemplateConversionCandidate(), clang::Sema::AddTemplateOverloadCandidate(), clang::Sema::CheckFunctionDeclaration(), collectViableConversionCandidates(), clang::Sema::DeduceTemplateArguments(), clang::comments::DeclInfo::fill(), FindConversionForRefInit(), clang::Sema::FinishTemplateArgumentDeduction(), clang::getConstructorInfo(), clang::FunctionDecl::getTemplateInstantiationPattern(), isAtLeastAsSpecializedAs(), clang::CXXMethodDecl::isLambdaStaticInvoker(), IsUserDefinedConversion(), isVariadicFunctionTemplate(), LookupDirect(), clang::Sema::MarkDeducedTemplateParameters(), MightInstantiateTo(), clang::Sema::PerformContextualImplicitConversion(), clang::Sema::ResolveSingleFunctionTemplateSpecialization(), clang::Sema::SubstituteExplicitTemplateArguments(), TryRefInitWithConversionFunction(), and TryUserDefinedConversion().
|
inline |
Returns whether this template declaration defines the primary pattern.
Definition at line 905 of file DeclTemplate.h.
void FunctionTemplateDecl::LoadLazySpecializations | ( | ) | const |
Load any lazily-loaded specializations from the external source.
Definition at line 269 of file DeclTemplate.cpp.
References Context, getCommonPtr(), clang::ExternalASTSource::GetExternalDecl(), clang::ASTContext::getExternalSource(), getMostRecentDecl(), I, and clang::FunctionTemplateDecl::Common::LazySpecializations.
Referenced by getSpecializations().
|
overrideprotectedvirtual |
Implements clang::RedeclarableTemplateDecl.
Definition at line 263 of file DeclTemplate.cpp.
References clang::ASTContext::AddDeallocation().
|
inline |
Definition at line 957 of file DeclTemplate.h.
|
inline |
Definition at line 961 of file DeclTemplate.h.
|
inline |
Definition at line 954 of file DeclTemplate.h.
|
friend |
Definition at line 988 of file DeclTemplate.h.
|
friend |
Definition at line 989 of file DeclTemplate.h.
|
friend |
Definition at line 880 of file DeclTemplate.h.