Viene posta la stessa domanda: Perché GCC consente l'ereditarietà da una classe nidificata privata? Per le classi non template, è consentito ereditare da classi nidificate private, se è un amico, ma non per le classi template. È un bug?Perché GCC non consente l'ereditazione da una classe nidificata privata quando sei un amico?
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 da g ++ 5.3.0:
error: 'class MyBase::MemberPrivate' is private
class MemberPrivate{};
^
error: within this context
class InheritFromBaseMember : public Base::MemberPrivate // error
^
Sei sicuro circa la versione del compilatore? Compila [qui] (https://godbolt.org/g/1uUkge) bene con g ++ 4.9.0 e successivi, incluso 5.3.0. Ma non con le versioni precedenti. – user2079303
Bene, io traduco con Eclipse/CDT Cygwin Miscellaneous --version e l'output è: g ++ (GCC) 5.3.0 – gerdi