Questo è il mio Snippet:Perché viene utilizzata una funzione non valida anziché una conversione implicita?
class Base{};
class Derived : private Base{};
template<class T>
class Wrapper
{
public:
template<typename T2>
Wrapper(T2&&)
{ }
};
// Function declarations
void func(Base& param);
void func(Wrapper<Derived>);
void funcUnambiguous(Wrapper<Derived>);
// Here is the Call:
Derived d = Derived();
func(d); // <- Error
GCC 4.9 mi dà: error: 'Base' is an inaccessible base of 'Derived'
Mentre faccio
Derived d = Derived();
funcUnambiguous(d);
funziona bene.
Sembra che qualsiasi funzione che richiede solo un cast economico, anche se non valida, nasconde le funzioni implicite, ma costose. Qualcuno ha idea?
Anche se malformato ?! Questo in realtà non rende la decisione, specialmente in questo caso, in cui la classe Base viene esplicitamente resa "privata". –
Vedo, ma non si tratta di un bug nello standard? Non c'è conversione implicita, nemmeno esplicita. Grazie comunque! –
@JakobRiedle La risoluzione del sovraccarico è una delle parti più complicate del C++ (IMHO). Non oserei nemmeno pensare di conoscere tutte le regole in tutti i casi, di sapere cosa sarebbe "giusto" o anche "migliore" o come tutto si sia sviluppato nel tempo. :) Immagino che dovremo accettarlo così com'è. –