下のプログラムを組んでみて疑問がありまする。
基底クラスのインスタンスを渡しているのに、派生クラスにキャストすると
派生クラスのメンバ関数foo2が呼べるのはなぜですか?(最初は落ちるかと思ったんだけど…)

#include <iostream>

class A {

};

class B : public A {
    public:
        void foo(A* a) {
            B *b = static_cast<B*>(a);
            b->foo2();
        }

        void foo2() {
            std::cout << "B::hoge()" << std::endl;
        }
};


int main(int argc, char* argv[]) {
    A a;
    B b;
    b.foo(&a);

    return 0;
}