TITLE: Cannot access inherited protected members via base ptr [ Adapted from "C++ Gotchas", tutorial notes by Tom Cargill, p. 40 ] class Base { protected: int state; }; class Derived : public Base { public: void f () { state = 1; // fine D* dp = new D; dp->state = 2; // fine B* bp = new D; bp->state = 3; // illegal } }; For more discussion of this, see the ARM, p. 253.