@@ -6855,7 +6855,8 @@ class Sema final : public SemaBase {
68556855 const CXXScopeSpec *SS = nullptr,
68566856 NamedDecl *FoundD = nullptr,
68576857 SourceLocation TemplateKWLoc = SourceLocation(),
6858- const TemplateArgumentListInfo *TemplateArgs = nullptr);
6858+ const TemplateArgumentListInfo *TemplateArgs = nullptr,
6859+ const TemplateArgumentList *ConvertArgs = nullptr);
68596860
68606861 /// BuildDeclRefExpr - Build an expression that references a
68616862 /// declaration that does not require a closure capture.
@@ -6864,7 +6865,8 @@ class Sema final : public SemaBase {
68646865 const DeclarationNameInfo &NameInfo,
68656866 NestedNameSpecifierLoc NNS, NamedDecl *FoundD = nullptr,
68666867 SourceLocation TemplateKWLoc = SourceLocation(),
6867- const TemplateArgumentListInfo *TemplateArgs = nullptr);
6868+ const TemplateArgumentListInfo *TemplateArgs = nullptr,
6869+ const TemplateArgumentList *ConvertArgs = nullptr);
68686870
68696871 bool UseArgumentDependentLookup(const CXXScopeSpec &SS, const LookupResult &R,
68706872 bool HasTrailingLParen);
@@ -6886,6 +6888,7 @@ class Sema final : public SemaBase {
68866888 const CXXScopeSpec &SS, const DeclarationNameInfo &NameInfo, NamedDecl *D,
68876889 NamedDecl *FoundD = nullptr,
68886890 const TemplateArgumentListInfo *TemplateArgs = nullptr,
6891+ const TemplateArgumentList *ConvertedArgs = nullptr,
68896892 bool AcceptInvalidDecl = false);
68906893
68916894 // ExpandFunctionLocalPredefinedMacros - Returns a new vector of Tokens,
@@ -8698,14 +8701,13 @@ class Sema final : public SemaBase {
86988701 SourceLocation TemplateKWLoc,
86998702 UnqualifiedId &Member, Decl *ObjCImpDecl);
87008703
8701- MemberExpr *
8702- BuildMemberExpr(Expr *Base, bool IsArrow, SourceLocation OpLoc,
8703- NestedNameSpecifierLoc NNS, SourceLocation TemplateKWLoc,
8704- ValueDecl *Member, DeclAccessPair FoundDecl,
8705- bool HadMultipleCandidates,
8706- const DeclarationNameInfo &MemberNameInfo, QualType Ty,
8707- ExprValueKind VK, ExprObjectKind OK,
8708- const TemplateArgumentListInfo *TemplateArgs = nullptr);
8704+ MemberExpr *BuildMemberExpr(
8705+ Expr *Base, bool IsArrow, SourceLocation OpLoc,
8706+ NestedNameSpecifierLoc NNS, SourceLocation TemplateKWLoc,
8707+ ValueDecl *Member, DeclAccessPair FoundDecl, bool HadMultipleCandidates,
8708+ const DeclarationNameInfo &MemberNameInfo, QualType Ty, ExprValueKind VK,
8709+ ExprObjectKind OK, const TemplateArgumentListInfo *TemplateArgs = nullptr,
8710+ const TemplateArgumentList *Deduced = nullptr);
87098711
87108712 // Check whether the declarations we found through a nested-name
87118713 // specifier in a member expression are actually members of the base
@@ -10294,6 +10296,7 @@ class Sema final : public SemaBase {
1029410296 ADLCallKind IsADLCandidate = ADLCallKind::NotADL,
1029510297 ConversionSequenceList EarlyConversions = {},
1029610298 OverloadCandidateParamOrder PO = {},
10299+ const TemplateArgumentList *Deduced = nullptr,
1029710300 bool AggregateCandidateDeduction = false, bool StrictPackMatch = false);
1029810301
1029910302 /// Add all of the function declarations in the given function set to
@@ -10330,6 +10333,7 @@ class Sema final : public SemaBase {
1033010333 bool PartialOverloading = false,
1033110334 ConversionSequenceList EarlyConversions = {},
1033210335 OverloadCandidateParamOrder PO = {},
10336+ const TemplateArgumentList *Deduced = nullptr,
1033310337 bool StrictPackMatch = false);
1033410338
1033510339 /// Add a C++ member function template as a candidate to the candidate
@@ -10538,6 +10542,7 @@ class Sema final : public SemaBase {
1053810542 FunctionDecl *
1053910543 ResolveAddressOfOverloadedFunction(Expr *AddressOfExpr, QualType TargetType,
1054010544 bool Complain, DeclAccessPair &Found,
10545+ const TemplateArgumentList *&ConvertedArgs,
1054110546 bool *pHadMultipleCandidates = nullptr);
1054210547
1054310548 /// Given an expression that refers to an overloaded function, try to
@@ -10571,7 +10576,9 @@ class Sema final : public SemaBase {
1057110576 /// If no template-ids are found, no diagnostics are emitted and NULL is
1057210577 /// returned.
1057310578 FunctionDecl *ResolveSingleFunctionTemplateSpecialization(
10574- OverloadExpr *ovl, bool Complain = false, DeclAccessPair *Found = nullptr,
10579+ OverloadExpr *ovl, TemplateArgumentListInfo &ExplicitTemplateArgs,
10580+ const TemplateArgumentList *&ConvertedArgs, bool Complain = false,
10581+ DeclAccessPair *Found = nullptr,
1057510582 TemplateSpecCandidateSet *FailedTSC = nullptr,
1057610583 bool ForTypeDeduction = false);
1057710584
@@ -10756,11 +10763,14 @@ class Sema final : public SemaBase {
1075610763 /// perhaps a '&' around it). We have resolved the overloaded function
1075710764 /// to the function declaration Fn, so patch up the expression E to
1075810765 /// refer (possibly indirectly) to Fn. Returns the new expr.
10759- ExprResult FixOverloadedFunctionReference(Expr *E, DeclAccessPair FoundDecl,
10760- FunctionDecl *Fn);
10761- ExprResult FixOverloadedFunctionReference(ExprResult,
10762- DeclAccessPair FoundDecl,
10763- FunctionDecl *Fn);
10766+ ExprResult
10767+ FixOverloadedFunctionReference(Expr *E, DeclAccessPair FoundDecl,
10768+ FunctionDecl *Fn,
10769+ const TemplateArgumentList *Deduced);
10770+ ExprResult
10771+ FixOverloadedFunctionReference(ExprResult, DeclAccessPair FoundDecl,
10772+ FunctionDecl *Fn,
10773+ const TemplateArgumentList *Deduced);
1076410774
1076510775 /// - Returns a selector which best matches given argument list or
1076610776 /// nullptr if none could be found
@@ -11541,7 +11551,8 @@ class Sema final : public SemaBase {
1154111551 DeclResult CheckVarTemplateId(VarTemplateDecl *Template,
1154211552 SourceLocation TemplateLoc,
1154311553 SourceLocation TemplateNameLoc,
11544- const TemplateArgumentListInfo &TemplateArgs);
11554+ const TemplateArgumentListInfo &TemplateArgs,
11555+ const TemplateArgumentList *&ConvertedArgs);
1154511556
1154611557 /// Form a reference to the specialization of the given variable template
1154711558 /// corresponding to the specified argument list, or a null-but-valid result
0 commit comments