8
問同樣的問題:爲什麼GCC允許從私有嵌套類繼承? 對於非模板類,它允許從私有嵌套類繼承, 如果它是朋友,但不適用於模板類。 這是一個錯誤?當你是朋友時,爲什麼GCC不允許從私有嵌套類繼承?
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從克++ 5.3.0:
error: 'class MyBase::MemberPrivate' is private
class MemberPrivate{};
^
error: within this context
class InheritFromBaseMember : public Base::MemberPrivate // error
^
你確定編譯器的版本?它編譯[這裏](https://godbolt.org/g/1uUkge)很好用g ++ 4.9.0和更高版本,包括5.3.0。但不適用於早期版本。 – user2079303
那麼,我翻譯與Eclipse/CDT Cygwin其他 - 版本和輸出是:g ++(GCC)5.3.0 – gerdi