diff -Naurd boost/boost/mpi/detail/packed_iprimitive.hpp boost-strings/boost/mpi/detail/packed_iprimitive.hpp --- boost/boost/mpi/detail/packed_iprimitive.hpp +++ boost-strings/boost/mpi/detail/packed_iprimitive.hpp @@ -86,7 +86,8 @@ load_impl(&t, get_mpi_datatype(t), 1); } - void load( std::string & s) + template + void load( std::basic_string & s) { unsigned int l; load(l); @@ -96,16 +97,16 @@ #endif s.resize(l); // note breaking a rule here - could be a problem on some platform - load_impl(const_cast(s.data()),MPI_CHAR,l); - } + load_impl(const_cast(s.data()),MPI_CHAR,l*sizeof(char_type)); + } private: void load_impl(void * p, MPI_Datatype t, int l) - { + { BOOST_MPI_CHECK_RESULT(MPI_Unpack, (const_cast(boost::serialization::detail::get_data(buffer_)), buffer_.size(), &position, p, l, t, comm)); - } + } buffer_type & buffer_; mutable std::size_t size_; diff -Naurd boost/boost/mpi/detail/packed_oprimitive.hpp boost-strings/boost/mpi/detail/packed_oprimitive.hpp --- boost/boost/mpi/detail/packed_oprimitive.hpp +++ boost-strings/boost/mpi/detail/packed_oprimitive.hpp @@ -77,12 +77,13 @@ save_impl(&t, get_mpi_datatype(t), 1); } - void save(const std::string &s) - { + template + void save(const std::basic_string &s) + { unsigned int l = static_cast(s.size()); save(l); - save_impl(s.data(),MPI_CHAR,s.size()); - } + save_impl(s.data(),MPI_CHAR,s.size()*sizeof(char_type)); + } private: