[cfe-dev] Issue when Generating a Namespace-qualified TemplateSpecializationType
scott constable via cfe-dev
cfe-dev at lists.llvm.org
Wed Aug 3 09:27:29 PDT 2016
UPDATE: I still haven't figured out the issue with the
getCanonicalTemplateSpecializationType() API, but I have found another API
which does the job just fine. What I do is the following:
void *InsertPos;
ClassTemplateSpecializationDecl *TD =
MyClassTemplateDecl->findSpecialization(Args, InsertPos);
if (!TD) {
TD = ClassTemplateSpecializationDecl::Create(...);
MyClassTemplateDecl->AddSpecialization(TD, InsertPos);
}
QualType FullyQualTemplateType(TD->getTypeForDecl());
Indeed, the FullyQualTemplateType includes the namespace(s) in which
MyClassTemplateDecl was declared. So in the example above, it is the type
"foo::bar<int>".
On Tue, Aug 2, 2016 at 5:18 PM, scott constable <sdconsta at syr.edu> wrote:
> Hi All,
>
> I'm trying to use the getCanonicalTemplateSpecializationType() function
> from the ASTContext API to generate a TemplateSpecializationType. The API
> works just fine, except in the case where the Template class is qualified,
> e.g. with a namespace. For example, if I process the following code:
>
> namespace foo {
> template<typename T>bar {};
> }
>
> and generate a template specialization with an "int" argument, the result
> is "bar<int>" whereas it should be "foo::bar<int>". The reason, it seems,
> is an oddity in getCanonicalTemplateSpecializationType()'s implementation:
>
> ASTContext.cpp:
> 3529 // Look through qualified template names.
> 3530 if (QualifiedTemplateName *QTN =
> Template.getAsQualifiedTemplateName())
> 3531 Template = TemplateName(QTN->getTemplateDecl());
>
> So essentially the ASTContext is just throwing away the namespace
> qualifier (I'm giving it a QualifiedTemplateName as an argument). Is this a
> bug? Am I using the wrong api?
>
> Thanks in advance,
>
> Scott Constable
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20160803/902af59c/attachment.html>
More information about the cfe-dev
mailing list