I have a situation where I want an additional piece of data to be owned by the archive type we're using. Previously, I had this typedef that's used throughout our code: typedef boost::archive::xml_iarchive IutputArchive; I changed it to something like this: class InputArchive : public boost::archive::xml_iarchive { public: InputArchive( std::istream& is, Foo bar ) : boost::archive::xml_iarchive( is ) , m_bar( bar ) Foo GetFoo() const { return m_bar; } private: Foo m_bar; }; The problem I'm seeing is that whenever a serializable class's serialize() method is invoked via an InputArchive object, the template parameter to serialize() is instantiated with boost::archive::xml_iarchive, not InputArchive, which I need. Is it possible to get the behavior I want through public derivation like this, or is there a better way?