forked from qt-creator/qt-creator
		
	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>
			
			
This commit is contained in:
		
				
					committed by
					
						
						Orgad Shaneh
					
				
			
			
				
	
			
			
			
						parent
						
							aa893918c1
						
					
				
				
					commit
					ad4cb444fb
				
			@@ -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())
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user