To samo pytanie jest zadawane: Dlaczego GCC pozwala dziedziczyć z prywatnej klasy zagnieżdżonej? W przypadku klas innych szablonów, dozwolone jest dziedziczenie z prywatnych klas zagnieżdżonych, jeśli jest to przyjaciel, ale nie dla klas szablonów. Czy to błąd?Dlaczego GCC nie pozwala na dziedziczenie z prywatnej klasy zagnieżdżonej, gdy jesteś przyjacielem?
template<class Base>
class InheritFromBaseMember : public Base::MemberPrivate // error
{
using PrivateMember = typename Base::MemberPrivate; // works fine
};
class MyBase{
friend class InheritFromBaseMember<MyBase>;
// another try to declare it friend
template<class T>
friend class InheritFromBaseMember;
friend class AnotherClass;
class MemberPrivate{};
};
class AnotherClass : public MyBase::MemberPrivate{}; // works fine
int main() {
InheritFromBaseMember<MyBase>{};
}
ErrorMessage z g ++ 5.3.0:
error: 'class MyBase::MemberPrivate' is private
class MemberPrivate{};
^
error: within this context
class InheritFromBaseMember : public Base::MemberPrivate // error
^
Czy na pewno o wersji kompilatora? Kompiluje [tutaj] (https://godbolt.org/g/1uUkge) dobrze z g ++ 4.9.0 i nowszymi, w tym 5.3.0. Ale nie we wcześniejszych wersjach. – user2079303
Cóż, tłumaczę z Eclipse/CDT Cygwin Miscellaneous --version, a wynik to: g ++ (GCC) 5.3.0 – gerdi