[cfe-dev] Getting the corresponding template parameters of a template argument list in partial template specializations

Olivier Grant olivier.grant at gmail.com
Wed Jul 28 06:17:02 PDT 2010


Thanks for the help.

On another note, is there anyway to retrieve an AST representing only the input file and not the entire translation unit?

Thanks again for your time.

Best regards,

Olivier

On 26 Jul 2010, at 17:39, Douglas Gregor <dgregor at apple.com> wrote:

> 
> On Jul 26, 2010, at 2:40 AM, Olivier wrote:
> 
>> Hi,
>> 
>> I'm trying to figure out how I can retrive the template parameters that 
>> correspond to certain template arguments in the template argument list of a 
>> partial template specialization (ouf), i.e. :
>> 
>> template< typename Tp0, int N0, typename Tp1, int N1 >
>> struct Foo
>> { /* ... */ }
>> 
>> template< typename Tp0, int N1 >
>> struct Foo<Tp0,1,short,N1>
>> { /* ... */ }
>> 
>> In this example, the TemplateArgumentList object I get from the 
>> ClassTemplatePartialSpecializationDecl will contain 4 template arguments :
>> 
>> - One of kind TemplateArgument::Type
>> - One of kind TemplateArgument::Integral
>> - One of kind TemplateArgument::Type
>> - One of kind TemplateArgument::Expression
>> 
>> And a TemplateParameters of two elements.
>> 
>> I can't seem to figure out how to get the identifier of template arguments of 
>> type TemplateArgument::Expression. How can I achieve this ?
> 
> Get the expression (an Expr*) from the template argument. It'll be a DeclRefExpr that refers to the NonTypeTemplateParmDecl for N1.
> 
>> As a more general question, I would like to be able to print 
>> out "<Tp0,1,short,N1>" from the corresponding 
>> ClassTemplatePartialSpecialization object. What is the best way to do this ?
> 
> 
> ClassTemplatePartialSpecializationDecl::getTemplateArgsAsWritten() will give you the template arguments as written.
> 
> - Doug





More information about the cfe-dev mailing list