New user self-registration is disabled due to spam. Please email eigen-core-team @ lists.tuxfamily.org if you need an account.
Before reporting a bug, please make sure that your Eigen version is up-to-date!
Bug 1034 - VS2013 boost mpi serialization of shared_prt<ArrayXd>
Summary: VS2013 boost mpi serialization of shared_prt<ArrayXd>
Status: NEW
Alias: None
Product: Eigen
Classification: Unclassified
Component: Core - general (show other bugs)
Version: 3.2
Hardware: x86 - 64-bit Windows
: Normal Compilation Problem
Assignee: Nobody
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-07-02 13:20 UTC by warin
Modified: 2015-07-02 13:20 UTC (History)
3 users (show)



Attachments

Description warin 2015-07-02 13:20:38 UTC
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

Note You need to log in before you can comment on or make changes to this bug.