Base sul titolo della domanda, la risposta dipende. Ma per il tuo caso nel codice sorgente, la risposta è sì.
ci sono due fattore che avrà un impatto sul answere:
Se si utilizza fusione stile C, lo farà sì, perché getto chiamerà ri-interpert fusione se nessuna conversione availible. Puoi lanciare qualsiasi tipo di puntatore al tipo di puntatore di destinazione. Ma se c'è MI, il risultato potrebbe essere errato per la maggior parte dell'implementazione del linguaggio C++.
Se si esegue il cast (senza cast di stile C) all'interno della funzione memeber, il risponditore sarà sì, poiché la classe base è accessibile all'interno della funzione membro. Se l'espressione si trova nella posizione in cui la classe base è inaccessibile, verrà visualizzato un errore di compilazione.
Non ci sono ulteriori dettagli su converstion standard nel C++ standard di
A prvalue of type “pointer to cv D”, where D is a class type, can be converted to a prvalue of type “pointer to cv B”, where B is a base class (Clause 10) of D.
If B is an inaccessible (Clause 11) or ambiguous (10.2) base class of D, a program that necessitates this conversion is ill-formed.
The result of the conversion is a pointer to the base class subobject of the derived class object. The null pointer value is converted to the null pointer value of the destination type.
Edit 2: rendere l'answere più in dettaglio.
Senza essere certi direi che è possibile, anche se ciò significherebbe sconfiggere lo scopo dell'eredità privata ... – Nbr44
Direi che non sarebbe una buona cosa seguire il significato dell'eredità "privata". Questo tipo di ereditarietà significa "è implementato in termini di", mentre l'eredità pubblica è una relazione "è-a". – JBL
Perché vuoi questo orribile hack in primo luogo? –