injected-class-name

Why does having a declaration of a private base class render a type name inaccessible?

 ̄綄美尐妖づ 提交于 2020-04-06 02:19:10
问题 I am surprised that in the following example declaring Middle's base class private makes that name unavailable as a type in a subsequent derivation. class Base { public: Base(Base const& b) : i(b.i) {} int i; }; class Middle : private Base { //<<<<<<<<<<< public: Middle(Base const* p) : Base(*p) {} }; class Upper : public Middle { public: Upper(Base const* p) : Middle(p) {} //<<<<<<<<<<< }; Compiling thusly with g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516... g++ -std=c++11 privateBase.cpp I

Why does having a declaration of a private base class render a type name inaccessible?

﹥>﹥吖頭↗ 提交于 2020-04-06 02:18:48
问题 I am surprised that in the following example declaring Middle's base class private makes that name unavailable as a type in a subsequent derivation. class Base { public: Base(Base const& b) : i(b.i) {} int i; }; class Middle : private Base { //<<<<<<<<<<< public: Middle(Base const* p) : Base(*p) {} }; class Upper : public Middle { public: Upper(Base const* p) : Middle(p) {} //<<<<<<<<<<< }; Compiling thusly with g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516... g++ -std=c++11 privateBase.cpp I

Why does having a declaration of a private base class render a type name inaccessible?

筅森魡賤 提交于 2020-04-06 02:18:43
问题 I am surprised that in the following example declaring Middle's base class private makes that name unavailable as a type in a subsequent derivation. class Base { public: Base(Base const& b) : i(b.i) {} int i; }; class Middle : private Base { //<<<<<<<<<<< public: Middle(Base const* p) : Base(*p) {} }; class Upper : public Middle { public: Upper(Base const* p) : Middle(p) {} //<<<<<<<<<<< }; Compiling thusly with g++ (Debian 6.3.0-18+deb9u1) 6.3.0 20170516... g++ -std=c++11 privateBase.cpp I