Verwendung Wenn Sie das folgende Beispiel in msvc kompilieren, bekomme ichVerhalten von qualifizierten Namen private Vererbung
'Interface' nicht zugänglich, weil 'Base' Nutzungen 'privat' zu vererben 'Interface'
in der Zeile markiert mit Error
. Wenn der Aufruf an foo
mit einem Typenalias des gleichen Typen qualifiziert wird, funktioniert es. Ich habe mit msvc und ideone getestet.
Warum sind die beiden Anrufe nicht gleich?
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
}
};
Sieht aus wie ein msvc Bug –
@ DieterLücking, ich habe es versucht mit g ++ 4.9.3 und 'BaseX :: foo();' funktioniert. –