#include <stdio.h>
int id=0;
struct if0 {
    virtual ~if0() { }
    virtual void if0method() { printf("if0method\n"); }
};

struct if1 {
    virtual ~if1() { }
    virtual void if1method() { printf("if1method\n"); }
};

struct if2 {
    virtual ~if2() { }
    virtual void if2method() { printf("if2method\n"); }
};


struct vobj : if0, if1, if2 {
    vobj() : _id(id++) { printf("vobj(%d)=%p\n", _id, this); }
    virtual ~vobj() { printf("~vobj(%d)=%p\n", _id, this); }

    int _id;
};

int main(int, char**)
{
    vobj *obj= new vobj();
    printf("created vobj: %p\n", obj);
    delete obj;
    if0 *o0= new vobj();
    printf("created vobj-if0: %p\n", o0);
    delete o0;
    if1 *o1= new vobj();
    printf("created vobj-if1: %p\n", o1);
    delete o1;
    if2 *o2= new vobj();
    printf("created vobj-if2: %p\n", o2);
    delete o2;

    return 0;
}
