diff --git a/src/libs/cplusplus/LookupContext.cpp b/src/libs/cplusplus/LookupContext.cpp
index 5fb0e2e3eca01f12c3c6ebb808171378b9698415..743e9a0fca1b711ace0e57a7be5495ce6d646228 100644
--- a/src/libs/cplusplus/LookupContext.cpp
+++ b/src/libs/cplusplus/LookupContext.cpp
@@ -668,6 +668,7 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
         // It gets a bit complicated if the reference is actually a class template because we
         // now must worry about dependent names in base classes.
         if (Template *templ = referenceClass->enclosingTemplate()) {
+            const unsigned argumentCount = templId->templateArgumentCount();
             QHash<const Name*, unsigned> templParams;
             for (unsigned i = 0; i < templ->templateParameterCount(); ++i)
                 templParams.insert(templ->templateParameterAt(i)->name(), i);
@@ -679,15 +680,20 @@ ClassOrNamespace *ClassOrNamespace::nestedType(const Name *name, ClassOrNamespac
                     // This is the simple case in which a template parameter is itself a base.
                     // Ex.: template <class T> class A : public T {};
                     if (templParams.contains(nameId)) {
-                        const FullySpecifiedType &fullType =
-                                templId->templateArgumentAt(templParams.value(nameId));
-                        if (NamedType *namedType = fullType.type()->asNamedType())
-                            baseBinding = lookupType(namedType->name());
+                        const unsigned parameterIndex = templParams.value(nameId);
+                        if (parameterIndex < argumentCount) {
+                            const FullySpecifiedType &fullType =
+                                    templId->templateArgumentAt(parameterIndex);
+                            if (fullType.isValid()) {
+                                if (NamedType *namedType = fullType.type()->asNamedType())
+                                    baseBinding = lookupType(namedType->name());
+                            }
+                        }
                     }
                 } else {
                     SubstitutionMap map;
                     for (unsigned i = 0;
-                         i < templ->templateParameterCount() && i < templId->templateArgumentCount();
+                         i < templ->templateParameterCount() && i < argumentCount;
                          ++i) {
                         map.bind(templ->templateParameterAt(i)->name(),
                                  templId->templateArgumentAt(i));