diff options
Diffstat (limited to 'src/libs/cplusplus/ResolveExpression.cpp')
-rw-r--r-- | src/libs/cplusplus/ResolveExpression.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index 4fc1cd2d56..e779c447bf 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -1062,6 +1062,8 @@ ClassOrNamespace *ResolveExpression::baseExpression(const QList<LookupItem> &bas } typedefsResolver.resolve(&ty, &scope, r.binding()); + if (auto ref = ty->asReferenceType()) // deref if needed + ty = ref->elementType(); if (Q_UNLIKELY(debug)) qDebug() << "- after typedef resolving:" << oo.prettyType(ty); @@ -1082,6 +1084,9 @@ ClassOrNamespace *ResolveExpression::baseExpression(const QList<LookupItem> &bas if (ClassOrNamespace *binding = findClass(type, scope)) return binding; + if (ClassOrNamespace *binding = findClass(type, r.scope())) // local classes and structs + return binding; + } else { ClassOrNamespace *binding = findClassForTemplateParameterInExpressionScope(r.binding(), @@ -1176,6 +1181,9 @@ ClassOrNamespace *ResolveExpression::baseExpression(const QList<LookupItem> &bas if (ClassOrNamespace *binding = findClass(ty, scope, enclosingBinding)) return binding; + + if (ClassOrNamespace *binding = findClass(ty, r.scope())) // local classes and structs + return binding; } } |