void field_promotion (Soldier* &x) { x= new Private(); // allowed, and updates caller's pointer variable } void caller() { General* y= new General(); field_promotion (y); // compile-time error }