1template<int N> struct val { char a[N]; };
2
3class Base
4{
5public:
6  virtual val<1> get1() const = 0;
7  virtual val<2> get2() const = 0;
8  virtual val<3> get3() const = 0;
9  virtual val<4> get4() const = 0;
10};
11
12class Derived : public virtual Base
13{
14public:
15  virtual val<1> get1() const { return foo->get1(); }
16  virtual val<2> get2() const { return foo->get2(); }
17  virtual val<3> get3() const { return foo->get3(); }
18  virtual val<4> get4() const { return foo->get4(); }
19  Base *foo;
20};
21
22Base* make() { return new Derived; }
23