I* u
O* da, ne obratno, što je slučaj sa originalnim kodom.
Što se javnog nasleđivanja tiče, biću iskren, nisam siguran koja su tačno pravila - probao sam kod sa g++ 4.7 i ne radi bez javnog nasleđivanja, što ne znači da je tako u standardu.
Pogledaj recimo
Protected/Private Inheritance Casting i
C-Style upcast and downcast involving private inheritance pitanja na StackOverflow-u.