13 #ifndef LLVM_CLANG_SEMA_TEMPLATEDEDUCTION_H
14 #define LLVM_CLANG_SEMA_TEMPLATEDEDUCTION_H
18 #include "llvm/ADT/SmallVector.h"
23 class TemplateArgumentList;
41 bool HasSFINAEDiagnostic;
44 unsigned DeducedDepth;
55 : Deduced(nullptr), Loc(Loc), HasSFINAEDiagnostic(
false),
79 assert(HasSFINAEDiagnostic);
80 PD.first = SuppressedDiagnostics.front().first;
81 PD.second.swap(SuppressedDiagnostics.front().second);
87 SuppressedDiagnostics.clear();
88 HasSFINAEDiagnostic =
false;
93 assert(HasSFINAEDiagnostic);
94 return SuppressedDiagnostics.front();
100 Deduced = NewDeduced;
105 return HasSFINAEDiagnostic;
111 if (HasSFINAEDiagnostic)
113 SuppressedDiagnostics.clear();
114 SuppressedDiagnostics.emplace_back(Loc, std::move(PD));
115 HasSFINAEDiagnostic =
true;
121 if (HasSFINAEDiagnostic)
123 SuppressedDiagnostics.emplace_back(Loc, std::move(PD));
282 bool ForTakingAddress;
288 void destroyCandidates();
292 : Loc(Loc), ForTakingAddress(ForTakingAddress) {}
305 size_t size()
const {
return Candidates.size(); }
306 bool empty()
const {
return Candidates.empty(); }
311 Candidates.emplace_back();
312 return Candidates.back();
SmallVector< TemplateSpecCandidate, 16 >::iterator iterator
const TemplateArgument * getSecondArg()
Return the second template argument this deduction failure refers to, if any.
void NoteCandidates(Sema &S, SourceLocation Loc) const
A structure used to record information about a failed template argument deduction, for diagnosis.
Provides information about an attempted template argument deduction, whose success or failure was des...
void clear()
Clear out all of the candidates.
Decl - This represents one declaration (or definition), e.g.
Defines the C++ template declaration subclasses.
void addSuppressedDiagnostic(SourceLocation Loc, PartialDiagnostic PD)
Add a new diagnostic to the set of diagnostics.
void clearSFINAEDiagnostic()
Discard any SFINAE diagnostics.
Decl * Specialization
Specialization - The actual specialization that this candidate represents.
TemplateParameter Param
The template parameter to which a template argument deduction failure refers.
const PartialDiagnosticAt & peekSFINAEDiagnostic() const
Peek at the SFINAE diagnostic.
void set(DeclAccessPair Found, Decl *Spec, DeductionFailureInfo Info)
TemplateSpecCandidateSet - A set of generalized overload candidates, used in template specializations...
void Destroy()
Free any memory associated with this deduction failure.
TemplateParameter getTemplateParameter()
Retrieve the template parameter this deduction failure refers to, if any.
diag_iterator diag_end() const
Returns an iterator at the end of the sequence of suppressed diagnostics.
DeductionFailureInfo DeductionFailure
Template argument deduction info.
Sema - This implements semantic analysis and AST building for C.
void reset(TemplateArgumentList *NewDeduced)
Provide a new template argument list that contains the results of template argument deduction...
unsigned Result
A Sema::TemplateDeductionResult.
TemplateSpecCandidateSet(SourceLocation Loc, bool ForTakingAddress=false)
void takeSFINAEDiagnostic(PartialDiagnosticAt &PD)
Take ownership of the SFINAE diagnostic.
diag_iterator diag_begin() const
Returns an iterator at the beginning of the sequence of suppressed diagnostics.
SourceLocation getLocation() const
TemplateDeductionInfo(SourceLocation Loc, unsigned DeducedDepth=0)
void NoteDeductionFailure(Sema &S, bool ForTakingAddress)
Diagnose a template argument deduction failure.
SmallVector< DeducedPack *, 8 > PendingDeducedPacks
Information on packs that we're currently expanding.
Encodes a location in the source.
unsigned getDeducedDepth() const
The depth of template parameters for which deduction is being performed.
void addSFINAEDiagnostic(SourceLocation Loc, PartialDiagnostic PD)
Set the diagnostic which caused the SFINAE failure.
llvm::Optional< unsigned > getCallArgIndex()
Return the index of the call argument that this deduction failure refers to, if any.
std::pair< SourceLocation, PartialDiagnostic > PartialDiagnosticAt
A partial diagnostic along with the source location where this diagnostic occurs. ...
unsigned HasDiagnostic
Indicates whether a diagnostic is stored in Diagnostic.
DeclAccessPair FoundDecl
The declaration that was looked up, together with its access.
A POD class for pairing a NamedDecl* with an access specifier.
const TemplateArgument * getFirstArg()
Return the first template argument this deduction failure refers to, if any.
Represents a template argument.
llvm::PointerUnion3< TemplateTypeParmDecl *, NonTypeTemplateParmDecl *, TemplateTemplateParmDecl * > TemplateParameter
Stores a template parameter of any kind.
PartialDiagnosticAt * getSFINAEDiagnostic()
Retrieve the diagnostic which caused this deduction failure, if any.
bool hasSFINAEDiagnostic() const
Is a SFINAE diagnostic available?
TemplateSpecCandidate & addCandidate()
Add a new candidate with NumConversions conversion sequence slots to the overload set...
void * Data
Opaque pointer containing additional data about this deduction failure.
TemplateArgumentList * take()
Take ownership of the deduced template argument list.
TemplateSpecCandidate - This is a generalization of OverloadCandidate which keeps track of template a...
SourceLocation getLocation() const
Returns the location at which template argument is occurring.
Implements a partial diagnostic that can be emitted anwyhere in a DiagnosticBuilder stream...
~TemplateSpecCandidateSet()
TemplateArgumentList * getTemplateArgumentList()
Retrieve the template argument list associated with this deduction failure, if any.
A template argument list.
SmallVectorImpl< PartialDiagnosticAt >::const_iterator diag_iterator
Iterator over the set of suppressed diagnostics.
TemplateArgument SecondArg
The second template argument to which the template argument deduction failure refers.
A little helper class (which is basically a smart pointer that forwards info from DiagnosticsEngine) ...
unsigned CallArgIndex
The index of the function argument that caused a deduction failure.
void NoteCandidates(Sema &S, SourceLocation Loc)
NoteCandidates - When no template specialization match is found, prints diagnostic messages containin...
TemplateArgument FirstArg
The first template argument to which the template argument deduction failure refers.