Listing 3

class B 
{ 
    BEGIN_REFLECTION(B)
    END_REFLECTION
};
class X : virtual public B 
{ 
    BEGIN_REFLECTION(X)
    DEF_REFLECTED_VIRTUAL_BASECLASS(B)
    END_REFLECTION
};
class Y : virtual public B 
{ 
    BEGIN_REFLECTION(Y)
    DEF_REFLECTED_VIRTUAL_BASECLASS(B)
    END_REFLECTION
};
class Z : public B 
{ 
    BEGIN_REFLECTION(Z)
    DEF_REFLECTED_BASECLASS(B)
    END_REFLECTION
};

class AA : public X, public Y, public Z 
{ 
    BEGIN_REFLECTION(AA)
    DEF_REFLECTED_BASECLASS(X)
    DEF_REFLECTED_BASECLASS(Y)
    DEF_REFLECTED_BASECLASS(Z)
    END_REFLECTION
};
std::cout << getRecordDesc(AA());