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.
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.