This bugzilla service is closed. All entries have been migrated to https://gitlab.com/libeigen/eigen
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: 2019-12-04 14:43 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
Comment 1 Nobody 2019-12-04 14:43:47 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to gitlab.com's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.com/libeigen/eigen/issues/1034.

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