Bulk_item bulk;
Item_base *itemP = &bulk; // ok: dynamic type is Bulk_item
Item_base *itemP = &bulk; // ok: dynamic type is Bulk_item
Bulk_item *bulkP = itemP; // error: can't convert base to derived
In those cases when we know that the conversion from base to derived is safe, we can use a static_cast to override the compiler. Alternatively, we could request a conversion that is checked at run time by using a dynamic_cast.