diff --git a/src/CppParser/Parser.cpp b/src/CppParser/Parser.cpp
index 3d8d8796..97d77366 100644
--- a/src/CppParser/Parser.cpp
+++ b/src/CppParser/Parser.cpp
@@ -874,14 +874,31 @@ static bool IsRecordValid(const clang::RecordDecl* RC)
     return IsRecordValid(RC, Visited);
 }
 
-static clang::CXXRecordDecl* GetCXXRecordDeclFromBaseType(const clang::QualType& Ty) {
+static clang::CXXRecordDecl* GetCXXRecordDeclFromTemplateName(const clang::TemplateName& Name)
+{
+    using namespace clang;
+
+    switch (Name.getKind()) {
+    case clang::TemplateName::Template:
+        return dyn_cast<clang::CXXRecordDecl>(
+            Name.getAsTemplateDecl()->getTemplatedDecl());
+    case clang::TemplateName::QualifiedTemplate:
+        return dyn_cast<clang::CXXRecordDecl>(
+            Name.getAsQualifiedTemplateName()->getTemplateDecl()->getTemplatedDecl());
+    default:
+        assert(0 && "Unknown template name kind");
+        return nullptr;
+    }
+}
+
+static clang::CXXRecordDecl* GetCXXRecordDeclFromBaseType(const clang::QualType& Ty)
+{
     using namespace clang;
 
     if (auto RT = Ty->getAs<clang::RecordType>())
         return dyn_cast<clang::CXXRecordDecl>(RT->getDecl());
     else if (auto TST = Ty->getAs<clang::TemplateSpecializationType>())
-        return dyn_cast<clang::CXXRecordDecl>(
-            TST->getTemplateName().getAsTemplateDecl()->getTemplatedDecl());
+        return GetCXXRecordDeclFromTemplateName(TST->getTemplateName());
     else if (auto Injected = Ty->getAs<clang::InjectedClassNameType>())
         return Injected->getDecl();