When you start a service tracker in the constructor of the service, you get a segmentation fault. In my opinion, its not wierd to not support service tracking from the constructor. Making it possible from the start is fine.
This problem can be reproduced by altering the tracker example: move the tracker registration from start to the constructor and you get the following stack trace (and address sanitizer info):
cppelix/include/framework/DependencyManager.h:298:43: runtime error: member access within null pointer of type 'struct DependencyManager'
AddressSanitizer:DEADLYSIGNAL
==458276==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000040 (pc 0x564371fc8508 bp 0x7ffeac3f3300 sp 0x7ffeac3f32d0 T0)
==458276==The signal is caused by a READ memory access.
==458276==Hint: address points to the zero page.
#0 0x564371fc8508 in std::_Hashtable<unsigned long, std::pair<unsigned long const, std::vector<Cppelix::DependencyTrackerInfo, std::allocator<Cppelix::DependencyTrackerInfo> > >, std::allocator<std::pair<unsigned long const, std::vector<Cppelix::DependencyTrackerInfo, std::allocator<Cppelix::DependencyTrackerInfo> > > >, std::__detail::_Select1st, std::equal_to<unsigned long>, std::hash<unsigned long>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::_M_bucket_index(unsigned long const&, unsigned long) const /usr/include/c++/10/bits/hashtable.h:682
#1 0x564371fb65c8 in std::_Hashtable<unsigned long, std::pair<unsigned long const, std::vector<Cppelix::DependencyTrackerInfo, std::allocator<Cppelix::DependencyTrackerInfo> > >, std::allocator<std::pair<unsigned long const, std::vector<Cppelix::DependencyTrackerInfo, std::allocator<Cppelix::DependencyTrackerInfo> > > >, std::__detail::_Select1st, std::equal_to<unsigned long>, std::hash<unsigned long>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::find(unsigned long const&) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x3615c8)
#2 0x564371fa29ad in std::unordered_map<unsigned long, std::vector<Cppelix::DependencyTrackerInfo, std::allocator<Cppelix::DependencyTrackerInfo> >, std::hash<unsigned long>, std::equal_to<unsigned long>, std::allocator<std::pair<unsigned long const, std::vector<Cppelix::DependencyTrackerInfo, std::allocator<Cppelix::DependencyTrackerInfo> > > > >::find(unsigned long const&) /usr/include/c++/10/bits/unordered_map.h:920
#3 0x564371f82fbc in std::unique_ptr<Cppelix::DependencyTrackerRegistration, std::default_delete<Cppelix::DependencyTrackerRegistration> > Cppelix::DependencyManager::registerDependencyTracker<IRuntimeCreatedService, TrackerService>(unsigned long, TrackerService*) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x32dfbc)
#4 0x564371f6805f in TrackerService::TrackerService(Cppelix::DependencyRegister&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > >) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x31305f)
#5 0x564371ffede3 in Cppelix::DependencyLifecycleManager<TrackerService>::DependencyLifecycleManager(Cppelix::IFrameworkLogger*, std::basic_string_view<char, std::char_traits<char> >, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > >) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x3a9de3)
#6 0x564371ff461d in decltype (::new ((void*)(0)) Cppelix::DependencyLifecycleManager<TrackerService>((declval<Cppelix::IFrameworkLogger*&>)(), (declval<std::basic_string_view<char, std::char_traits<char> >&>)(), (declval<std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> > >)(), (declval<std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > > >)())) std::construct_at<Cppelix::DependencyLifecycleManager<TrackerService>, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > > >(Cppelix::DependencyLifecycleManager<TrackerService>*, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >&&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > >&&) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x39f61d)
#7 0x564371ff487f in void std::allocator_traits<std::allocator<Cppelix::DependencyLifecycleManager<TrackerService> > >::construct<Cppelix::DependencyLifecycleManager<TrackerService>, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > > >(std::allocator<Cppelix::DependencyLifecycleManager<TrackerService> >&, Cppelix::DependencyLifecycleManager<TrackerService>*, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >&&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > >&&) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x39f87f)
#8 0x564371feeaf2 in std::_Sp_counted_ptr_inplace<Cppelix::DependencyLifecycleManager<TrackerService>, std::allocator<Cppelix::DependencyLifecycleManager<TrackerService> >, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > > >(std::allocator<Cppelix::DependencyLifecycleManager<TrackerService> >, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >&&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > >&&) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x399af2)
#9 0x564371fe66ba in std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<Cppelix::DependencyLifecycleManager<TrackerService>, std::allocator<Cppelix::DependencyLifecycleManager<TrackerService> >, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > > >(Cppelix::DependencyLifecycleManager<TrackerService>*&, std::_Sp_alloc_shared_tag<std::allocator<Cppelix::DependencyLifecycleManager<TrackerService> > >, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >&&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > >&&) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x3916ba)
#10 0x564371fdd3b6 in std::__shared_ptr<Cppelix::DependencyLifecycleManager<TrackerService>, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<Cppelix::DependencyLifecycleManager<TrackerService> >, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > > >(std::_Sp_alloc_shared_tag<std::allocator<Cppelix::DependencyLifecycleManager<TrackerService> > >, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >&&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > >&&) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x3883b6)
#11 0x564371fd04b1 in std::shared_ptr<Cppelix::DependencyLifecycleManager<TrackerService> >::shared_ptr<std::allocator<Cppelix::DependencyLifecycleManager<TrackerService> >, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > > >(std::_Sp_alloc_shared_tag<std::allocator<Cppelix::DependencyLifecycleManager<TrackerService> > >, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >&&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > >&&) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x37b4b1)
#12 0x564371fc10f2 in std::shared_ptr<Cppelix::DependencyLifecycleManager<TrackerService> > std::allocate_shared<Cppelix::DependencyLifecycleManager<TrackerService>, std::allocator<Cppelix::DependencyLifecycleManager<TrackerService> >, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > > >(std::allocator<Cppelix::DependencyLifecycleManager<TrackerService> > const&, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >&&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > >&&) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x36c0f2)
#13 0x564371fac930 in std::shared_ptr<Cppelix::DependencyLifecycleManager<TrackerService> > std::make_shared<Cppelix::DependencyLifecycleManager<TrackerService>, Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > > >(Cppelix::IFrameworkLogger*&, std::basic_string_view<char, std::char_traits<char> >&, std::vector<Cppelix::Dependency, std::allocator<Cppelix::Dependency> >&&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > >&&) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x357930)
#14 0x564371f957cb in std::shared_ptr<Cppelix::DependencyLifecycleManager<TrackerService> > Cppelix::DependencyLifecycleManager<TrackerService>::create<ITrackerService>(Cppelix::IFrameworkLogger*, std::basic_string_view<char, std::char_traits<char> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > >, Cppelix::InterfacesList_t<ITrackerService>) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x3407cb)
#15 0x564371f76dec in auto Cppelix::DependencyManager::createServiceManager<TrackerService, ITrackerService>(std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::any, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::any> > >) (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x321dec)
#16 0x564371f516e6 in main /home/bob/cppelix/cppelix/examples/tracker_example/main.cpp:35
#17 0x7fa004560cc9 in __libc_start_main ../csu/libc-start.c:308
#18 0x564371f50879 in _start (/home/bob/cppelix/cppelix/bin/cppelix_tracker_example+0x2fb879)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /usr/include/c++/10/bits/hashtable.h:682 in std::_Hashtable<unsigned long, std::pair<unsigned long const, std::vector<Cppelix::DependencyTrackerInfo, std::allocator<Cppelix::DependencyTrackerInfo> > >, std::allocator<std::pair<unsigned long const, std::vector<Cppelix::DependencyTrackerInfo, std::allocator<Cppelix::DependencyTrackerInfo> > > >, std::__detail::_Select1st, std::equal_to<unsigned long>, std::hash<unsigned long>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true> >::_M_bucket_index(unsigned long const&, unsigned long) const
==458276==ABORTING