@@ -213,6 +213,7 @@ class MemberDefImpl : public DefinitionMixin<MemberDefMutable>
213213 const ArgumentList &declArgumentList () const override ;
214214 const ArgumentList &templateArguments () const override ;
215215 const ArgumentLists &definitionTemplateParameterLists () const override ;
216+ std::optional<ArgumentList> formalTemplateArguments () const override ;
216217 int getMemberGroupId () const override ;
217218 MemberGroup *getMemberGroup () const override ;
218219 bool fromAnonymousScope () const override ;
@@ -301,6 +302,7 @@ class MemberDefImpl : public DefinitionMixin<MemberDefMutable>
301302 void overrideReferencesRelation (bool e) override ;
302303 void overrideInlineSource (bool e) override ;
303304 void setTemplateMaster (MemberDef *mt) override ;
305+ void setFormalTemplateArguments (const ArgumentList &al) override ;
304306 void addListReference (Definition *d) override ;
305307 void setDocsForDefinition (bool b) override ;
306308 void setGroupAlias (const MemberDef *md) override ;
@@ -437,6 +439,7 @@ class MemberDefImpl : public DefinitionMixin<MemberDefMutable>
437439 ArgumentList m_tArgList; // template argument list of function template
438440 ArgumentList m_typeConstraints; // type constraints for template parameters
439441 MemberDef *m_templateMaster = nullptr ;
442+ std::optional<ArgumentList> m_formalTemplateArguments;
440443 ArgumentLists m_defTmpArgLists; // lists of template argument lists
441444 // (for template functions in nested template classes)
442445
@@ -838,6 +841,8 @@ class MemberDefAliasImpl : public DefinitionAliasMixin<MemberDef>
838841 { return getMdAlias ()->templateArguments (); }
839842 const ArgumentLists &definitionTemplateParameterLists () const override
840843 { return getMdAlias ()->definitionTemplateParameterLists (); }
844+ std::optional<ArgumentList> formalTemplateArguments () const override
845+ { return getMdAlias ()->formalTemplateArguments (); }
841846 int getMemberGroupId () const override
842847 { return getMdAlias ()->getMemberGroupId (); }
843848 MemberGroup *getMemberGroup () const override
@@ -1464,6 +1469,7 @@ MemberDefImpl::MemberDefImpl(const MemberDefImpl &md) : DefinitionMixin(md)
14641469 m_tArgList = md.m_tArgList ;
14651470 m_typeConstraints = md.m_typeConstraints ;
14661471 m_templateMaster = md.m_templateMaster ;
1472+ m_formalTemplateArguments = md.m_formalTemplateArguments ;
14671473 m_defTmpArgLists = md.m_defTmpArgLists ;
14681474 m_metaData = md.m_metaData ;
14691475 m_cachedAnonymousType = md.m_cachedAnonymousType ;
@@ -4327,33 +4333,33 @@ std::unique_ptr<MemberDef> MemberDefImpl::createTemplateInstanceMember(
43274333 // replace formal arguments with actuals
43284334 for (Argument &arg : *actualArgList)
43294335 {
4330- arg.type = substituteTemplateArgumentsInString (arg.type ,formalArgs,actualArgs);
4336+ arg.type = substituteTemplateArgumentsInString (arg.type ,formalArgs,actualArgs. get () );
43314337 }
43324338 actualArgList->setTrailingReturnType (
4333- substituteTemplateArgumentsInString (actualArgList->trailingReturnType (),formalArgs,actualArgs));
4339+ substituteTemplateArgumentsInString (actualArgList->trailingReturnType (),formalArgs,actualArgs. get () ));
43344340 }
43354341
43364342 QCString methodName=name ();
43374343 if (methodName.startsWith (" operator " )) // conversion operator
43384344 {
4339- methodName=substituteTemplateArgumentsInString (methodName,formalArgs,actualArgs);
4345+ methodName=substituteTemplateArgumentsInString (methodName,formalArgs,actualArgs. get () );
43404346 }
43414347
43424348 auto imd = createMemberDef (
43434349 getDefFileName (),getDefLine (),getDefColumn (),
4344- substituteTemplateArgumentsInString (m_type,formalArgs,actualArgs),
4350+ substituteTemplateArgumentsInString (m_type,formalArgs,actualArgs. get () ),
43454351 methodName,
4346- substituteTemplateArgumentsInString (m_args,formalArgs,actualArgs),
4352+ substituteTemplateArgumentsInString (m_args,formalArgs,actualArgs. get () ),
43474353 m_exception, m_prot,
43484354 m_virt, m_stat, m_related, m_mtype,
43494355 ArgumentList (), ArgumentList (), " "
43504356 );
43514357 auto mmd = toMemberDefMutable (imd.get ());
43524358 mmd->moveArgumentList (std::move (actualArgList));
4353- mmd->setDefinition (substituteTemplateArgumentsInString (m_def,formalArgs,actualArgs));
4359+ mmd->setDefinition (substituteTemplateArgumentsInString (m_def,formalArgs,actualArgs. get () ));
43544360 mmd->setBodyDef (getBodyDef ());
43554361 mmd->setBodySegment (getDefLine (),getStartBodyLine (),getEndBodyLine ());
4356- // imd->setBodyMember(this );
4362+ mmd-> setFormalTemplateArguments (formalArgs );
43574363
43584364 // TODO: init other member variables (if needed).
43594365 // TODO: reimplemented info
@@ -5598,6 +5604,11 @@ const MemberDef *MemberDefImpl::templateMaster() const
55985604 return m_templateMaster;
55995605}
56005606
5607+ std::optional<ArgumentList> MemberDefImpl::formalTemplateArguments () const
5608+ {
5609+ return m_formalTemplateArguments;
5610+ }
5611+
56015612bool MemberDefImpl::isTypedefValCached () const
56025613{
56035614 return m_isTypedefValCached;
@@ -5817,7 +5828,6 @@ void MemberDefImpl::setExplicitExternal(bool b,const QCString &df,int line,int c
58175828 }
58185829}
58195830
5820-
58215831void MemberDefImpl::setDeclFile (const QCString &df,int line,int column)
58225832{
58235833 m_declFileName = df;
@@ -5856,6 +5866,11 @@ void MemberDefImpl::setTemplateMaster(MemberDef *mt)
58565866 m_isLinkableCached = 0 ;
58575867}
58585868
5869+ void MemberDefImpl::setFormalTemplateArguments (const ArgumentList &al)
5870+ {
5871+ m_formalTemplateArguments = al;
5872+ }
5873+
58595874void MemberDefImpl::setDocsForDefinition (bool b)
58605875{
58615876 m_docsForDefinition = b;
0 commit comments