// prms-id: 3068

extern "C" int printf(const char *, ...);
extern "C" void exit(int);
 
class LB {
public:
  virtual int test() { return 0; }
  virtual ~LB() { }
protected:
  LB() { }
};

class RRB {
public:
  virtual ~RRB() { }
  virtual void test2(int a) { }
};

class RR : public RRB {
public:
    virtual ~RR() { }
};

class RL {
public:
  virtual void real(int a) {
    printf("RL::real\n");
  }
};


class R : public RL, public RR {
public:
  virtual void test3(int a) { }
  virtual void test2(int a) { }
};

class L : public LB {
};

class C : public L, public R {
public:
  C() { }
  virtual ~C() {
    printf("C::~C\n");
    exit(1);
  }
  virtual void real(int a) {
    printf("RL::real\n");
  }
};

int main() {
    C& bb = *new C;
    R& mv = bb;
    bb.real(0);
    mv.real(0);
    return 0;
}
