Kompilując następujący przykład w MSVC, mamZachowanie kwalifikowanej nazwy używając prywatnego dziedziczenia
„Interfejs” nie jest dostępna z powodu zastosowania „podstawowego” „prywatny” do dziedziczą z „Interfejs”
w wierszu oznaczonym Error
. Gdy wywołanie foo
jest kwalifikowane za pomocą aliasu typu tego samego typu, to działa. Testowałem z msvc i ideone.
Dlaczego te dwa połączenia nie są równe?
struct Interface {};
template<class T>
struct Base : private T
{
void foo() {}
};
using BaseX = Base<Interface>;
class Derived : Base<Interface>
{
Derived() {
Base<Interface>::foo(); // Error
BaseX::foo(); // Works
}
};
Wygląda jak błąd msvc –
@ DieterLücking, próbowałem go używając g ++ 4.9.3 i 'BaseX :: foo();' działa. –