diff options
author | Przemyslaw Gorszkowski <pgorszkowski@gmail.com> | 2015-02-06 12:33:56 +0100 |
---|---|---|
committer | Orgad Shaneh <orgads@gmail.com> | 2015-02-26 10:09:39 +0000 |
commit | 8c11485edba3718925624612f2336d7853da297f (patch) | |
tree | 526fc74288c6b5670af94b4a982160444977690c /src/libs/cplusplus/ResolveExpression.cpp | |
parent | 7f001dab1b9dd05160e78adb0554ad3478ba363c (diff) | |
download | qt-creator-8c11485edba3718925624612f2336d7853da297f.tar.gz |
C++: fix dereferencing of nested type and 'auto'
Fixed case:
template<class T>
struct List
{
struct iterator
{
T *operator->() { return &t; }
T &operator*() { return t; }
T t;
};
iterator begin() { return iterator(); }
};
struct Foo { int bar; };
void func()
{
List<Foo> list;
auto a = list.begin();
(*a).; // code completion doesn't work
a->; // code completion does not work
}
Task-number: QTCREATORBUG-13799
Change-Id: I38e4bfb2f5d728c0b24b0f18b3d78793e90d633b
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
Diffstat (limited to 'src/libs/cplusplus/ResolveExpression.cpp')
-rw-r--r-- | src/libs/cplusplus/ResolveExpression.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/libs/cplusplus/ResolveExpression.cpp b/src/libs/cplusplus/ResolveExpression.cpp index 932a248d34..adaac12ab5 100644 --- a/src/libs/cplusplus/ResolveExpression.cpp +++ b/src/libs/cplusplus/ResolveExpression.cpp @@ -730,6 +730,7 @@ bool ResolveExpression::visit(SimpleNameAST *ast) continue; TypeOfExpression exprTyper; + exprTyper.setExpandTemplates(true); Document::Ptr doc = _context.snapshot().document(QString::fromLocal8Bit(decl->fileName())); exprTyper.init(doc, _context.snapshot(), _context.bindings(), QSet<const Declaration* >(_autoDeclarationsBeingResolved) << decl); @@ -754,10 +755,12 @@ bool ResolveExpression::visit(SimpleNameAST *ast) if (n == 0) { item.setType(newType); item.setScope(typeItems[n].scope()); + item.setBinding(typeItems[n].binding()); } else { LookupItem newItem(item); newItem.setType(newType); newItem.setScope(typeItems[n].scope()); + newItem.setBinding(typeItems[n].binding()); newCandidates.push_back(newItem); } } |