Extract from typelist by runtime value
Prefer using \n over std::endl



Other than that, it looks like your code is rather clean and up-to-date style-wise.  I might suggest that the get_instance_by_id return the actual type, not the Base in case it gets used in a context where a specific one is known at compile time (or within other template code).