clang: clang::MultiLevelTemplateArgumentList Class Reference (original) (raw)

Data structure that captures multiple levels of template argument lists for use in template instantiation. More...

#include "[clang/Sema/Template.h](Template%5F8h%5Fsource.html)"

Public Member Functions
MultiLevelTemplateArgumentList ()=default
Construct an empty set of template argument lists.
MultiLevelTemplateArgumentList (Decl *D, ArgList Args, bool Final)
Construct a single-level template argument list.
void setKind (TemplateSubstitutionKind K)
TemplateSubstitutionKind getKind () const
Determine the kind of template substitution being performed.
bool isRewrite () const
Determine whether we are rewriting template parameters rather than substituting for them.
unsigned getNumLevels () const
Determine the number of levels in this template argument list.
unsigned getNumSubstitutedLevels () const
Determine the number of substituted levels in this template argument list.
unsigned getNumSubsitutedArgs (unsigned Depth) const
unsigned getNumRetainedOuterLevels () const
unsigned getNewDepth (unsigned OldDepth) const
Determine how many of the OldDepth outermost template parameter lists would be removed by substituting these arguments.
const TemplateArgument & operator() (unsigned Depth, unsigned Index) const
Retrieve the template argument at a given depth and index.
std::pair< Decl *, bool > getAssociatedDecl (unsigned Depth) const
A template-like entity which owns the whole pattern being substituted.
bool hasTemplateArgument (unsigned Depth, unsigned Index) const
Determine whether there is a non-NULL template argument at the given depth and index.
bool isAnyArgInstantiationDependent () const
void setArgument (unsigned Depth, unsigned Index, TemplateArgument Arg)
Clear out a specific template argument.
void addOuterTemplateArguments (Decl *AssociatedDecl, ArgList Args, bool Final)
Add a new outmost level to the multi-level template argument list.
void addOuterTemplateArguments (ArgList Args)
void addOuterTemplateArguments (std::nullopt_t)
void replaceInnermostTemplateArguments (Decl *AssociatedDecl, ArgList Args, bool Final=false)
Replaces the current 'innermost' level with the provided argument list.
void replaceOutermostTemplateArguments (Decl *AssociatedDecl, ArgList Args)
void addOuterRetainedLevel ()
Add an outermost level that we are not substituting.
void addOuterRetainedLevels (unsigned Num)
const ArgList & getInnermost () const
Retrieve the innermost template argument list.
const ArgList & getOutermost () const
Retrieve the outermost template argument list.
ArgListsIterator begin ()
ConstArgListsIterator begin () const
ArgListsIterator end ()
ConstArgListsIterator end () const
LLVM_DUMP_METHOD void dump () const

Data structure that captures multiple levels of template argument lists for use in template instantiation.

Multiple levels of template arguments occur when instantiating the definitions of member templates. For example:

template

struct X {

template

struct Y {

void f();

};

};

When instantiating X::Y<17>::f, the multi-level template argument list will contain a template argument list (int) at depth 0 and a template argument list (17) at depth 1.

Definition at line 76 of file Template.h.

clang::MultiLevelTemplateArgumentList::MultiLevelTemplateArgumentList ( ) default

Construct an empty set of template argument lists.

MultiLevelTemplateArgumentList() [2/2]

clang::MultiLevelTemplateArgumentList::MultiLevelTemplateArgumentList ( Decl * D, ArgList Args, bool Final ) inline

addOuterRetainedLevel()

void clang::MultiLevelTemplateArgumentList::addOuterRetainedLevel ( ) inline

Add an outermost level that we are not substituting.

We have no arguments at this level, and do not remove it from the depth of inner template parameters that we instantiate.

Definition at line 261 of file Template.h.

addOuterRetainedLevels()

void clang::MultiLevelTemplateArgumentList::addOuterRetainedLevels ( unsigned Num) inline

addOuterTemplateArguments() [1/3]

void clang::MultiLevelTemplateArgumentList::addOuterTemplateArguments ( ArgList Args) inline

addOuterTemplateArguments() [2/3]

void clang::MultiLevelTemplateArgumentList::addOuterTemplateArguments ( Decl * AssociatedDecl, ArgList Args, bool Final ) inline

addOuterTemplateArguments() [3/3]

void clang::MultiLevelTemplateArgumentList::addOuterTemplateArguments ( std::nullopt_t ) inline

begin() [1/2]

ArgListsIterator clang::MultiLevelTemplateArgumentList::begin ( ) inline

begin() [2/2]

ConstArgListsIterator clang::MultiLevelTemplateArgumentList::begin ( ) const inline

dump()

LLVM_DUMP_METHOD void clang::MultiLevelTemplateArgumentList::dump ( ) const inline

end() [1/2]

ArgListsIterator clang::MultiLevelTemplateArgumentList::end ( ) inline

end() [2/2]

ConstArgListsIterator clang::MultiLevelTemplateArgumentList::end ( ) const inline

getAssociatedDecl()

std::pair< Decl *, bool > clang::MultiLevelTemplateArgumentList::getAssociatedDecl ( unsigned Depth) const inline

A template-like entity which owns the whole pattern being substituted.

This will usually own a set of template parameters, or in some cases might even be a template parameter itself.

Definition at line 164 of file Template.h.

References getNumLevels().

getInnermost()

const ArgList & clang::MultiLevelTemplateArgumentList::getInnermost ( ) const inline

getKind()

getNewDepth()

unsigned clang::MultiLevelTemplateArgumentList::getNewDepth ( unsigned OldDepth) const inline

Determine how many of the OldDepth outermost template parameter lists would be removed by substituting these arguments.

Definition at line 145 of file Template.h.

References getNumLevels().

getNumLevels()

unsigned clang::MultiLevelTemplateArgumentList::getNumLevels ( ) const inline

Determine the number of levels in this template argument list.

Definition at line 123 of file Template.h.

Referenced by CalculateTemplateDepthForConstraints(), CheckConstraintSatisfaction(), clang::Sema::CheckParameterPacksForExpansion(), dump(), getAssociatedDecl(), getNewDepth(), clang::Sema::getNumArgumentsInExpansionFromUnexpanded(), getNumSubsitutedArgs(), hasTemplateArgument(), operator()(), and setArgument().

getNumRetainedOuterLevels()

unsigned clang::MultiLevelTemplateArgumentList::getNumRetainedOuterLevels ( ) const inline

getNumSubsitutedArgs()

unsigned clang::MultiLevelTemplateArgumentList::getNumSubsitutedArgs ( unsigned Depth) const inline

getNumSubstitutedLevels()

unsigned clang::MultiLevelTemplateArgumentList::getNumSubstitutedLevels ( ) const inline

getOutermost()

const ArgList & clang::MultiLevelTemplateArgumentList::getOutermost ( ) const inline

Retrieve the outermost template argument list.

Definition at line 273 of file Template.h.

hasTemplateArgument()

bool clang::MultiLevelTemplateArgumentList::hasTemplateArgument ( unsigned Depth, unsigned Index ) const inline

isAnyArgInstantiationDependent()

bool clang::MultiLevelTemplateArgumentList::isAnyArgInstantiationDependent ( ) const inline

isRewrite()

bool clang::MultiLevelTemplateArgumentList::isRewrite ( ) const inline

Determine whether we are rewriting template parameters rather than substituting for them.

If so, we should not leave references to the original template parameters behind.

Definition at line 117 of file Template.h.

References clang::Rewrite.

operator()()

replaceInnermostTemplateArguments()

void clang::MultiLevelTemplateArgumentList::replaceInnermostTemplateArguments ( Decl * AssociatedDecl, ArgList Args, bool Final = false ) inline

Replaces the current 'innermost' level with the provided argument list.

This is useful for type deduction cases where we need to get the entire list from the AST, but then add the deduced innermost list.

Definition at line 237 of file Template.h.

Referenced by CheckDeducedArgumentConstraints().

replaceOutermostTemplateArguments()

void clang::MultiLevelTemplateArgumentList::replaceOutermostTemplateArguments ( Decl * AssociatedDecl, ArgList Args ) inline

setArgument()

setKind()


The documentation for this class was generated from the following file: