[cfe-dev] Template parameters for out-of-line definitions of class template methods.
Douglas Gregor
dgregor at apple.com
Thu Apr 22 07:11:01 PDT 2010
On Apr 21, 2010, at 12:20 PM, Enea Zaffanella wrote:
> Hello.
>
> We have a somewhat naive question regarding the AST generated for the
> following program fragment:
> ======================================
> template <typename T>
> struct S {
> void foo();
> };
>
> template <class W>
> void S<W>::foo() {}
> ======================================
>
> We would like to retrieve the template parameter list for the
> out-of-line definition of method foo(), that is
> template <class W>
> but we cannot see if and how this could be achieved.
Clang's AST doesn't actually store the template parameter list that was used in the out-of-line definition. It should.
> Apparently, clang++ produces a plain CXXMethodDecl, with no explicit
> indication that this is actually a "member function template" (C++98
> 14.5.1.1).
Technically, it's a member function of a class template.
> Are we missing some existing clang methods that allow to retrieve this
> info or is it really missing? In the latter case, is there any plan to
> add this info to the generated AST?
It is missing, and we will add this info to the generated AST at some point.
> The same question can be asked for the case of an out-of-line definition
> of a static data member (which generates a VarDecl node) and of a member
> class (generating a plain CXXRecordDecl).
Right, this is the same kind of issue. We're missing this information for out-of-line definitions of everything.
- Doug
More information about the cfe-dev
mailing list