template < class eArchive > void MtxAnsFunctionIntegerPipe::serialize( eArchive& aArchive, const unsigned int aVersion ) { aArchive & BOOST_SERIALIZATION_BASE_OBJECT_NVP( MtxAnmFunctionTpl<int> ) ; aArchive & BOOST_SERIALIZATION_NVP( mVariable ) ; } #define BOOST_SERIALIZATION_BASE_OBJECT_NVP(name) \ boost::serialization::make_nvp( \ BOOST_PP_STRINGIZE(name), \ boost::serialization::base_object<name >(*this) \ The stringized class name ("MtxAnmFunctionTpl<int>") generate a non valid XML tag name (due to < > ) There is no BOOST_SERIALIZATION_BASE_OBJECT_NVP2( type, tag) macro (as BOOST_CLASS_EXPORT_KEY2(class, key) for BOOST_EXPORT_CLASS_KEY(class) ). Such a macro is necessary to write things like : aArchive & BOOST_SERIALIZATION_BASE_OBJECT_NVP2( MtxAnmFunctionTpl<int>, "MtxAnmFunctionTplInt" ) ; In the next release ? Alain K.