diff --git a/src/lib_parser/data/parser/cxx/ASTVisitor.cpp b/src/lib_parser/data/parser/cxx/ASTVisitor.cpp index 5eaa34f0..6b7dc3ec 100644 --- a/src/lib_parser/data/parser/cxx/ASTVisitor.cpp +++ b/src/lib_parser/data/parser/cxx/ASTVisitor.cpp @@ -786,16 +786,23 @@ void ASTVisitor::processTemplateArgumentsOfExplicitSpecialization(clang::ClassTe getParseLocationForTokensInRange(argumentLoc.getSourceRange()), argumentNameHierarchy, specializedRecordNameHierarchy - ); + ); } } } else { - clang::TypeLoc loc = specializationDecl->getTypeAsWritten()->getTypeLoc(); - if (loc.getTypeLocClass() == clang::TypeLoc::TypeLocClass::TemplateSpecialization) + if (clang::TypeSourceInfo* typeSourceInfo = specializationDecl->getTypeAsWritten()) { - processTemplateArguments(loc.getAs()); + clang::TypeLoc loc = typeSourceInfo->getTypeLoc(); + if (loc.getTypeLocClass() == clang::TypeLoc::TypeLocClass::TemplateSpecialization) + { + processTemplateArguments(loc.getAs()); + } + } + else + { + LOG_WARNING("Could not locate template arguments of explicit template specialization: " + specializedRecordNameHierarchy.getFullName()); } } }