You have a class that privately derives from TWO different empty tag types and also stores one int. Empty base optimization can collapse both bases to zero bytes here. But if instead you tried to derive from the SAME empty type twice (two direct bases of identical type), what actually happens?
struct E1 {};
struct E2 {};
struct Good : E1, E2 { int x; }; // sizeof == 4
struct Bad : E1, E1 { }; // ?