diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java index e97dc9da7de..c2833690ef9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalMemberAccess.java @@ -50,7 +50,6 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPUnknownMemberClass; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPEvaluation; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPInternalUnknownScope; import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownBinding; -import org.eclipse.cdt.internal.core.dom.parser.cpp.ICPPUnknownType; import org.eclipse.cdt.internal.core.dom.parser.cpp.OverloadableOperator; import org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.LookupMode; import org.eclipse.core.runtime.CoreException; @@ -233,8 +232,6 @@ public class EvalMemberAccess extends CPPDependentEvaluation { if (fMember instanceof IVariable) { IType e2 = ((IVariable) fMember).getType(); e2= SemanticUtil.getNestedType(e2, TDEF); - if (e2 instanceof ICPPUnknownType) - return new TypeOfDependentExpression(this); if (e2 instanceof ICPPReferenceType) { e2= glvalueType(e2); } else if (fMember instanceof ICPPField && !((ICPPField) fMember).isStatic()) { diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsNoIndexer.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsNoIndexer.java index d7788a7c421..ecfcd03eb8f 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsNoIndexer.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/selection/CPPSelectionTestsNoIndexer.java @@ -1230,9 +1230,30 @@ public class CPPSelectionTestsNoIndexer extends BaseUITestCase { // } public void testLocallyDeclaredExternVariable_372004() throws Exception { String code = getAboveComment(); - IFile file = importFile("testWaldo.cpp", code); + IFile file = importFile("testBug372004.cpp", code); int offset = code.indexOf("extern int waldo") + 12; assertTrue(testF3(file, offset) instanceof IASTName); } + + // template + // struct A { + // int waldo; + // }; + // + // template + // struct B { + // A obj; + // void foo() { + // obj.waldo; + // } + // }; + public void testDependentMemberAccess_448764() throws Exception { + String code = getAboveComment(); + IFile file = importFile("testBug448764.cpp", code); + + int offset = code.indexOf("obj.waldo") + 4; + assertTrue(testF3(file, offset) instanceof IASTName); + } + }