I am an MFC veteran that wants to use a more modern mechanism for archival, in MFC a base pointer can be written and the object recreated automatically upon the read. I've been reading the serialization documentation and I am very confused about what I need to do to make this work using Boost, the code I have so far fails to compile with a static assert in the save function in oserializer.hpp. class CMyClassBase { public: CMyClassBase():m_TagBase(0){} virtual ~CMyClassBase(){} int m_TagBase; friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int /* file_version */) { ar & m_TagBase; } }; class CMyClassDerived : public CMyClassBase { public: CMyClassDerived():m_TagDerived(1){} virtual ~CMyClassDerived(){} int m_TagDerived; friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int /* file_version */) { boost::serialization::base_object<CMyClassBase>(*this); ar & m_TagDerived; } }; BOOST_CLASS_EXPORT_GUID(CMyClassDerived, "CMyClassDerived") void save_myclass(CMyClassBase* pMyClassBase, const char * filename){ // make an archive std::ofstream ofs(filename); boost::archive::text_oarchive oa(ofs); oa << pMyClassBase; } void restore_myclass(CMyClassBase* pMyClassBase, const char * filename) { // open the archive std::ifstream ifs(filename); boost::archive::text_iarchive ia(ifs); // restore the schedule from the archive ia >> pMyClassBase; }