VS2013 boost mpi serialization of shared_prt<ArrayXd>
Submitted by warin
Assigned to Nobody
Link to original bugzilla bug (#1034)
Version: 3.2
Operating system: Windows
Description
Hi
The following problem only occur with VS (ok on linux with gcc, clang icc)
Not sure if it is an eigen bug or a VS one.
When using boost::mpi serializer the following code is ok:
#include <boost/mpi.hpp>
#include <boost/mpi/collectives.hpp>
boost::mpi::communicator world;
ArrayXd t;
boost::mpi::packed_iarchive ia(world);
ia >> t;
This one is still oK
#include <boost/mpi.hpp>
#include <boost/mpi/collectives.hpp>
boost::mpi::communicator world;
shared_ptr<vector< double> > t;
boost::mpi::packed_iarchive ia(world);
ia >> t;
But this one
#include <boost/mpi.hpp>
#include <boost/mpi/collectives.hpp>
boost::mpi::communicator world;
shared_ptr< ArrayXd > t;
boost::mpi::packed_iarchive ia(world);
ia >> t;
Gives the error :
Erreur 1 error C2665: 'Eigen::PlainObjectBase<Eigen::Array<double,-1,1,0,-1,1>>::operator delete' : aucune des 3 surcharges n'a pu convertir tous les types d'arguments
The error is very similar to a bug corrected last year :
https://forum.kde.org/viewtopic.php?f=74&t=122194
The faillure is the
boost_1_58_0\boost/archive/detail/iserializer.hpp
and the message
// if compilation fails here, the likely cause that the class
// T has a class specific new operator but no class specific
// delete operator which matches the following signature. Fix
// your program to have this. Note that adding operator delete
// with only one parameter doesn't seem correct to me since
// the standard(3.7.4.2) says "
// "If a class T has a member deallocation function named
// 'operator delete' with exactly one parameter, then that function
// is a usual (non-placement) deallocation function" which I take
// to mean that it will call the destructor of type T which we don't
// want to do here.
// Note: reliance upon automatic conversion from T * to void * here
seems to indicate that a delete is missing somewhere.
Sincerely yours
Xavier Warin