We've started to use boost serialization and I've run into problems with serialization of derived classes. The "funny" thing is that this happens only on 64-bit Windows release compiled with MS Visual 2005. The same code works fine on Linux 32/64 bit debug/release, on Windows 32-bit debug/release and on Windows 64-bit debug. But not Windows 64-bit release. We use boost version 1.33.1. Here's the code that causes problems (Parameter is the base class, ParamCollection is a vector of Parameters): template<class Archive> static void serialize(Archive & ar, ParamCollection & col, const unsigned int /*version*/) { ar.register_type(static_cast<FloatParameter*>(NULL)); ar.register_type(static_cast<IntParameter*>(NULL)); ar.register_type(static_cast<ChoiceParameter*>(NULL)); ar.register_type(static_cast<StringParameter*>(NULL)); ar.register_type(static_cast<BlobParameter*>(NULL)); ar & boost::serialization::base_object<std::vector<Parameter*> >(col); } When serializing the ParamCollection (serializing, not deserializing) an archive exception is thrown: unregistered class. I've tried to use both abstract and non-abstract base class without any success. I did some research in the boost code and found that the exception was thrown in polymorphic::save (oserializer.hpp) by the last condition (NULL == bpos_ptr). Any clues? Is there a workaround? Thanks, Sigurd