diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index 6c6071671be..3a243584187 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -10347,11 +10347,13 @@ public class AST2CPPTests extends AST2TestBase { // class Waldo { // typedef int type; + // static int value; // }; // // int main() { // Waldo w; // decltype(w)::type i; + // int x = decltype(w)::value; // } public void testDecltypeInNameQualifier_bug380751() throws Exception { parseAndCheckBindings(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java index b8981c921cc..694cb931f88 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/GNUCPPSourceParser.java @@ -1541,6 +1541,16 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { case IToken.t_decltype: case IToken.t_void: case IGCCToken.t_typeof: + if (LT(1) == IToken.t_decltype) { + // Might be an id-expression starting with a decltype-specifier. + IToken marked = mark(); + try { + firstExpression = primaryExpression(ctx, strat); + break; + } catch (BacktrackException e) { + backup(marked); + } + } firstExpression = simpleTypeConstructorExpression(simpleTypeSpecifier()); break; @@ -1738,7 +1748,8 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { case IToken.tCOLONCOLON: case IToken.t_operator: case IToken.tCOMPLETION: - case IToken.tBITCOMPLEMENT: { + case IToken.tBITCOMPLEMENT: + case IToken.t_decltype: { IASTName name = qualifiedName(ctx, strat); IASTIdExpression idExpression = nodeFactory.newIdExpression(name); return setRange(idExpression, name);