1*c87b03e5Sespie // GROUPS passed vtable 2*c87b03e5Sespie extern "C" int printf (const char *, ...); 3*c87b03e5Sespie enum { vf_request, vf_event } want; 4*c87b03e5Sespie 5*c87b03e5Sespie int errs = 0; 6*c87b03e5Sespie 7*c87b03e5Sespie class ivResource { 8*c87b03e5Sespie public: ~ivResource()9*c87b03e5Sespie virtual ~ivResource () { } 10*c87b03e5Sespie }; 11*c87b03e5Sespie 12*c87b03e5Sespie class ivHandler : public ivResource { 13*c87b03e5Sespie public: event()14*c87b03e5Sespie virtual void event() { } 15*c87b03e5Sespie }; 16*c87b03e5Sespie 17*c87b03e5Sespie class ivGlyph : public ivResource { 18*c87b03e5Sespie public: ~ivGlyph()19*c87b03e5Sespie virtual ~ivGlyph () { } request()20*c87b03e5Sespie virtual void request () { 21*c87b03e5Sespie if (want!=vf_request) 22*c87b03e5Sespie ++errs; 23*c87b03e5Sespie } 24*c87b03e5Sespie }; 25*c87b03e5Sespie 26*c87b03e5Sespie class ItemView : public ivGlyph, public ivHandler { 27*c87b03e5Sespie public: event()28*c87b03e5Sespie virtual void event () { 29*c87b03e5Sespie if (want!=vf_event) 30*c87b03e5Sespie ++errs; 31*c87b03e5Sespie } 32*c87b03e5Sespie } a; 33*c87b03e5Sespie bar()34*c87b03e5SespieivGlyph *bar() { 35*c87b03e5Sespie return &a; 36*c87b03e5Sespie } 37*c87b03e5Sespie bar2()38*c87b03e5SespieivHandler *bar2() { 39*c87b03e5Sespie return &a; 40*c87b03e5Sespie } 41*c87b03e5Sespie main()42*c87b03e5Sespieint main() { 43*c87b03e5Sespie want=vf_request; 44*c87b03e5Sespie bar()->request(); 45*c87b03e5Sespie want=vf_event; 46*c87b03e5Sespie bar2()->event(); 47*c87b03e5Sespie if (errs) { 48*c87b03e5Sespie printf("FAIL\n"); 49*c87b03e5Sespie return 1; 50*c87b03e5Sespie } 51*c87b03e5Sespie printf("PASS\n"); 52*c87b03e5Sespie return 0; 53*c87b03e5Sespie } 54