clang 20.0.0git
Public Types | Public Member Functions | Public Attributes | List of all members
clang::sema::TemplateDeductionInfo Class Reference

Provides information about an attempted template argument deduction, whose success or failure was described by a TemplateDeductionResult value. More...

#include "clang/Sema/TemplateDeduction.h"

Public Types

enum  ForBaseTag { ForBase }
 
using diag_iterator = SmallVectorImpl< PartialDiagnosticAt >::const_iterator
 Iterator over the set of suppressed diagnostics.
 

Public Member Functions

 TemplateDeductionInfo (SourceLocation Loc, unsigned DeducedDepth=0)
 
 TemplateDeductionInfo (const TemplateDeductionInfo &)=delete
 
TemplateDeductionInfooperator= (const TemplateDeductionInfo &)=delete
 
 TemplateDeductionInfo (ForBaseTag, const TemplateDeductionInfo &Info)
 Create temporary template deduction info for speculatively deducing against a base class of an argument's type.
 
SourceLocation getLocation () const
 Returns the location at which template argument is occurring.
 
unsigned getDeducedDepth () const
 The depth of template parameters for which deduction is being performed.
 
unsigned getNumExplicitArgs () const
 Get the number of explicitly-specified arguments.
 
TemplateArgumentListtakeSugared ()
 Take ownership of the deduced template argument lists.
 
TemplateArgumentListtakeCanonical ()
 
void takeSFINAEDiagnostic (PartialDiagnosticAt &PD)
 Take ownership of the SFINAE diagnostic.
 
void clearSFINAEDiagnostic ()
 Discard any SFINAE diagnostics.
 
const PartialDiagnosticAtpeekSFINAEDiagnostic () const
 Peek at the SFINAE diagnostic.
 
void setExplicitArgs (TemplateArgumentList *NewDeducedSugared, TemplateArgumentList *NewDeducedCanonical)
 Provide an initial template argument list that contains the explicitly-specified arguments.
 
void reset (TemplateArgumentList *NewDeducedSugared, TemplateArgumentList *NewDeducedCanonical)
 Provide a new template argument list that contains the results of template argument deduction.
 
bool hasSFINAEDiagnostic () const
 Is a SFINAE diagnostic available?
 
void addSFINAEDiagnostic (SourceLocation Loc, PartialDiagnostic PD)
 Set the diagnostic which caused the SFINAE failure.
 
void addSuppressedDiagnostic (SourceLocation Loc, PartialDiagnostic PD)
 Add a new diagnostic to the set of diagnostics.
 
diag_iterator diag_begin () const
 Returns an iterator at the beginning of the sequence of suppressed diagnostics.
 
diag_iterator diag_end () const
 Returns an iterator at the end of the sequence of suppressed diagnostics.
 

Public Attributes

TemplateParameter Param
 The template parameter to which a template argument deduction failure refers.
 
TemplateArgument FirstArg
 The first template argument to which the template argument deduction failure refers.
 
TemplateArgument SecondArg
 The second template argument to which the template argument deduction failure refers.
 
unsigned CallArgIndex = 0
 The index of the function argument that caused a deduction failure.
 
bool AggregateDeductionCandidateHasMismatchedArity = false
 
SmallVector< DeducedPack *, 8 > PendingDeducedPacks
 Information on packs that we're currently expanding.
 
ConstraintSatisfaction AssociatedConstraintsSatisfaction
 The constraint satisfaction details resulting from the associated constraints satisfaction tests.
 

Detailed Description

Provides information about an attempted template argument deduction, whose success or failure was described by a TemplateDeductionResult value.

Definition at line 43 of file TemplateDeduction.h.

Member Typedef Documentation

◆ diag_iterator

Iterator over the set of suppressed diagnostics.

Definition at line 169 of file TemplateDeduction.h.

Member Enumeration Documentation

◆ ForBaseTag

Enumerator
ForBase 

Definition at line 71 of file TemplateDeduction.h.

Constructor & Destructor Documentation

◆ TemplateDeductionInfo() [1/3]

clang::sema::TemplateDeductionInfo::TemplateDeductionInfo ( SourceLocation  Loc,
unsigned  DeducedDepth = 0 
)
inline

Definition at line 66 of file TemplateDeduction.h.

References Loc.

◆ TemplateDeductionInfo() [2/3]

clang::sema::TemplateDeductionInfo::TemplateDeductionInfo ( const TemplateDeductionInfo )
delete

◆ TemplateDeductionInfo() [3/3]

clang::sema::TemplateDeductionInfo::TemplateDeductionInfo ( ForBaseTag  ,
const TemplateDeductionInfo Info 
)
inline

Create temporary template deduction info for speculatively deducing against a base class of an argument's type.

Definition at line 74 of file TemplateDeduction.h.

References Loc.

Member Function Documentation

◆ addSFINAEDiagnostic()

void clang::sema::TemplateDeductionInfo::addSFINAEDiagnostic ( SourceLocation  Loc,
PartialDiagnostic  PD 
)
inline

Set the diagnostic which caused the SFINAE failure.

Definition at line 151 of file TemplateDeduction.h.

References Loc.

◆ addSuppressedDiagnostic()

void clang::sema::TemplateDeductionInfo::addSuppressedDiagnostic ( SourceLocation  Loc,
PartialDiagnostic  PD 
)
inline

Add a new diagnostic to the set of diagnostics.

Definition at line 161 of file TemplateDeduction.h.

References Loc.

◆ clearSFINAEDiagnostic()

void clang::sema::TemplateDeductionInfo::clearSFINAEDiagnostic ( )
inline

Discard any SFINAE diagnostics.

Definition at line 116 of file TemplateDeduction.h.

Referenced by clang::Sema::isMoreSpecializedThanPrimary(), and takeSFINAEDiagnostic().

◆ diag_begin()

diag_iterator clang::sema::TemplateDeductionInfo::diag_begin ( ) const
inline

Returns an iterator at the beginning of the sequence of suppressed diagnostics.

Definition at line 173 of file TemplateDeduction.h.

Referenced by clang::Sema::FinishTemplateArgumentDeduction().

◆ diag_end()

diag_iterator clang::sema::TemplateDeductionInfo::diag_end ( ) const
inline

Returns an iterator at the end of the sequence of suppressed diagnostics.

Definition at line 177 of file TemplateDeduction.h.

Referenced by clang::Sema::FinishTemplateArgumentDeduction().

◆ getDeducedDepth()

unsigned clang::sema::TemplateDeductionInfo::getDeducedDepth ( ) const
inline

The depth of template parameters for which deduction is being performed.

Definition at line 86 of file TemplateDeduction.h.

Referenced by clang::Sema::DeduceAutoType(), DeduceNonTypeTemplateArgument(), DeduceTemplateArguments(), DeduceTemplateArgumentsByTypeMatch(), and getDeducedParameterFromExpr().

◆ getLocation()

SourceLocation clang::sema::TemplateDeductionInfo::getLocation ( ) const
inline

◆ getNumExplicitArgs()

unsigned clang::sema::TemplateDeductionInfo::getNumExplicitArgs ( ) const
inline

Get the number of explicitly-specified arguments.

Definition at line 91 of file TemplateDeduction.h.

◆ hasSFINAEDiagnostic()

bool clang::sema::TemplateDeductionInfo::hasSFINAEDiagnostic ( ) const
inline

Is a SFINAE diagnostic available?

Definition at line 146 of file TemplateDeduction.h.

Referenced by checkMoreSpecializedThanPrimary(), createSubstDiag(), and clang::MakeDeductionFailureInfo().

◆ operator=()

TemplateDeductionInfo & clang::sema::TemplateDeductionInfo::operator= ( const TemplateDeductionInfo )
delete

◆ peekSFINAEDiagnostic()

const PartialDiagnosticAt & clang::sema::TemplateDeductionInfo::peekSFINAEDiagnostic ( ) const
inline

Peek at the SFINAE diagnostic.

Definition at line 122 of file TemplateDeduction.h.

◆ reset()

void clang::sema::TemplateDeductionInfo::reset ( TemplateArgumentList NewDeducedSugared,
TemplateArgumentList NewDeducedCanonical 
)
inline

Provide a new template argument list that contains the results of template argument deduction.

Definition at line 139 of file TemplateDeduction.h.

Referenced by CheckDeducedArgumentConstraints(), ConvertDeducedTemplateArguments(), clang::Sema::FinishTemplateArgumentDeduction(), and FinishTemplateArgumentDeduction().

◆ setExplicitArgs()

void clang::sema::TemplateDeductionInfo::setExplicitArgs ( TemplateArgumentList NewDeducedSugared,
TemplateArgumentList NewDeducedCanonical 
)
inline

Provide an initial template argument list that contains the explicitly-specified arguments.

Definition at line 129 of file TemplateDeduction.h.

References clang::TemplateArgumentList::size().

Referenced by clang::Sema::SubstituteExplicitTemplateArguments().

◆ takeCanonical()

TemplateArgumentList * clang::sema::TemplateDeductionInfo::takeCanonical ( )
inline

◆ takeSFINAEDiagnostic()

void clang::sema::TemplateDeductionInfo::takeSFINAEDiagnostic ( PartialDiagnosticAt PD)
inline

Take ownership of the SFINAE diagnostic.

Definition at line 108 of file TemplateDeduction.h.

References clearSFINAEDiagnostic().

Referenced by calculateConstraintSatisfaction(), checkMoreSpecializedThanPrimary(), createSubstDiag(), and clang::MakeDeductionFailureInfo().

◆ takeSugared()

TemplateArgumentList * clang::sema::TemplateDeductionInfo::takeSugared ( )
inline

Take ownership of the deduced template argument lists.

Definition at line 96 of file TemplateDeduction.h.

References clang::Result.

Referenced by clang::Sema::CheckVarTemplateId(), clang::Sema::FinishTemplateArgumentDeduction(), and clang::MakeDeductionFailureInfo().

Member Data Documentation

◆ AggregateDeductionCandidateHasMismatchedArity

bool clang::sema::TemplateDeductionInfo::AggregateDeductionCandidateHasMismatchedArity = false

Definition at line 243 of file TemplateDeduction.h.

Referenced by clang::Sema::AddTemplateOverloadCandidate().

◆ AssociatedConstraintsSatisfaction

ConstraintSatisfaction clang::sema::TemplateDeductionInfo::AssociatedConstraintsSatisfaction

The constraint satisfaction details resulting from the associated constraints satisfaction tests.

Definition at line 252 of file TemplateDeduction.h.

Referenced by CheckDeducedArgumentConstraints(), clang::Sema::FinishTemplateArgumentDeduction(), and clang::MakeDeductionFailureInfo().

◆ CallArgIndex

unsigned clang::sema::TemplateDeductionInfo::CallArgIndex = 0

The index of the function argument that caused a deduction failure.

TDK_DeducedMismatch: this is the index of the argument that had a different argument type from its substituted parameter type.

Definition at line 236 of file TemplateDeduction.h.

Referenced by CheckOriginalCallArgDeduction(), and clang::MakeDeductionFailureInfo().

◆ FirstArg

TemplateArgument clang::sema::TemplateDeductionInfo::FirstArg

The first template argument to which the template argument deduction failure refers.

Depending on the result of the template argument deduction, this template argument may have different meanings:

TDK_IncompletePack: this is the number of arguments we deduced for the pack.

TDK_Inconsistent: this argument is the first value deduced for the corresponding template parameter.

TDK_SubstitutionFailure: this argument is the template argument we were instantiating when we encountered an error.

TDK_DeducedMismatch: this is the parameter type, after substituting deduced arguments.

TDK_NonDeducedMismatch: this is the component of the 'parameter' of the deduction, directly provided in the source code.

Definition at line 215 of file TemplateDeduction.h.

Referenced by CheckOriginalCallArgDeduction(), clang::Sema::DeduceAutoType(), clang::Sema::DeduceFunctionTypeFromReturnExpr(), DeduceNonTypeTemplateArgument(), clang::Sema::DeduceTemplateArguments(), DeduceTemplateArguments(), DeduceTemplateArgumentsByTypeMatch(), DeduceTemplateSpecArguments(), FinishTemplateArgumentDeduction(), and clang::MakeDeductionFailureInfo().

◆ Param

TemplateParameter clang::sema::TemplateDeductionInfo::Param

The template parameter to which a template argument deduction failure refers.

Depending on the result of template argument deduction, this template parameter may have different meanings:

TDK_Incomplete: this is the first template parameter whose corresponding template argument was not deduced.

TDK_IncompletePack: this is the expanded parameter pack for which we deduced too few arguments.

TDK_Inconsistent: this is the template parameter for which two different template argument values were deduced.

Definition at line 193 of file TemplateDeduction.h.

Referenced by ConvertDeducedTemplateArguments(), DeduceNonTypeTemplateArgument(), DeduceTemplateArguments(), DeduceTemplateArgumentsByTypeMatch(), FinishTemplateArgumentDeduction(), clang::MakeDeductionFailureInfo(), and clang::Sema::SubstituteExplicitTemplateArguments().

◆ PendingDeducedPacks

SmallVector<DeducedPack *, 8> clang::sema::TemplateDeductionInfo::PendingDeducedPacks

Information on packs that we're currently expanding.

FIXME: This should be kept internal to SemaTemplateDeduction.

Definition at line 248 of file TemplateDeduction.h.

◆ SecondArg

TemplateArgument clang::sema::TemplateDeductionInfo::SecondArg

The second template argument to which the template argument deduction failure refers.

TDK_Inconsistent: this argument is the second value deduced for the corresponding template parameter.

TDK_DeducedMismatch: this is the (adjusted) call argument type.

TDK_NonDeducedMismatch: this is the mismatching component of the 'argument' of the deduction, from which we are deducing arguments.

FIXME: Finish documenting this.

Definition at line 229 of file TemplateDeduction.h.

Referenced by CheckOriginalCallArgDeduction(), clang::Sema::DeduceAutoType(), clang::Sema::DeduceFunctionTypeFromReturnExpr(), DeduceNonTypeTemplateArgument(), clang::Sema::DeduceTemplateArguments(), DeduceTemplateArguments(), DeduceTemplateArgumentsByTypeMatch(), DeduceTemplateSpecArguments(), FinishTemplateArgumentDeduction(), and clang::MakeDeductionFailureInfo().


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