次のコードがコンパイルされ、正常に動作する理由を説明してください (gcc-4.3.4 で確認)。選択的継承は、メンバー/メソッドへのアクセスを弱めたり、強化したりすることはできないと思いました。カプセル化のルールに違反していませんか?
#include <iostream>
class A {
protected:
void foo() { std::cout << "foo" << std::endl; }
};
class B : private A {
public:
using A::foo; //foo() becomes public?!
};
int main() {
B b;
b.foo();
return 0;
}