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));
264 Specialization = Spec;
265 DeductionFailure = Info;
269 void NoteDeductionFailure(
Sema &S,
bool ForTakingAddress);
282 bool ForTakingAddress;
288 void destroyCandidates();
292 : Loc(Loc), ForTakingAddress(ForTakingAddress) {}
302 iterator
begin() {
return Candidates.begin(); }
303 iterator
end() {
return Candidates.end(); }
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
llvm::PointerUnion3< TemplateTypeParmDecl *, NonTypeTemplateParmDecl *, TemplateTemplateParmDecl * > TemplateParameter
Stores a template parameter of any kind.
const PartialDiagnosticAt & peekSFINAEDiagnostic() const
Peek at the SFINAE diagnostic.
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...
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.
void NoteCandidates(Sema &S, SourceLocation Loc) const
TemplateSpecCandidateSet - A set of generalized overload candidates, used in template specializations...
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)
SourceLocation getLocation() const
Returns the location at which template argument is occurring.
void takeSFINAEDiagnostic(PartialDiagnosticAt &PD)
Take ownership of the SFINAE diagnostic.
TemplateDeductionInfo(SourceLocation Loc, unsigned DeducedDepth=0)
SmallVector< DeducedPack *, 8 > PendingDeducedPacks
Information on packs that we're currently expanding.
Encodes a location in the source.
void addSFINAEDiagnostic(SourceLocation Loc, PartialDiagnostic PD)
Set the diagnostic which caused the SFINAE failure.
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.
unsigned getDeducedDepth() const
The depth of template parameters for which deduction is being performed.
diag_iterator diag_end() const
Returns an iterator at the end of the sequence of suppressed diagnostics.
DeclAccessPair FoundDecl
The declaration that was looked up, together with its access.
SourceLocation getLocation() const
A POD class for pairing a NamedDecl* with an access specifier.
Represents a template argument.
Dataflow Directional Tag Classes.
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.
bool hasSFINAEDiagnostic() const
Is a SFINAE diagnostic available?
TemplateArgumentList * take()
Take ownership of the deduced template argument list.
TemplateSpecCandidate - This is a generalization of OverloadCandidate which keeps track of template a...
Implements a partial diagnostic that can be emitted anwyhere in a DiagnosticBuilder stream...
~TemplateSpecCandidateSet()
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.
TemplateArgument FirstArg
The first template argument to which the template argument deduction failure refers.
diag_iterator diag_begin() const
Returns an iterator at the beginning of the sequence of suppressed diagnostics.