C++: fix dereferencing of nested type and operator '->'

Fixed case:
template<class T>
struct List
{
  struct iterator
  {
    T *operator->() { return &t; }
    T t;
  };
  iterator begin() { return iterator(); }
};

struct Foo { int bar; };

void func()
{
  List<Foo> list;
  list.begin()->; // code completion doesn't work
}

Task-number: QTCREATORBUG-13799
Change-Id: I65e8d3092bbc9b01a5dbee241c24d95dd03fc670
Reviewed-by: Orgad Shaneh <orgads@gmail.com>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@theqtcompany.com>
This commit is contained in:
Przemyslaw Gorszkowski
2015-02-06 12:25:31 +01:00
committed by Orgad Shaneh
parent 209078e57e
commit 1a239bd3e9
2 changed files with 22 additions and 1 deletions

View File

@@ -1078,8 +1078,9 @@ ClassOrNamespace *ResolveExpression::baseExpression(const QList<LookupItem> &bas
ClassOrNamespace *binding
= findClassForTemplateParameterInExpressionScope(r.binding(),
ty);
if (! binding)
binding = findClass(ty, scope);
binding = findClass(ty, scope, r.binding());
if (binding){
// lookup for overloads of operator->