lass Archive>
    void serialize(Archive & ar, const unsigned int version){
        ar & BOOST_SERIALIZATION_NVP(m_i);
    }
protected:
    bool equals(const Base &rhs) const {
        return m_i == rhs.m_i;
    }
    Base(int i = 0) :
        m_i(i)
    {}
};

class Derived : private Base {
    friend class boost::serialization::access;
private:
    Base & base_cast(){
        return static_cast<Base &>(*this);
    }
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version){
