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>
Showing
- src/libs/cplusplus/LookupContext.cpp 70 additions, 19 deletionssrc/libs/cplusplus/LookupContext.cpp
- src/libs/cplusplus/ResolveExpression.cpp 2 additions, 2 deletionssrc/libs/cplusplus/ResolveExpression.cpp
- src/libs/cplusplus/TypeResolver.cpp 3 additions, 3 deletionssrc/libs/cplusplus/TypeResolver.cpp
- src/libs/cplusplus/TypeResolver.h 2 additions, 2 deletionssrc/libs/cplusplus/TypeResolver.h
- src/plugins/cpptools/cppcompletion_test.cpp 0 additions, 3 deletionssrc/plugins/cpptools/cppcompletion_test.cpp
- tests/auto/cplusplus/checksymbols/tst_checksymbols.cpp 0 additions, 2 deletionstests/auto/cplusplus/checksymbols/tst_checksymbols.cpp
Loading
Please register or sign in to comment