commit | 72d90351736e74f0e2860fc10e3b6bcc67a5fbce | [log] [tgz] |
---|---|---|
author | Nathan Ridge <zeratul976@hotmail.com> | Thu Apr 05 03:05:56 2018 -0400 |
committer | Nathan Ridge <zeratul976@hotmail.com> | Fri Apr 13 01:45:57 2018 -0400 |
tree | f1b516dc37223fdefcf87cc48938ddd82b9ef9df | |
parent | ff1cfbf1d4a01e1487ac8a76ebabee67552384c7 [diff] |
Bug 533216 - Correctly classify local types as dependent or not Change-Id: Ie34d0540fd1efa85e29dbe525b75a35af21dc7cf
diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java index c5c65d3..5fedc93 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPTemplateResolutionTest.java
@@ -3198,4 +3198,25 @@ public void testConstexprInitListConstructor_519091() throws Exception { checkBindings(); } + + // template <typename T> T&& declval(); + // + // template <typename Value, typename Func, + // typename Requires = decltype(declval<Func>()(declval<Value>()))> + // void apply(Value, Func); + // + // template <typename T> + // void callInTemplateContext(int i) { + // return apply(i, [](int x) { return T(x); }); + // } + // + // void consume(int); + // void callInCpp1(int i); + + // void callInCpp1(int i) { + // apply(i, &consume); + // } + public void testClassCastException_533216() throws Exception { + checkBindings(); + } }
diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java index 845a325..98574a7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java
@@ -2973,6 +2973,12 @@ return ((InitializerListType) t).getEvaluation().isTypeDependent(); } else if (t instanceof IBinding) { IBinding owner = ((IBinding) t).getOwner(); + if (owner instanceof IFunction) { + if (owner instanceof ICPPFunctionTemplate) { + return true; + } + owner = owner.getOwner(); + } if (owner instanceof ICPPClassTemplate) return true; return (owner instanceof IType) && owner != t && isDependentType((IType) owner);