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 3e1bc2db256..fc1b4bcd99f 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 @@ -5416,4 +5416,22 @@ public class AST2TemplateTests extends AST2BaseTest { public void testParameterAdjustementInInstantiatedFunctionType_351609() throws Exception { parseAndCheckBindings(); } + + // template struct CT { + // int g; + // }; + // template struct CT { + // int ref; + // }; + // template struct CT { + // int rref; + // }; + // void test() { + // CT::g; + // CT::ref; + // CT::rref; + // } + public void testRRefVsRef_351927() throws Exception { + parseAndCheckBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java index 021c2faaa83..be23516639f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/TemplateArgumentDeduction.java @@ -678,8 +678,12 @@ public class TemplateArgumentDeduction { if (!(a instanceof ICPPReferenceType)) { return false; } - p = ((ICPPReferenceType) p).getType(); - a = ((ICPPReferenceType) a).getType(); + final ICPPReferenceType rp = (ICPPReferenceType) p; + final ICPPReferenceType ra = (ICPPReferenceType) a; + if (ra.isRValueReference() != rp.isRValueReference()) + return false; + p = rp.getType(); + a = ra.getType(); } else if (p instanceof IArrayType) { if (!(a instanceof IArrayType)) { return false;