C++ の struct はデフォルトで public 継承

って、案外知られてないみたいですね。
どういうことかと言うと、

#include <iostream>

int main()
{
    class hoge
    {
    public:
        void f() { std::cout << "hoge" << std::endl; }
    };

    // class ex_hoge : hoge {};だと、eh.f()でエラー
    struct ex_hoge : hoge {};

    ex_hoge eh;
    eh.f();
}

これがコンパイルできる、ということです。
まぁ、あまり知られていないと言うことで、

struct ex_hoge : public hoge {};

としとくのが無難なのかも。