[cfe-dev] Issue when Generating a Namespace-qualified TemplateSpecializationType

scott constable via cfe-dev cfe-dev at lists.llvm.org
Tue Aug 2 17:18:53 PDT 2016


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/20160802/9dc4db92/attachment.html>


More information about the cfe-dev mailing list