local v=require("cpp11_inheriting_constructors")

-- Constructor inheritance via using declaration
local d = v.DerivedClass(10)
assert(d:retrieveValue() == 10, "retrieveValue()")

-- A protected member brought into the public interface through a typedef naming a base that has inheriting constructors
assert(v.UseInheritCtorTypedef(42):protectedValue() == 42, "UseInheritCtorTypedef.protectedValue()")

-- A protected base method brought into the public interface through a typedef naming a template-mixin
-- base whose constructors are inherited through the template parameter (issue #2951)
assert(v.UseTemplateInheritCtor(42):protectedValue() == 42, "UseTemplateInheritCtor.protectedValue()")

-- Member initialization at the site of the declaration
local s = v.SomeClass()
assert(s.value == 5, "s.value")
