Questo compila e funziona bene su Visual C++ 2015 Update 3 RC:Nessun accesso o ambiguità controllo sulla funzione di membro template trovato in più classi base
class A
{
template <class T> void f() {}
};
class B : A {};
class C : A {};
class D : B, C {};
int main()
{
D d;
d.f<int>();
}
Ci sono due problemi con questo codice:
f()
è privato, quindid.f<int>()
non dovrebbe riuscire a compilare.f()
è ambiguo, come potrebbe essereB::f()
oC::f()
.
Tuttavia, non è disponibile alcuna diagnostica con /Wall
e B::f()
. L'inversione dell'ordine D
eredita da gets C::f()
chiamato, quindi suppongo che stia usando solo la prima classe di base nell'elenco.
Sia g ++ che clang vanno bene. Mi manca qualcosa o si tratta di un bug in Visual C++?
Certamente un bug. http://coliru.stacked-crooked.com/a/6ef1400b04db2ad7 – vsoftco
Considera di inviare una segnalazione di bug qui: https://connect.microsoft.com? –
@YuchenZhong Volevo solo controllare se avevo qualcosa di sbagliato. Comunque è passato da ieri. – isanae