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 cac2a3abdbe..e8e4d45eb79 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 @@ -11076,4 +11076,10 @@ public class AST2CPPTests extends AST2TestBase { public void testASTCopyForNoexceptDefault_bug456207() throws Exception { parseAndCheckBindings(); } + + // template struct waldo { waldo(int); }; + // auto x = static_cast>(0); + public void testTemplateIdInsideCastOperator_460080() 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 257647d3413..85a9cf7b274 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 @@ -1957,7 +1957,12 @@ public class GNUCPPSourceParser extends AbstractGNUSourceCodeParser { final int optype= consume().getType(); consume(IToken.tLT); final IASTTypeId typeID = typeId(DeclarationOptions.TYPEID); - consumeOrEOC(IToken.tGT); + final IToken gt = LA(1); + if (gt.getType() == IToken.tGT || gt.getType() == IToken.tGT_in_SHIFTR) { + consume(); + } else if (gt.getType() != IToken.tEOC) { + throwBacktrack(gt); + } consumeOrEOC(IToken.tLPAREN); IASTExpression operand= null; if (LT(1) != IToken.tEOC) {