extern "C" int printf(const char *, ...);

class A_table {
  int c;
public:
  A_table() { c = 3;}
  virtual void func2(int &item) { printf("func2(%d,) c=%d\n",item,c);}
};

class B_table : private A_table {
  typedef void (B_table::* B_ti_fn) (int &item);
public:
  B_table() { j = 0x4321;}
  virtual void call_fn_fn1(int &item, void *pfn1);
  void func1(int &item) { printf("func1(%d)\n",item);}
  virtual void func2(int &item) { printf("func2(%d) j=%d\n",item,j);}
  int j;
};

class foo : public A_table {
public:
  int i;
  virtual ~foo();
  virtual void func2(int &item) { printf("func2(%d) i=%d\n",item,i);}
};
foo::~foo() { i = 0;}

class bar :public foo,public B_table {
public:
  int w;
  virtual ~bar();
  virtual void func2(int &item) { printf("func2(%d) w=%d\n",item,w);}
};
bar::~bar() { w = 0;}

void B_table::call_fn_fn1(int &item, void *pfn1) {
  (this->*(*(B_ti_fn*)pfn1))(item);
}

B_table b;
bar jar;

int main() {
  printf("ptr to B_table=%x, ptr to A_table=%x\n",&b,(A_table*)&b);
  B_table::B_ti_fn z = &B_table::func1;
  int j = 1;
  jar.call_fn_fn1(j,(void *)&z);
  j++;
  z = &B_table::func2;
  b.call_fn_fn1(j,(void *)&z);
  j++;
  jar.call_fn_fn1(j,(void *)&z);
  return 0;
}
