@@ -6856,7 +6856,8 @@ class Sema final : public SemaBase {
68566856 const CXXScopeSpec *SS = nullptr,
68576857 NamedDecl *FoundD = nullptr,
68586858 SourceLocation TemplateKWLoc = SourceLocation(),
6859- const TemplateArgumentListInfo *TemplateArgs = nullptr);
6859+ const TemplateArgumentListInfo *TemplateArgs = nullptr,
6860+ const TemplateArgumentList *ConvertArgs = nullptr);
68606861
68616862 /// BuildDeclRefExpr - Build an expression that references a
68626863 /// declaration that does not require a closure capture.
@@ -6865,7 +6866,8 @@ class Sema final : public SemaBase {
68656866 const DeclarationNameInfo &NameInfo,
68666867 NestedNameSpecifierLoc NNS, NamedDecl *FoundD = nullptr,
68676868 SourceLocation TemplateKWLoc = SourceLocation(),
6868- const TemplateArgumentListInfo *TemplateArgs = nullptr);
6869+ const TemplateArgumentListInfo *TemplateArgs = nullptr,
6870+ const TemplateArgumentList *ConvertArgs = nullptr);
68696871
68706872 bool UseArgumentDependentLookup(const CXXScopeSpec &SS, const LookupResult &R,
68716873 bool HasTrailingLParen);
@@ -6887,6 +6889,7 @@ class Sema final : public SemaBase {
68876889 const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D,
68886890 NamedDecl *FoundD = nullptr,
68896891 const TemplateArgumentListInfo *TemplateArgs = nullptr,
6892+ const TemplateArgumentList *ConvertedArgs = nullptr,
68906893 bool AcceptInvalidDecl = false);
68916894
68926895 // ExpandFunctionLocalPredefinedMacros - Returns a new vector of Tokens,
@@ -8700,14 +8703,13 @@ class Sema final : public SemaBase {
87008703 SourceLocation TemplateKWLoc,
87018704 UnqualifiedId &Member, Decl *ObjCImpDecl);
87028705
8703- MemberExpr *
8704- BuildMemberExpr(Expr *Base, bool IsArrow, SourceLocation OpLoc,
8705- NestedNameSpecifierLoc NNS, SourceLocation TemplateKWLoc,
8706- ValueDecl *Member, DeclAccessPair FoundDecl,
8707- bool HadMultipleCandidates,
8708- const DeclarationNameInfo &MemberNameInfo, QualType Ty,
8709- ExprValueKind VK, ExprObjectKind OK,
8710- const TemplateArgumentListInfo *TemplateArgs = nullptr);
8706+ MemberExpr *BuildMemberExpr(
8707+ Expr *Base, bool IsArrow, SourceLocation OpLoc,
8708+ NestedNameSpecifierLoc NNS, SourceLocation TemplateKWLoc,
8709+ ValueDecl *Member, DeclAccessPair FoundDecl, bool HadMultipleCandidates,
8710+ const DeclarationNameInfo &MemberNameInfo, QualType Ty, ExprValueKind VK,
8711+ ExprObjectKind OK, const TemplateArgumentListInfo *TemplateArgs = nullptr,
8712+ const TemplateArgumentList *Deduced = nullptr);
87118713
87128714 // Check whether the declarations we found through a nested-name
87138715 // specifier in a member expression are actually members of the base
@@ -10296,6 +10298,7 @@ class Sema final : public SemaBase {
1029610298 ADLCallKind IsADLCandidate = ADLCallKind::NotADL,
1029710299 ConversionSequenceList EarlyConversions = {},
1029810300 OverloadCandidateParamOrder PO = {},
10301+ const TemplateArgumentList *Deduced = nullptr,
1029910302 bool AggregateCandidateDeduction = false, bool StrictPackMatch = false);
1030010303
1030110304 /// Add all of the function declarations in the given function set to
@@ -10332,6 +10335,7 @@ class Sema final : public SemaBase {
1033210335 bool PartialOverloading = false,
1033310336 ConversionSequenceList EarlyConversions = {},
1033410337 OverloadCandidateParamOrder PO = {},
10338+ const TemplateArgumentList *Deduced = nullptr,
1033510339 bool StrictPackMatch = false);
1033610340
1033710341 /// Add a C++ member function template as a candidate to the candidate
@@ -10540,6 +10544,7 @@ class Sema final : public SemaBase {
1054010544 FunctionDecl *
1054110545 ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr, QualType TargetType,
1054210546 bool Complain, DeclAccessPair &Found,
10547+ const TemplateArgumentList *&ConvertedArgs,
1054310548 bool *pHadMultipleCandidates = nullptr);
1054410549
1054510550 /// Given an expression that refers to an overloaded function, try to
@@ -10573,7 +10578,9 @@ class Sema final : public SemaBase {
1057310578 /// If no template-ids are found, no diagnostics are emitted and NULL is
1057410579 /// returned.
1057510580 FunctionDecl *ResolveSingleFunctionTemplateSpecialization(
10576- OverloadExpr *ovl, bool Complain = false, DeclAccessPair *Found = nullptr,
10581+ OverloadExpr *ovl, TemplateArgumentListInfo &ExplicitTemplateArgs,
10582+ const TemplateArgumentList *&ConvertedArgs, bool Complain = false,
10583+ DeclAccessPair *Found = nullptr,
1057710584 TemplateSpecCandidateSet *FailedTSC = nullptr,
1057810585 bool ForTypeDeduction = false);
1057910586
@@ -10758,11 +10765,14 @@ class Sema final : public SemaBase {
1075810765 /// perhaps a '&' around it). We have resolved the overloaded function
1075910766 /// to the function declaration Fn, so patch up the expression E to
1076010767 /// refer (possibly indirectly) to Fn. Returns the new expr.
10761- ExprResult FixOverloadedFunctionReference(Expr *E, DeclAccessPair FoundDecl,
10762- FunctionDecl *Fn);
10763- ExprResult FixOverloadedFunctionReference(ExprResult,
10764- DeclAccessPair FoundDecl,
10765- FunctionDecl *Fn);
10768+ ExprResult
10769+ FixOverloadedFunctionReference(Expr *E, DeclAccessPair FoundDecl,
10770+ FunctionDecl *Fn,
10771+ const TemplateArgumentList *Deduced);
10772+ ExprResult
10773+ FixOverloadedFunctionReference(ExprResult, DeclAccessPair FoundDecl,
10774+ FunctionDecl *Fn,
10775+ const TemplateArgumentList *Deduced);
1076610776
1076710777 /// - Returns a selector which best matches given argument list or
1076810778 /// nullptr if none could be found
@@ -11542,7 +11552,8 @@ class Sema final : public SemaBase {
1154211552 DeclResult CheckVarTemplateId(VarTemplateDecl *Template,
1154311553 SourceLocation TemplateLoc,
1154411554 SourceLocation TemplateNameLoc,
11545- const TemplateArgumentListInfo &TemplateArgs);
11555+ const TemplateArgumentListInfo &TemplateArgs,
11556+ const TemplateArgumentList *&ConvertedArgs);
1154611557
1154711558 /// Form a reference to the specialization of the given variable template
1154811559 /// corresponding to the specified argument list, or a null-but-valid result
0 commit comments