diff --git a/src/lib/eolian_cxx/grammar/class_definition.hpp b/src/lib/eolian_cxx/grammar/class_definition.hpp index 2e53b6e6a7..71808a3a48 100644 --- a/src/lib/eolian_cxx/grammar/class_definition.hpp +++ b/src/lib/eolian_cxx/grammar/class_definition.hpp @@ -73,7 +73,7 @@ struct class_definition_generator << scope_tab << "{\n" << scope_tab << scope_tab << "::efl::eolian::do_eo_add( ::efl::eo::concrete::_eo_raw, ::efl::eo::concrete{nullptr}, _eo_class(), f);\n" << scope_tab << "}\n" - << scope_tab << "template " << string << "( ::efl::eo::instantiate_t, ::efl::eo::concrete parent, F f, typename ::std::enable_if< ::efl::eolian::is_callable::value>::type* = 0)\n" + << scope_tab << "template " << string << "( ::efl::eo::instantiate_t, T&& parent, F f, typename ::std::enable_if< ::efl::eolian::is_callable::value && ::efl::eo::is_eolian_object::value>::type* = 0)\n" << scope_tab << "{\n" << scope_tab << scope_tab << "::efl::eolian::do_eo_add( ::efl::eo::concrete::_eo_raw, parent, _eo_class(), f);\n" << scope_tab << "}\n" diff --git a/src/tests/eolian_cxx/eolian_cxx_test_binding.cc b/src/tests/eolian_cxx/eolian_cxx_test_binding.cc index 489a308493..90f880e319 100644 --- a/src/tests/eolian_cxx/eolian_cxx_test_binding.cc +++ b/src/tests/eolian_cxx/eolian_cxx_test_binding.cc @@ -44,6 +44,17 @@ START_TEST(eolian_cxx_test_binding_constructor_all_optionals) } ); + nonamespace::Generic g2 + (efl::eo::instantiate, g, + [&] + { + g.required_ctor_a(2); + g.required_ctor_b(4); + g.optional_ctor_a(3); + g.optional_ctor_b(5); + } + ); + fail_if(2 != g.req_ctor_a_value_get()); fail_if(3 != g.opt_ctor_a_value_get()); fail_if(4 != g.req_ctor_b_value_get());