boost::serialization warnings for template class

Dear Boost experts, I'm serializing (intrusively) a template class Matrix<T> that includes a double-pointer buffer of data of type T. So my save/load pair looks like template<class Archive> void save(Archive & ar, const unsigned int version) const { ar & row_dim; ar & col_dim; for ( size_t i = 0; i < row_dim; i++ ) for ( size_t j = 0; j < col_dim; j++ ) { ar & value[i][j]; } } template<class Archive> void load(Archive & ar, const unsigned int version) { size_t rowdim, coldim; ar & rowdim; ar & coldim; resize( rowdim, coldim ); for ( size_t i = 0; i < rowdim; i++ ) for ( size_t j = 0; j < coldim; j++ ) ar & value[i][j]; } The type of value is T**. The serialization works OK, but I'm getting some warnings that lead me to suspect that Boost is trying to track the addresses of the value[i][j] elements, which is not needed, and presumably a problem for performance. g++ -c -m64 -O3 -Wall -I../../include -I/usr/depot/redhatel5_64/boost/1.48.0/include -o Linux-x86_64/obj/test_Matrix.o test_Matrix.cpp /usr/depot/redhatel5_64/boost/1.48.0/include/boost/mpl/print.hpp: In instantiation of 'boost::mpl::print<boost::serialization::BOOST_SERIALIZATION_STATIC_WARNING_LINE<98>
':
/usr/depot/redhatel5_64/boost/1.48.0/include/boost/serialization/static_warning.hpp:92: instantiated from 'boost::serialization::static_warning_test<false, 98>' /usr/depot/redhatel5_64/boost/1.48.0/include/boost/archive/detail/check.hpp:98: instantiated from 'void boost::archive::detail::check_object_tracking() [with T = gcore::Matrix<int>]' /usr/depot/redhatel5_64/boost/1.48.0/include/boost/archive/detail/oserializer.hpp:313: instantiated from 'static void boost::archive::detail::save_non_pointer_type<Archive>::invoke(Archive&, T&) [with T = gcore::Matrix<int>, Archive = boost::archive::text_oarchive]' /usr/depot/redhatel5_64/boost/1.48.0/include/boost/archive/detail/oserializer.hpp:525: instantiated from 'void boost::archive::save(Archive&, T&) [with Archive = boost::archive::text_oarchive, T = gcore::Matrix<int>]' /usr/depot/redhatel5_64/boost/1.48.0/include/boost/archive/detail/common_oarchive.hpp:69: instantiated from 'void boost::archive::detail::common_oarchive<Archive>::save_override(T&, int) [with T = gcore::Matrix<int>, Archive = boost::archive::text_oarchive]' /usr/depot/redhatel5_64/boost/1.48.0/include/boost/archive/basic_text_oarchive.hpp:80: instantiated from 'void boost::archive::basic_text_oarchive<Archive>::save_override(T&, int) [with T = gcore::Matrix<int>, Archive = boost::archive::text_oarchive]' /usr/depot/redhatel5_64/boost/1.48.0/include/boost/archive/detail/interface_oarchive.hpp:63: instantiated from 'Archive& boost::archive::detail::interface_oarchive<Archive>::operator<<(T&) [with T = gcore::Matrix<int>, Archive = boost::archive::text_oarchive]' test_Matrix.cpp:43: instantiated from here /usr/depot/redhatel5_64/boost/1.48.0/include/boost/mpl/print.hpp:55: warning: comparison between signed and unsigned integer expressions Is my suspicion correct, and how do I change my code to avoid the warnings (and performance hits, if any)? Thanks! Michele
participants (1)
-
Michele Vallisneri