diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index b3c094d144f..15aa882b93a 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -9463,6 +9463,14 @@ public class AST2TemplateTests extends AST2TestBase { parseAndCheckBindings(); } + // template + // constexpr int waldo(T v) { + // return v < I ? 1 : 1 + waldo(v / I); + // } + public void _testAmbiguityResolution_497931() throws Exception { + parseAndCheckBindings(); + } + // template struct S {}; // struct U {}; // diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/TemplateIdStrategy.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/TemplateIdStrategy.java index 28eaeb970c5..2fdf91f996d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/TemplateIdStrategy.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/TemplateIdStrategy.java @@ -118,8 +118,9 @@ final class TemplateIdStrategy implements ITemplateIdStrategy { // Optimization (bug 363609): if during the previous alternative, a name was parsed as a // template-id with multiple template arguments, it's not going to be parsed differently in // a subsequent alternative, so keep it as a template-id. - // Of course, this optimization is only sound if the previous alternative was parsed + // Of course, this optimization is only possible if the previous alternative was parsed // successfully (bug 445177). + // TODO: This optimization is invalid since it triggers bug 497931. if (previousAlternativeFailedToParse || nameLen == 0 || !hasMultipleArgs(names[--nameLen])) { fSimpleIDs.clear(bp+1, Integer.MAX_VALUE); fSimpleIDs.set(bp);