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