diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java index 56941e1d3e7..5b7e70cf050 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/internal/index/tests/IndexCPPBindingResolutionTest.java @@ -1834,4 +1834,20 @@ public abstract class IndexCPPBindingResolutionTest extends IndexBindingResoluti IVariable waldo = getBindingFromASTName("waldo", 5); assertEquals(42, waldo.getInitialValue().numericalValue().longValue()); } + + // struct function { + // template + // function(T); + // }; + // + // struct test { + // // These lambdas have the class 'test' as their owner. + // test(function f = [](int c){ return c; }); + // function member = [](int c){ return c; }; + // }; + + // int z; + public void testLambdaOwnedByClass() throws Exception { + checkBindings(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ClassTypeHelper.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ClassTypeHelper.java index 4c2e67faf26..ed2e8c03eb4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ClassTypeHelper.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/ClassTypeHelper.java @@ -901,6 +901,13 @@ public class ClassTypeHelper { return ICPPClassType.v_public; // Fallback visibility } } + + // The concept of visibility does not apply to a lambda, which can end + // up having a class as its owner if they are used in the initializer + // of a field or a member function parameter. + if (member instanceof CPPClosureType) { + return ICPPClassType.v_public; + } ICPPASTCompositeTypeSpecifier classDeclSpec = classType.getCompositeTypeSpecifier(); int visibility = getVisibility(classDeclSpec, member);