Parsing, semantic analysis, and template instantiation for typename
specifiers that terminate in a simple-template-id, e.g.,
typename MetaFun::template apply<T1, T2>
Also, implement template instantiation for dependent
nested-name-specifiers that involve unresolved identifiers, e.g.,
typename T::type::type
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68166 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/AST/Type.cpp b/lib/AST/Type.cpp
index 669eb7c..b9bd0ba 100644
--- a/lib/AST/Type.cpp
+++ b/lib/AST/Type.cpp
@@ -1450,7 +1450,14 @@
llvm::raw_string_ostream OS(MyString);
OS << "typename ";
NNS->print(OS);
- OS << Name->getName();
+
+ if (const IdentifierInfo *Ident = getIdentifier())
+ OS << Ident->getName();
+ else if (const TemplateSpecializationType *Spec = getTemplateId()) {
+ Spec->getTemplateName().print(OS, true);
+ OS << TemplateSpecializationType::PrintTemplateArgumentList(
+ Spec->getArgs(), Spec->getNumArgs());
+ }
}
if (InnerString.empty())