struct Sema::InstantiatingTemplate

Declaration

struct Sema::InstantiatingTemplate { /* full declaration omitted */ };

Description

A stack object to be created when performing template instantiation. Construction of an object of type \c InstantiatingTemplate pushes the current instantiation onto the stack of active instantiations. If the size of this stack exceeds the maximum number of recursive template instantiations, construction produces an error and evaluates true. Destruction of this object will pop the named instantiation off the stack.

Declared at: clang/include/clang/Sema/Sema.h:9210

Member Variables

private clang::Sema& SemaRef
private bool Invalid
private bool AlreadyInstantiating

Method Overview

  • private bool CheckInstantiationDepth(clang::SourceLocation PointOfInstantiation, clang::SourceRange InstantiationRange)
  • public void Clear()
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::Sema::InstantiatingTemplate::ConstraintSubstitution, clang::NamedDecl * Template, sema::TemplateDeductionInfo & DeductionInfo, clang::SourceRange InstantiationRange)
  • private InstantiatingTemplate(const clang::Sema::InstantiatingTemplate &)
  • private InstantiatingTemplate(clang::Sema & SemaRef, CodeSynthesisContext::SynthesisKind Kind, clang::SourceLocation PointOfInstantiation, clang::SourceRange InstantiationRange, clang::Decl * Entity, clang::NamedDecl * Template = nullptr, ArrayRef<clang::TemplateArgument> TemplateArgs = None, sema::TemplateDeductionInfo * DeductionInfo = nullptr)
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, concepts::NestedRequirement * Req, clang::Sema::InstantiatingTemplate::ConstraintsCheck, clang::SourceRange InstantiationRange = clang::SourceRange())
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, concepts::Requirement * Req, sema::TemplateDeductionInfo & DeductionInfo, clang::SourceRange InstantiationRange = clang::SourceRange())
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::Sema::InstantiatingTemplate::ParameterMappingSubstitution, clang::NamedDecl * Template, clang::SourceRange InstantiationRange)
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::Sema::InstantiatingTemplate::ConstraintNormalization, clang::NamedDecl * Template, clang::SourceRange InstantiationRange)
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::Decl * Entity, clang::SourceRange InstantiationRange = clang::SourceRange())
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::Sema::InstantiatingTemplate::ConstraintsCheck, clang::NamedDecl * Template, ArrayRef<clang::TemplateArgument> TemplateArgs, clang::SourceRange InstantiationRange)
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::TemplateDecl * Template, clang::NamedDecl * Param, ArrayRef<clang::TemplateArgument> TemplateArgs, clang::SourceRange InstantiationRange)
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::NamedDecl * Template, clang::TemplateTemplateParmDecl * Param, ArrayRef<clang::TemplateArgument> TemplateArgs, clang::SourceRange InstantiationRange)
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::NamedDecl * Template, clang::NonTypeTemplateParmDecl * Param, ArrayRef<clang::TemplateArgument> TemplateArgs, clang::SourceRange InstantiationRange)
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::ParmVarDecl * Param, ArrayRef<clang::TemplateArgument> TemplateArgs, clang::SourceRange InstantiationRange = clang::SourceRange())
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::VarTemplatePartialSpecializationDecl * PartialSpec, ArrayRef<clang::TemplateArgument> TemplateArgs, sema::TemplateDeductionInfo & DeductionInfo, clang::SourceRange InstantiationRange = clang::SourceRange())
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::ClassTemplatePartialSpecializationDecl * PartialSpec, ArrayRef<clang::TemplateArgument> TemplateArgs, sema::TemplateDeductionInfo & DeductionInfo, clang::SourceRange InstantiationRange = clang::SourceRange())
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::TemplateDecl * Template, ArrayRef<clang::TemplateArgument> TemplateArgs, sema::TemplateDeductionInfo & DeductionInfo, clang::SourceRange InstantiationRange = clang::SourceRange())
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::FunctionTemplateDecl * FunctionTemplate, ArrayRef<clang::TemplateArgument> TemplateArgs, CodeSynthesisContext::SynthesisKind Kind, sema::TemplateDeductionInfo & DeductionInfo, clang::SourceRange InstantiationRange = clang::SourceRange())
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::TemplateParameter Param, clang::TemplateDecl * Template, ArrayRef<clang::TemplateArgument> TemplateArgs, clang::SourceRange InstantiationRange = clang::SourceRange())
  • public InstantiatingTemplate(clang::Sema & SemaRef, clang::SourceLocation PointOfInstantiation, clang::FunctionDecl * Entity, clang::Sema::InstantiatingTemplate::ExceptionSpecification, clang::SourceRange InstantiationRange = clang::SourceRange())
  • public bool isAlreadyInstantiating() const
  • public bool isInvalid() const
  • public ~InstantiatingTemplate()

Methods

bool CheckInstantiationDepth(
    clang::SourceLocation PointOfInstantiation,
    clang::SourceRange InstantiationRange)

Declared at: clang/include/clang/Sema/Sema.h:9359

Parameters

clang::SourceLocation PointOfInstantiation
clang::SourceRange InstantiationRange

void Clear()

Description

Note that we have finished instantiating this template.

Declared at: clang/include/clang/Sema/Sema.h:9343

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::Sema::InstantiatingTemplate::
        ConstraintSubstitution,
    clang::NamedDecl* Template,
    sema::TemplateDeductionInfo& DeductionInfo,
    clang::SourceRange InstantiationRange)

Description

Note that we are checking a constraint expression associated with a template declaration or as part of the satisfaction check of a concept.

Declared at: clang/include/clang/Sema/Sema.h:9311

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::Sema::InstantiatingTemplate:: ConstraintSubstitution
clang::NamedDecl* Template
sema::TemplateDeductionInfo& DeductionInfo
clang::SourceRange InstantiationRange

InstantiatingTemplate(
    const clang::Sema::InstantiatingTemplate&)

Declared at: clang/include/clang/Sema/Sema.h:9369

Parameters

const clang::Sema::InstantiatingTemplate&

InstantiatingTemplate(
    clang::Sema& SemaRef,
    CodeSynthesisContext::SynthesisKind Kind,
    clang::SourceLocation PointOfInstantiation,
    clang::SourceRange InstantiationRange,
    clang::Decl* Entity,
    clang::NamedDecl* Template = nullptr,
    ArrayRef<clang::TemplateArgument>
        TemplateArgs = None,
    sema::TemplateDeductionInfo* DeductionInfo =
        nullptr)

Declared at: clang/include/clang/Sema/Sema.h:9362

Parameters

clang::Sema& SemaRef
CodeSynthesisContext::SynthesisKind Kind
clang::SourceLocation PointOfInstantiation
clang::SourceRange InstantiationRange
clang::Decl* Entity
clang::NamedDecl* Template = nullptr
ArrayRef<clang::TemplateArgument> TemplateArgs = None
sema::TemplateDeductionInfo* DeductionInfo = nullptr

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    concepts::NestedRequirement* Req,
    clang::Sema::InstantiatingTemplate::
        ConstraintsCheck,
    clang::SourceRange InstantiationRange =
        clang::SourceRange())

Description

Note that we are checking the satisfaction of the constraint expression inside of a nested requirement.

Declared at: clang/include/clang/Sema/Sema.h:9338

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
concepts::NestedRequirement* Req
clang::Sema::InstantiatingTemplate:: ConstraintsCheck
clang::SourceRange InstantiationRange = clang::SourceRange()

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    concepts::Requirement* Req,
    sema::TemplateDeductionInfo& DeductionInfo,
    clang::SourceRange InstantiationRange =
        clang::SourceRange())

Description

Note that we are substituting template arguments into a part of a requirement of a requires expression.

Declared at: clang/include/clang/Sema/Sema.h:9331

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
concepts::Requirement* Req
sema::TemplateDeductionInfo& DeductionInfo
clang::SourceRange InstantiationRange = clang::SourceRange()

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::Sema::InstantiatingTemplate::
        ParameterMappingSubstitution,
    clang::NamedDecl* Template,
    clang::SourceRange InstantiationRange)

Description

Note that we are subtituting into the parameter mapping of an atomic constraint during constraint normalization.

Declared at: clang/include/clang/Sema/Sema.h:9325

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::Sema::InstantiatingTemplate:: ParameterMappingSubstitution
clang::NamedDecl* Template
clang::SourceRange InstantiationRange

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::Sema::InstantiatingTemplate::
        ConstraintNormalization,
    clang::NamedDecl* Template,
    clang::SourceRange InstantiationRange)

Description

Note that we are normalizing a constraint expression.

Declared at: clang/include/clang/Sema/Sema.h:9318

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::Sema::InstantiatingTemplate:: ConstraintNormalization
clang::NamedDecl* Template
clang::SourceRange InstantiationRange

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::Decl* Entity,
    clang::SourceRange InstantiationRange =
        clang::SourceRange())

Description

Note that we are instantiating a class template, function template, variable template, alias template, or a member thereof.

Declared at: clang/include/clang/Sema/Sema.h:9214

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::Decl* Entity
clang::SourceRange InstantiationRange = clang::SourceRange()

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::Sema::InstantiatingTemplate::
        ConstraintsCheck,
    clang::NamedDecl* Template,
    ArrayRef<clang::TemplateArgument>
        TemplateArgs,
    clang::SourceRange InstantiationRange)

Description

Note that we are checking the constraints associated with some constrained entity (a concept declaration or a template with associated constraints).

Declared at: clang/include/clang/Sema/Sema.h:9302

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::Sema::InstantiatingTemplate:: ConstraintsCheck
clang::NamedDecl* Template
ArrayRef<clang::TemplateArgument> TemplateArgs
clang::SourceRange InstantiationRange

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::TemplateDecl* Template,
    clang::NamedDecl* Param,
    ArrayRef<clang::TemplateArgument>
        TemplateArgs,
    clang::SourceRange InstantiationRange)

Description

Note that we are checking the default template argument against the template parameter for a given template-id.

Declared at: clang/include/clang/Sema/Sema.h:9292

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::TemplateDecl* Template
clang::NamedDecl* Param
ArrayRef<clang::TemplateArgument> TemplateArgs
clang::SourceRange InstantiationRange

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::NamedDecl* Template,
    clang::TemplateTemplateParmDecl* Param,
    ArrayRef<clang::TemplateArgument>
        TemplateArgs,
    clang::SourceRange InstantiationRange)

Description

Note that we are substituting prior template arguments into a template template parameter.

Declared at: clang/include/clang/Sema/Sema.h:9284

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::NamedDecl* Template
clang::TemplateTemplateParmDecl* Param
ArrayRef<clang::TemplateArgument> TemplateArgs
clang::SourceRange InstantiationRange

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::NamedDecl* Template,
    clang::NonTypeTemplateParmDecl* Param,
    ArrayRef<clang::TemplateArgument>
        TemplateArgs,
    clang::SourceRange InstantiationRange)

Description

Note that we are substituting prior template arguments into a non-type parameter.

Declared at: clang/include/clang/Sema/Sema.h:9276

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::NamedDecl* Template
clang::NonTypeTemplateParmDecl* Param
ArrayRef<clang::TemplateArgument> TemplateArgs
clang::SourceRange InstantiationRange

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::ParmVarDecl* Param,
    ArrayRef<clang::TemplateArgument>
        TemplateArgs,
    clang::SourceRange InstantiationRange =
        clang::SourceRange())

Description

Note that we are instantiating a default argument for a function parameter.

Declared at: clang/include/clang/Sema/Sema.h:9269

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::ParmVarDecl* Param
ArrayRef<clang::TemplateArgument> TemplateArgs
clang::SourceRange InstantiationRange = clang::SourceRange()

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::VarTemplatePartialSpecializationDecl*
        PartialSpec,
    ArrayRef<clang::TemplateArgument>
        TemplateArgs,
    sema::TemplateDeductionInfo& DeductionInfo,
    clang::SourceRange InstantiationRange =
        clang::SourceRange())

Description

Note that we are instantiating as part of template argument deduction for a variable template partial specialization.

Declared at: clang/include/clang/Sema/Sema.h:9261

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::VarTemplatePartialSpecializationDecl* PartialSpec
ArrayRef<clang::TemplateArgument> TemplateArgs
sema::TemplateDeductionInfo& DeductionInfo
clang::SourceRange InstantiationRange = clang::SourceRange()

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::ClassTemplatePartialSpecializationDecl*
        PartialSpec,
    ArrayRef<clang::TemplateArgument>
        TemplateArgs,
    sema::TemplateDeductionInfo& DeductionInfo,
    clang::SourceRange InstantiationRange =
        clang::SourceRange())

Description

Note that we are instantiating as part of template argument deduction for a class template partial specialization.

Declared at: clang/include/clang/Sema/Sema.h:9252

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::ClassTemplatePartialSpecializationDecl* PartialSpec
ArrayRef<clang::TemplateArgument> TemplateArgs
sema::TemplateDeductionInfo& DeductionInfo
clang::SourceRange InstantiationRange = clang::SourceRange()

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::TemplateDecl* Template,
    ArrayRef<clang::TemplateArgument>
        TemplateArgs,
    sema::TemplateDeductionInfo& DeductionInfo,
    clang::SourceRange InstantiationRange =
        clang::SourceRange())

Description

Note that we are instantiating as part of template argument deduction for a class template declaration.

Declared at: clang/include/clang/Sema/Sema.h:9243

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::TemplateDecl* Template
ArrayRef<clang::TemplateArgument> TemplateArgs
sema::TemplateDeductionInfo& DeductionInfo
clang::SourceRange InstantiationRange = clang::SourceRange()

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::FunctionTemplateDecl* FunctionTemplate,
    ArrayRef<clang::TemplateArgument>
        TemplateArgs,
    CodeSynthesisContext::SynthesisKind Kind,
    sema::TemplateDeductionInfo& DeductionInfo,
    clang::SourceRange InstantiationRange =
        clang::SourceRange())

Description

Note that we are substituting either explicitly-specified or deduced template arguments during function template argument deduction.

Declared at: clang/include/clang/Sema/Sema.h:9234

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::FunctionTemplateDecl* FunctionTemplate
ArrayRef<clang::TemplateArgument> TemplateArgs
CodeSynthesisContext::SynthesisKind Kind
sema::TemplateDeductionInfo& DeductionInfo
clang::SourceRange InstantiationRange = clang::SourceRange()

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::TemplateParameter Param,
    clang::TemplateDecl* Template,
    ArrayRef<clang::TemplateArgument>
        TemplateArgs,
    clang::SourceRange InstantiationRange =
        clang::SourceRange())

Description

Note that we are instantiating a default argument in a template-id.

Declared at: clang/include/clang/Sema/Sema.h:9227

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::TemplateParameter Param
clang::TemplateDecl* Template
ArrayRef<clang::TemplateArgument> TemplateArgs
clang::SourceRange InstantiationRange = clang::SourceRange()

InstantiatingTemplate(
    clang::Sema& SemaRef,
    clang::SourceLocation PointOfInstantiation,
    clang::FunctionDecl* Entity,
    clang::Sema::InstantiatingTemplate::
        ExceptionSpecification,
    clang::SourceRange InstantiationRange =
        clang::SourceRange())

Description

Note that we are instantiating an exception specification of a function template.

Declared at: clang/include/clang/Sema/Sema.h:9221

Parameters

clang::Sema& SemaRef
clang::SourceLocation PointOfInstantiation
clang::FunctionDecl* Entity
clang::Sema::InstantiatingTemplate:: ExceptionSpecification
clang::SourceRange InstantiationRange = clang::SourceRange()

bool isAlreadyInstantiating() const

Description

Determine whether we are already instantiating this specialization in some surrounding active instantiation.

Declared at: clang/include/clang/Sema/Sema.h:9353

bool isInvalid() const

Description

Determines whether we have exceeded the maximum recursive template instantiations.

Declared at: clang/include/clang/Sema/Sema.h:9349

~InstantiatingTemplate()

Declared at: clang/include/clang/Sema/Sema.h:9345