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:
Orgad Shaneh
2015-05-22 10:22:01 +03:00
committed by Orgad Shaneh
parent 04c4043e13
commit b5f6a9e6e5
2 changed files with 24 additions and 4 deletions

View File

@@ -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);