boost-ext / di

C++14 Dependency Injection Library
https://boost-ext.github.io/di
1.14k stars 138 forks source link

Raw pointer as factory parameter: compile error "incomplete type ‘boost::di::v1_1_0::aux::is_constructible" #454

Open popov-aa opened 4 years ago

popov-aa commented 4 years ago

labels: usage question

Hello. Look at my example, please: https://github.com/popov-aa/FactoryWithParametersBoostDIExample I try pass raw pointer in constructor of class CustomWidget through factory from class MainWindow and got compile error:

incomplete type ‘boost::di::v1_1_0::aux::is_constructible<Widget, boost::di::v1_1_0::core::any_type_ref<Widget, boost::di::v1_1_0::core::injector<boost::di::v1_1_0::config, boost::di::v1_1_0::core::pool<boost::di::v1_1_0::aux::type_list<> >, boost::di::v1_1_0::detail::<lambda(auto:1)> [with auto:1 = boost::di::v1_1_0::core::injector<boost::di::v1_1_0::config, boost::di::v1_1_0::core::pool<boost::di::v1_1_0::aux::type_list<> >, boost::di::v1_1_0::extension::dependency_proxy<boost::di::v1_1_0::scopes::instance, boost::di::v1_1_0::extension::ifactory<CustomWidget, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Widget*>, boost::di::v1_1_0::extension::factory<CustomWidget>, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>, boost::di::v1_1_0::extension::dependency_proxy<boost::di::v1_1_0::scopes::deduce, MainWindow, MainWindow, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none> >]::i, boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::di::v1_1_0::no_name, boost::di::v1_1_0::core::override, boost::di::v1_1_0::core::none>, boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, Widget*, Widget*, boost::di::v1_1_0::no_name, boost::di::v1_1_0::core::override, boost::di::v1_1_0::core::none> >, boost::di::v1_1_0::core::with_error, boost::di::v1_1_0::aux::integral_constant<bool, false> >, boost::di::v1_1_0::core::any_type_ref<Widget, boost::di::v1_1_0::core::injector<boost::di::v1_1_0::config, boost::di::v1_1_0::core::pool<boost::di::v1_1_0::aux::type_list<> >, boost::di::v1_1_0::detail::<lambda(auto:1)> [with auto:1 = boost::di::v1_1_0::core::injector<boost::di::v1_1_0::config, boost::di::v1_1_0::core::pool<boost::di::v1_1_0::aux::type_list<> >, boost::di::v1_1_0::extension::dependency_proxy<boost::di::v1_1_0::scopes::instance, boost::di::v1_1_0::extension::ifactory<CustomWidget, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Widget*>, boost::di::v1_1_0::extension::factory<CustomWidget>, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>, boost::di::v1_1_0::extension::dependency_proxy<boost::di::v1_1_0::scopes::deduce, MainWindow, MainWindow, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none> >]::i, boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::di::v1_1_0::no_name, boost::di::v1_1_0::core::override, boost::di::v1_1_0::core::none>, boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, Widget*, Widget*, boost::di::v1_1_0::no_name, boost::di::v1_1_0::core::override, boost::di::v1_1_0::core::none> >, boost::di::v1_1_0::core::with_error, boost::di::v1_1_0::aux::integral_constant<bool, false> > >’ used in nested name specifier

May I create objects from factory with various parameters, some of them is raw pointers?

Specifications