[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