C++: Fix decltype resolving for template function

The last nail for std::unique_ptr (GCC variant, MSVC still doesn't work).

Use-case:
template<typename T>
static T f();

struct Foo { int bar; };

void fun()
{
    decltype(f<Foo>()) s;
    s.bar; // bar not highlighted
}

Task-number: QTCREATORBUG-14483
Task-number: QTCREATORBUG-8937
Change-Id: I5bab757400b070cf9dbb688a44fd8eafe95ddc61
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Orgad Shaneh
2015-05-22 15:39:55 +03:00
committed by Orgad Shaneh
parent a429ef3d50
commit 07f8c474be
3 changed files with 18 additions and 7 deletions

View File

@@ -1300,12 +1300,8 @@ bool CheckSymbols::maybeAddFunction(const QList<LookupItem> &candidates, NameAST
isConstructor = isConstructorDeclaration(c);
Function *funTy = c->type()->asFunctionType();
if (!funTy) {
//Try to find a template function
if (Template * t = r.type()->asTemplateType())
if ((c = t->declaration()))
funTy = c->type()->asFunctionType();
}
if (!funTy) // Template function has an overridden type
funTy = r.type()->asFunctionType();
if (!funTy)
continue; // TODO: add diagnostic messages and color call-operators calls too?