forked from qt-creator/qt-creator
C++: Fix decltype resolving for nested instantiated class
The enclosingScope of a cloned nested class is not the
original class but the cloned parent.
Use-case:
template <typename T>
struct Temp
{
struct Nested
{
static T f();
typedef decltype(f()) type;
};
};
struct Foo { int bar; };
void fun()
{
Temp<Foo>::Nested::type s;
s.bar; // bar not highlighted
}
Task-number: QTCREATORBUG-14483
Change-Id: I3e15399a78a7492f740db8d0c7d5c84adf77d1d0
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
committed by
Orgad Shaneh
parent
04c4043e13
commit
b5f6a9e6e5
6
src/libs/3rdparty/cplusplus/Templates.cpp
vendored
6
src/libs/3rdparty/cplusplus/Templates.cpp
vendored
@@ -188,10 +188,8 @@ Symbol *CloneSymbol::cloneSymbol(Symbol *symbol, Subst *subst)
|
||||
|
||||
SymbolSubstPair symbolSubstPair = std::make_pair(symbol, subst);
|
||||
auto it = _cache.find(symbolSubstPair);
|
||||
if (it != _cache.end()) {
|
||||
if (it->second->enclosingScope() == symbol->enclosingScope())
|
||||
return it->second;
|
||||
}
|
||||
if (it != _cache.end())
|
||||
return it->second;
|
||||
|
||||
Symbol *r = 0;
|
||||
std::swap(_subst, subst);
|
||||
|
||||
Reference in New Issue
Block a user