Aynı soru sorulmuştur: GCC neden özel bir yuvalanmış sınıftan devralmaya izin veriyor? Şablon olmayan sınıflar için, özel iç içe geçmiş sınıflardan, , arkadaş sınıfı ise, şablon sınıfları için devralmasına izin verilir. Bu bir hata mı? 5.3.0 ++ gGCC, arkadaşınız olduğunda neden özel bir yuvalanmış sınıftan miras almaya izin vermiyor?
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:
error: 'class MyBase::MemberPrivate' is private
class MemberPrivate{};
^
error: within this context
class InheritFromBaseMember : public Base::MemberPrivate // error
^
Eğer derleyici sürümü hakkında emin misin? Bu, [burada] (https://godbolt.org/g/1uUkge) g ++ 4.9.0 ve daha büyük, 5.3.0 dahil olmak üzere iyi derler. Ancak önceki sürümlerle değil. – user2079303
Eh, Eclipse/CDT Cygwin Miscellaneous --version ile çeviri yapıyorum ve çıktı: g ++ (GCC) 5.3.0 – gerdi