aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/cplusplus/ResolveExpression.cpp
diff options
context:
space:
mode:
authorOrgad Shaneh <orgad.shaneh@audiocodes.com>2015-03-30 22:13:44 +0300
committerOrgad Shaneh <orgads@gmail.com>2015-04-28 13:54:25 +0000
commitad4cb444fbfd1f3f4747a0988a196120d3a0c208 (patch)
tree966257fbdeb49f3a5ed1e445fb3cf62886159515 /src/libs/cplusplus/ResolveExpression.cpp
parentaa893918c1a51cb20c909a4c32e401c6d2d254c0 (diff)
C++: Fix specialization resolution for nested types
Use-cases: template<typename T> struct Traits { typedef typename T::pointer pointer; }; template<typename _Tp> struct Traits<_Tp*> { typedef _Tp *pointer; }; struct Foo { int bar; }; // 1 template<typename T> class Temp { protected: typedef Traits<T> TraitsT; public: typedef typename TraitsT::pointer pointer; pointer p; }; void func() { Temp<Foo *> t; t.p-> // complete } // 2 class Temp2 { protected: typedef Foo *FooPtr; typedef Traits<FooPtr> TraitsT; public: typedef typename TraitsT::pointer pointer; pointer p; }; void func2() { Temp2 t; t.p-> // complete } Task-number: QTCREATORBUG-14141 Change-Id: Id3459671117c0c81bcde7c9714b42750634c0225 Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Diffstat (limited to 'src/libs/cplusplus/ResolveExpression.cpp')
-rw-r--r--src/libs/cplusplus/ResolveExpression.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp
index 0a261c50d40..824e1770119 100644
--- a/src/libs/cplusplus/ResolveExpression.cpp
+++ b/src/libs/cplusplus/ResolveExpression.cpp
@@ -787,7 +787,7 @@ bool ResolveExpression::visit(ArrayAccessAST *ast)
FullySpecifiedType ty = result.type().simplified();
Scope *scope = result.scope();
- TypeResolver typeResolver(_context);
+ TypeResolver typeResolver(*_context.bindings());
typeResolver.resolve(&ty, &scope, result.binding());
if (PointerType *ptrTy = ty->asPointerType()) {
@@ -916,7 +916,7 @@ LookupScope *ResolveExpression::baseExpression(const QList<LookupItem> &baseResu
if (Q_UNLIKELY(debug))
qDebug() << "In ResolveExpression::baseExpression with" << baseResults.size() << "results...";
int i = 0;
- TypeResolver typeResolver(_context);
+ TypeResolver typeResolver(*_context.bindings());
foreach (const LookupItem &r, baseResults) {
if (!r.type().type() || !r.scope())