Cùng một câu hỏi được hỏi: Tại sao GCC cho phép kế thừa từ một lớp lồng nhau riêng? Đối với các lớp không phải mẫu, được phép kế thừa từ các lớp lồng nhau riêng, nếu đó là một người bạn, nhưng không được cho các lớp mẫu. Đây có phải là lỗi không?Tại sao GCC không cho phép kế thừa từ lớp lồng nhau riêng tư khi bạn là bạn?
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 từ g ++ 5.3.0:
error: 'class MyBase::MemberPrivate' is private
class MemberPrivate{};
^
error: within this context
class InheritFromBaseMember : public Base::MemberPrivate // error
^
Bạn có chắc chắn về phiên bản trình biên dịch? Nó biên dịch [ở đây] (https://godbolt.org/g/1uUkge) tốt với g ++ 4.9.0 trở lên, bao gồm 5.3.0. Nhưng không phải với các phiên bản trước đó. – user2079303
Vâng, tôi dịch với Eclipse/CDT Cygwin Miscellaneous --version và đầu ra là: g ++ (GCC) 5.3.0 – gerdi