@@ -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
@@ -10299,6 +10301,7 @@ class Sema final : public SemaBase {
1029910301 ADLCallKind IsADLCandidate = ADLCallKind::NotADL,
1030010302 ConversionSequenceList EarlyConversions = {},
1030110303 OverloadCandidateParamOrder PO = {},
10304+ const TemplateArgumentList *Deduced = nullptr,
1030210305 bool AggregateCandidateDeduction = false, bool StrictPackMatch = false);
1030310306
1030410307 /// Add all of the function declarations in the given function set to
@@ -10335,6 +10338,7 @@ class Sema final : public SemaBase {
1033510338 bool PartialOverloading = false,
1033610339 ConversionSequenceList EarlyConversions = {},
1033710340 OverloadCandidateParamOrder PO = {},
10341+ const TemplateArgumentList *Deduced = nullptr,
1033810342 bool StrictPackMatch = false);
1033910343
1034010344 /// Add a C++ member function template as a candidate to the candidate
@@ -10543,6 +10547,7 @@ class Sema final : public SemaBase {
1054310547 FunctionDecl *
1054410548 ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr, QualType TargetType,
1054510549 bool Complain, DeclAccessPair &Found,
10550+ const TemplateArgumentList *&ConvertedArgs,
1054610551 bool *pHadMultipleCandidates = nullptr);
1054710552
1054810553 /// Given an expression that refers to an overloaded function, try to
@@ -10576,7 +10581,9 @@ class Sema final : public SemaBase {
1057610581 /// If no template-ids are found, no diagnostics are emitted and NULL is
1057710582 /// returned.
1057810583 FunctionDecl *ResolveSingleFunctionTemplateSpecialization(
10579- OverloadExpr *ovl, bool Complain = false, DeclAccessPair *Found = nullptr,
10584+ OverloadExpr *ovl, TemplateArgumentListInfo &ExplicitTemplateArgs,
10585+ const TemplateArgumentList *&ConvertedArgs, bool Complain = false,
10586+ DeclAccessPair *Found = nullptr,
1058010587 TemplateSpecCandidateSet *FailedTSC = nullptr,
1058110588 bool ForTypeDeduction = false);
1058210589
@@ -10761,11 +10768,14 @@ class Sema final : public SemaBase {
1076110768 /// perhaps a '&' around it). We have resolved the overloaded function
1076210769 /// to the function declaration Fn, so patch up the expression E to
1076310770 /// refer (possibly indirectly) to Fn. Returns the new expr.
10764- ExprResult FixOverloadedFunctionReference(Expr *E, DeclAccessPair FoundDecl,
10765- FunctionDecl *Fn);
10766- ExprResult FixOverloadedFunctionReference(ExprResult,
10767- DeclAccessPair FoundDecl,
10768- FunctionDecl *Fn);
10771+ ExprResult
10772+ FixOverloadedFunctionReference(Expr *E, DeclAccessPair FoundDecl,
10773+ FunctionDecl *Fn,
10774+ const TemplateArgumentList *Deduced);
10775+ ExprResult
10776+ FixOverloadedFunctionReference(ExprResult, DeclAccessPair FoundDecl,
10777+ FunctionDecl *Fn,
10778+ const TemplateArgumentList *Deduced);
1076910779
1077010780 /// - Returns a selector which best matches given argument list or
1077110781 /// nullptr if none could be found
@@ -11545,7 +11555,8 @@ class Sema final : public SemaBase {
1154511555 DeclResult CheckVarTemplateId(VarTemplateDecl *Template,
1154611556 SourceLocation TemplateLoc,
1154711557 SourceLocation TemplateNameLoc,
11548- const TemplateArgumentListInfo &TemplateArgs);
11558+ const TemplateArgumentListInfo &TemplateArgs,
11559+ const TemplateArgumentList *&ConvertedArgs);
1154911560
1155011561 /// Form a reference to the specialization of the given variable template
1155111562 /// corresponding to the specified argument list, or a null-but-valid result
0 commit comments