Boost logo

Boost :

Subject: Re: [boost] [1.44] Beta progress?
From: Robert Ramey (ramey_at_[hidden])
Date: 2010-07-22 14:47:34

Matthias Troyer wrote:
> On 22 Jul 2010, at 11:32, Robert Ramey wrote:
> No, this is not what caused the break, and making these default
> constructible again does not "hide a problem".
> But indeed we need the size of the type IN MEMORY to be able to send
> it over the net and we need to default construct the object to
> receive into it. SO far those types have been default constructible,
> but you now changed that - this is what causes the compilation
> errors.
> Please recall that we send directly from memory to memory via the
> network and don't use files or the representation in files.

One other question that I forgot to ask: Why does this show up only
on the Sun Compiler. I'm only seeing the compiler error message

+d -library=stlport4 -features=tmplife -features=tmplrefstatic -g -erroff=%none
 -m64 -KPIC -DBOOST_ALL_NO_LIB=1 -I".." -I"/opt/SUNWhpc/HPC8.1/sun/include"
-I"/opt/SUNWhpc/HPC8.1/sun/include/openmpi" -c -o

"../boost/mpi/datatype_fwd.hpp", line 28: Error: Could not find a match for
boost::archive::class_id_optional_type::class_id_optional_type() needed in
"../boost/mpi/collectives/broadcast.hpp", line 134: Where: While
instantiating "boost::mpi::detail::broadcast_impl<std::string>(const
boost::mpi::communicator&, std::string *, int, int, mpl_::bool_<0>)".
"../boost/mpi/collectives/broadcast.hpp", line 134: Where: Instantiated
from boost::mpi::broadcast<std::string>(const boost::mpi::communicator&,
std::string *, int, int).
"../boost/mpi/collectives/all_gather.hpp", line 44: Where: Instantiated
from boost::mpi::detail::all_gather_impl<std::string>(const
boost::mpi::communicator&, const std::string *, int, std::string *,
"../boost/mpi/collectives/all_gather.hpp", line 68: Where: Instantiated
from boost::mpi::all_gather<std::string>(const boost::mpi::communicator&,
const std::string &, std::vector<std::string>&).
"../libs/mpi/test/all_gather_test.cpp", line 40: Where: Instantiated
from all_gather_test<string_generator>(const boost::mpi::communicator&,
string_generator, const char*).
"../libs/mpi/test/all_gather_test.cpp", line 105: Where: Instantiated
from non-template code.
Warning: A reference return value should be an lvalue (if the value of this
function is used, the result is unpredictable).

where the offending line 28 at datatype_fwd.hpp is

template<typename T> MPI_Datatype get_mpi_datatype(const T& x = T());

Also note the Warning.

Are you sure that there is no way around the mpi library requiring a default
constructor which
it should never invoke? That makes the mpi library dependent on an internal
detail of the
the serialization library. Is that the best/only way to handle this?

Robert Ramey

Boost list run by bdawes at, gregod at, cpdaniel at, john at