[cfe-dev] Partial Template Specialization

Douglas Gregor dgregor at apple.com
Thu Apr 5 14:32:09 PDT 2012


On Apr 5, 2012, at 2:16 PM, Yang Chen <chenyang at cs.utah.edu> wrote:

> Hi,
> 
> I am writing a pass using ASTConsumer. I find that seems some 
> declarations of partial template specializations  are missing from 
> TranslationUnitDecl. For example, given the simple code below:
> 
> template<bool, typename>
> struct AAA { };
> 
> template<typename T>
> struct AAA<true, T>
> { };
> 
> I get the following result dumped from MyPass::HandleTranslationUnit() 
> function, where MyPass is inherited from ASTConsumer.
> 
> (gdb) p Ctx.getTranslationUnitDecl()->dump()
> struct __va_list_tag {
>    unsigned int gp_offset;
>    unsigned int fp_offset;
>    void *overflow_arg_area;
>    void *reg_save_area;
> };
> typedef struct __va_list_tag __va_list_tag;
> template <typename > struct AAA {
> };
> $1 = void
> 
> In the above output, only template class AAA is presented, but the 
> partial template specialization is missing.

Yeah, the AST should probably have the class template partial specializations listed here.

> Is this an expected behavior, or is it a Clang bug? Sorry for my vague 
> description. Hopefully I am not missing anything.

You can retrieve class template partial specializations of a ClassTemplateDecl using getPartialSpecializations().

	- Doug



More information about the cfe-dev mailing list