Usage of type_id::create() vs factory::create_component

The difference is that with type_id::create you get type checking at compile or elaboration time, whereas the $cast is a run-time type check.