読者です 読者をやめる 読者になる 読者になる

!Inner classes have no special access to the outer class in C++.

らしいです。

C++初心者として思うに、Hogeでprivateなものは、Barのコンストラクタとして渡してもやっぱprivateのままで、アクセス不可のような気がするけどなぁ……

http://d.hatena.ne.jp/puruhime/20080117#1200583162

Nested classes can access private members and types of the containing class.
Defect report 45 clarifies that nested classes are members of the class they are nested in, and so are granted access to private members of that class.

http://gcc.gnu.org/bugs.html#nonbugs_cxx

45. Access to nested classes

http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#45

どういうことかというと

class Hoge {
        class Bar {
        public:
                Bar(Hoge& hoge) : hoge_(hoge){}
        private:
                Hoge& hoge_;
        };
        class Foo : Bar {
        };
};

のようなクラスがあるとする。
nested classがouter classのprivateにアクセスできない場合、
Foo : Bar の継承関係はIllegalとなる。
なぜなら外では、
Hoge::Bar bar;
という宣言はprivateにひっかかるから。(BarはHogeのprivate空間に位置するクラスである
でも、この継承関係はOKだよね?(BCCでもこの継承関係は通ります=親のprivate空間にアクセスできている

要するに(内部クラスが外部クラスのprivate空間にアクセスできないと)規格のミスだろ、
だから、nested classからは親のprivate空間(のメンバ変数、メンバ関数)にアクセスできるべきだろ?

という結論で(最近のコンパイラはこのアクセスを赦すようです
即ち「Borland C++5.5は駄目な子」
orz...
自分もBCB5とか使ってないで
観念してそろそろBCBをバージョンアップすべきか。
……と思ったらTurbo C++でもアクセスできなかった。
Borlandオワタ\(^o^)/
(VCも2005あたりからできるらしい)