#include <assert.h>

struct Parent {
  Parent(int number) : number_{number}{}

  int number_{-1};
};
struct Child1 : private Parent { Child1() : Parent(1) {} };
struct Child2 : private Parent { Child2() : Parent(2) {} };

void f(Child1& child1)
{
  Parent& parent = child1;
  parent = Child2();
}

int main()
{
  Child1 child1;
  assert(child1.number_ == 1); // Ok
  f(child1);
  assert(child1.number_ == 2); // Ok :-) (Surprise for lamers) :-)

  return 0;
}