Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Compilation error when using shared_factory with runtime_injector #399

Open
ColinDuquesnoy opened this issue Apr 17, 2019 · 0 comments
Open

Comments

@ColinDuquesnoy
Copy link

Context

I am trying to use the runtime_injector (because our application with hundreds of bindings now takes several minutes to compile and compilation time looks exponential 😟 ). We're using named injection and shared_factory extension extensively in our application (because of #252).

Unfortunately it looks like using named injection or shared_factory does not work with the runtime_injector. This issue is about shared_factory.

Please let me know if this is a known limitation or if I am using it wrong.

Sample code

Expected Behavior

No compilation error.

Actual Behavior

Compilation error:

====================[ Build | main | Debug ]====================================
/opt/evs/jetbrains-clion/bin/cmake/linux/bin/cmake --build /home/cdu/CLionProjects/poc-boost-di-runtime-injector/cmake-build-debug --target main -- -j 4
Scanning dependencies of target main
[ 50%] Building CXX object CMakeFiles/main.dir/main.cpp.o
In file included from /home/cdu/CLionProjects/poc-boost-di-runtime-injector/main.cpp:2:0:
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp: In instantiation of ‘boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::install(const T&)::<lambda()> [with T = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; typename std::enable_if<(! std::is_base_of<boost::di::v1_1_0::core::injector_base, T>::value), int>::type <anonymous> = 0; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]’:
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:124:84:   required from ‘struct boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::install(const T&) [with T = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; typename std::enable_if<(! std::is_base_of<boost::di::v1_1_0::core::injector_base, T>::value), int>::type <anonymous> = 0; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]::<lambda()>’
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:124:75:   required from ‘void boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::install(const T&) [with T = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; typename std::enable_if<(! std::is_base_of<boost::di::v1_1_0::core::injector_base, T>::value), int>::type <anonymous> = 0; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]’
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/main.cpp:16:5:   required from here
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:125:37: error: call of overloaded ‘make(const boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>&)’ is ambiguous
       return make<typename T::given>(binding);
                                     ^
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:158:8: note: candidate: decltype (make_impl<T>(typename boost::di::v1_1_0::ctor_traits<T>::type{})) boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::make(const TBinding&) [with T = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >; TBinding = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config; decltype (make_impl<T>(typename boost::di::v1_1_0::ctor_traits<T>::type{})) = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >*]
   auto make(const TBinding &) -> decltype(make_impl<T>(typename ctor_traits<T>::type{})) {
        ^
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:163:8: note: candidate: decltype (new T) boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::make(const TBinding&) [with T = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >; TBinding = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config; decltype (new T) = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >*]
   auto make(const TBinding &binding) -> decltype(new T{binding.object_}) {
        ^
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp: In instantiation of ‘void boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::install(const T&) [with T = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; typename std::enable_if<(! std::is_base_of<boost::di::v1_1_0::core::injector_base, T>::value), int>::type <anonymous> = 0; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]’:
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/main.cpp:16:5:   required from here
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:124:75: error: no match for ‘operator=’ (operand types are ‘std::unordered_map<std::type_index, std::function<void*()> >::mapped_type {aka std::function<void*()>}’ and ‘boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::install(const T&) [with T = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; typename std::enable_if<(! std::is_base_of<boost::di::v1_1_0::core::injector_base, T>::value), int>::type <anonymous> = 0; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]::<lambda()>’)
     this->cfg().bindings()[std::type_index(typeid(typename T::expected))] = [this, binding] {
                                                                           ^
In file included from /opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/memory:79:0,
                 from /home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/include/boost/di.hpp:94,
                 from /home/cdu/CLionProjects/poc-boost-di-runtime-injector/main.cpp:1:
/opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/functional:2069:7: note: candidate: std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(const std::function<_Res(_ArgTypes ...)>&) [with _Res = void*; _ArgTypes = {}]
       operator=(const function& __x)
       ^
/opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/functional:2069:7: note:   no known conversion for argument 1 from ‘boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::install(const T&) [with T = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; typename std::enable_if<(! std::is_base_of<boost::di::v1_1_0::core::injector_base, T>::value), int>::type <anonymous> = 0; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]::<lambda()>’ to ‘const std::function<void*()>&’
/opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/functional:2087:7: note: candidate: std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::function<_Res(_ArgTypes ...)>&&) [with _Res = void*; _ArgTypes = {}]
       operator=(function&& __x)
       ^
/opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/functional:2087:7: note:   no known conversion for argument 1 from ‘boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::install(const T&) [with T = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; typename std::enable_if<(! std::is_base_of<boost::di::v1_1_0::core::injector_base, T>::value), int>::type <anonymous> = 0; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]::<lambda()>’ to ‘std::function<void*()>&&’
/opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/functional:2101:7: note: candidate: std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::nullptr_t) [with _Res = void*; _ArgTypes = {}; std::nullptr_t = std::nullptr_t]
       operator=(nullptr_t) noexcept
       ^
/opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/functional:2101:7: note:   no known conversion for argument 1 from ‘boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::install(const T&) [with T = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; typename std::enable_if<(! std::is_base_of<boost::di::v1_1_0::core::injector_base, T>::value), int>::type <anonymous> = 0; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]::<lambda()>’ to ‘std::nullptr_t’
/opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/functional:2130:2: note: candidate: template<class _Functor> std::function<_Res(_ArgTypes ...)>::_Requires<std::function<_Res(_ArgTypes ...)>::_Callable<typename std::decay<_Tp>::type>, std::function<_Res(_ArgTypes ...)>&> std::function<_Res(_ArgTypes ...)>::operator=(_Functor&&) [with _Functor = _Functor; _Res = void*; _ArgTypes = {}]
  operator=(_Functor&& __f)
  ^
/opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/functional:2130:2: note:   template argument deduction/substitution failed:
/opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/functional:2139:2: note: candidate: template<class _Functor> std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::reference_wrapper<_Tp>) [with _Functor = _Functor; _Res = void*; _ArgTypes = {}]
  operator=(reference_wrapper<_Functor> __f) noexcept
  ^
/opt/rh/devtoolset-4/root/usr/include/c++/5.3.1/functional:2139:2: note:   template argument deduction/substitution failed:
In file included from /home/cdu/CLionProjects/poc-boost-di-runtime-injector/main.cpp:2:0:
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:124:75: note:   ‘boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::install(const T&) [with T = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; typename std::enable_if<(! std::is_base_of<boost::di::v1_1_0::core::injector_base, T>::value), int>::type <anonymous> = 0; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]::<lambda()>’ is not derived from ‘std::reference_wrapper<_Tp>’
     this->cfg().bindings()[std::type_index(typeid(typename T::expected))] = [this, binding] {
                                                                           ^
In file included from /home/cdu/CLionProjects/poc-boost-di-runtime-injector/main.cpp:1:0:
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/include/boost/di.hpp: In instantiation of ‘boost::di::v1_1_0::core::wrapper_impl<T, TWrapper, <template-parameter-1-3> >::operator T() [with T = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >&&; TWrapper = boost::di::v1_1_0::wrappers::unique<boost::di::v1_1_0::scopes::unique, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >*>; <template-parameter-1-3> = int]’:
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/include/boost/di.hpp:2167:99:   required from ‘boost::di::v1_1_0::core::any_type_ref<TParent, TInjector, TError, TRefError>::operator T&&() const [with T = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >; <template-parameter-2-2> = int; <template-parameter-2-3> = int; TParent = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >; TInjector = boost::di::v1_1_0::core::injector<boost::di::v1_1_0::extension::runtime_provider<boost::di::v1_1_0::extension::assert_error_policy, boost::di::v1_1_0::extension::shared_config>, boost::di::v1_1_0::core::pool<> >; TError = boost::di::v1_1_0::aux::integral_constant<bool, false>; TRefError = boost::di::v1_1_0::aux::integral_constant<bool, true>]’
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:58:48:   required from ‘auto boost::di::v1_1_0::extension::runtime_provider<TErrorPolicy, TScopeTraits>::abstract_provider::get(std::true_type, TArgs&& ...) const [with T = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >; TArgs = {boost::di::v1_1_0::core::any_type_ref<boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::core::injector<boost::di::v1_1_0::extension::runtime_provider<boost::di::v1_1_0::extension::assert_error_policy, boost::di::v1_1_0::extension::shared_config>, boost::di::v1_1_0::core::pool<boost::di::v1_1_0::aux::type_list<> > >, boost::di::v1_1_0::aux::integral_constant<bool, false>, boost::di::v1_1_0::aux::integral_constant<bool, true> >, boost::di::v1_1_0::core::any_type_ref<boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::core::injector<boost::di::v1_1_0::extension::runtime_provider<boost::di::v1_1_0::extension::assert_error_policy, boost::di::v1_1_0::extension::shared_config>, boost::di::v1_1_0::core::pool<boost::di::v1_1_0::aux::type_list<> > >, boost::di::v1_1_0::aux::integral_constant<bool, false>, boost::di::v1_1_0::aux::integral_constant<bool, true> >}; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config; std::true_type = std::integral_constant<bool, true>]’
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:48:22:   required from ‘auto boost::di::v1_1_0::extension::runtime_provider<TErrorPolicy, TScopeTraits>::abstract_provider::get(const TInitialization&, const TMemory&, TArgs&& ...) const [with T = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >; TInitialization = boost::di::v1_1_0::type_traits::direct; TMemory = boost::di::v1_1_0::type_traits::stack; TArgs = {boost::di::v1_1_0::core::any_type_ref<boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::core::injector<boost::di::v1_1_0::extension::runtime_provider<boost::di::v1_1_0::extension::assert_error_policy, boost::di::v1_1_0::extension::shared_config>, boost::di::v1_1_0::core::pool<boost::di::v1_1_0::aux::type_list<> > >, boost::di::v1_1_0::aux::integral_constant<bool, false>, boost::di::v1_1_0::aux::integral_constant<bool, true> >, boost::di::v1_1_0::core::any_type_ref<boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::core::injector<boost::di::v1_1_0::extension::runtime_provider<boost::di::v1_1_0::extension::assert_error_policy, boost::di::v1_1_0::extension::shared_config>, boost::di::v1_1_0::core::pool<boost::di::v1_1_0::aux::type_list<> > >, boost::di::v1_1_0::aux::integral_constant<bool, false>, boost::di::v1_1_0::aux::integral_constant<bool, true> >}; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]’
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/include/boost/di.hpp:2409:110:   required from ‘auto boost::di::v1_1_0::core::provider<boost::di::v1_1_0::aux::pair<T, boost::di::v1_1_0::aux::pair<TInitialization, TList<TCtor ...> > >, TName, TInjector>::get_impl(const TMemory&, TArgs&& ...) const [with TMemory = boost::di::v1_1_0::type_traits::stack; TArgs = {boost::di::v1_1_0::core::any_type_ref<boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::core::injector<boost::di::v1_1_0::extension::runtime_provider<boost::di::v1_1_0::extension::assert_error_policy, boost::di::v1_1_0::extension::shared_config>, boost::di::v1_1_0::core::pool<boost::di::v1_1_0::aux::type_list<> > >, boost::di::v1_1_0::aux::integral_constant<bool, false>, boost::di::v1_1_0::aux::integral_constant<bool, true> >, boost::di::v1_1_0::core::any_type_ref<boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::core::injector<boost::di::v1_1_0::extension::runtime_provider<boost::di::v1_1_0::extension::assert_error_policy, boost::di::v1_1_0::extension::shared_config>, boost::di::v1_1_0::core::pool<boost::di::v1_1_0::aux::type_list<> > >, boost::di::v1_1_0::aux::integral_constant<bool, false>, boost::di::v1_1_0::aux::integral_constant<bool, true> >}; typename boost::di::v1_1_0::aux::enable_if<boost::di::v1_1_0::core::provider<boost::di::v1_1_0::aux::pair<T, boost::di::v1_1_0::aux::pair<TInitialization, TList<TCtor ...> > >, TName, TInjector>::is_creatable< <template-parameter-2-1>, TArgs>::value, int>::type <anonymous> = 0; T = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >; TName = boost::di::v1_1_0::no_name; TInjector = boost::di::v1_1_0::core::injector<boost::di::v1_1_0::extension::runtime_provider<boost::di::v1_1_0::extension::assert_error_policy, boost::di::v1_1_0::extension::shared_config>, boost::di::v1_1_0::core::pool<> >; TInitialization = boost::di::v1_1_0::type_traits::direct; TList = boost::di::v1_1_0::aux::type_list; TCtor = {boost::di::v1_1_0::core::any_type_ref_fwd<boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> > >, boost::di::v1_1_0::core::any_type_ref_fwd<boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> > >}]’
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/include/boost/di.hpp:2402:20:   required from ‘auto boost::di::v1_1_0::core::provider<boost::di::v1_1_0::aux::pair<T, boost::di::v1_1_0::aux::pair<TInitialization, TList<TCtor ...> > >, TName, TInjector>::get(const TMemory&) const [with TMemory = boost::di::v1_1_0::type_traits::stack; T = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >; TName = boost::di::v1_1_0::no_name; TInjector = boost::di::v1_1_0::core::injector<boost::di::v1_1_0::extension::runtime_provider<boost::di::v1_1_0::extension::assert_error_policy, boost::di::v1_1_0::extension::shared_config>, boost::di::v1_1_0::core::pool<> >; TInitialization = boost::di::v1_1_0::type_traits::direct; TList = boost::di::v1_1_0::aux::type_list; TCtor = {boost::di::v1_1_0::core::any_type_ref_fwd<boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> > >, boost::di::v1_1_0::core::any_type_ref_fwd<boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> > >}]’
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/include/boost/di.hpp:1911:81:   [ skipping 5 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:154:60:   required from ‘auto boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::make_impl(boost::di::v1_1_0::aux::pair<TInit, boost::di::v1_1_0::aux::type_list<Ts ...> >) [with T = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >; TInit = boost::di::v1_1_0::type_traits::direct; Ts = {boost::di::v1_1_0::core::any_type_ref_fwd<boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> > >, boost::di::v1_1_0::core::any_type_ref_fwd<boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> > >}; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]’
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:158:55:   required by substitution of ‘template<class T, class TBinding> decltype (make_impl<T>(typename boost::di::v1_1_0::ctor_traits<T>::type{})) boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::make(const TBinding&) [with T = boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >; TBinding = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>]’
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:125:37:   required from ‘boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::install(const T&)::<lambda()> [with T = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; typename std::enable_if<(! std::is_base_of<boost::di::v1_1_0::core::injector_base, T>::value), int>::type <anonymous> = 0; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]’
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:124:84:   required from ‘struct boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::install(const T&) [with T = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; typename std::enable_if<(! std::is_base_of<boost::di::v1_1_0::core::injector_base, T>::value), int>::type <anonymous> = 0; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]::<lambda()>’
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/extension/include/boost/di/extension/providers/runtime_provider.hpp:124:75:   required from ‘void boost::di::v1_1_0::extension::detail::injector<TErrorPolicy, TScopeTraits>::install(const T&) [with T = boost::di::v1_1_0::core::dependency<boost::di::v1_1_0::scopes::instance, int, boost::di::v1_1_0::extension::shared_factory_impl<int, false, main()::<lambda(const auto:3&)> >, boost::di::v1_1_0::no_name, void, boost::di::v1_1_0::core::none>; typename std::enable_if<(! std::is_base_of<boost::di::v1_1_0::core::injector_base, T>::value), int>::type <anonymous> = 0; TErrorPolicy = boost::di::v1_1_0::extension::assert_error_policy; TScopeTraits = boost::di::v1_1_0::extension::shared_config]’
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/main.cpp:16:5:   required from here
/home/cdu/CLionProjects/poc-boost-di-runtime-injector/3rdparty/boost-di/include/boost/di.hpp:2451:41: error: returning reference to temporary [-Werror=return-local-addr]
   inline operator T() noexcept { return wrapper_; }
                                         ^
cc1plus: all warnings being treated as errors
gmake[3]: *** [CMakeFiles/main.dir/main.cpp.o] Error 1
gmake[2]: *** [CMakeFiles/main.dir/all] Error 2
gmake[1]: *** [CMakeFiles/main.dir/rule] Error 2
gmake: *** [main] Error 2

Steps to Reproduce the Problem

  1. Compile the sample code
  2. The compilation failed with the above error messages

Specifications

  • Version: 1.1.0
  • Platform: GNU/Linux: CentOS 7 with GCC 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant