
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 "/opt/sunstudio12.1/bin/CC" +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 "/scratch2/kbelco/boost/results/boost/bin.v2/libs/mpi/test/all_gather_test-1.test/sun-5.10/debug/address-model-64/stdlib-sun-stlport/all_gather_test.o" "../libs/mpi/test/all_gather_test.cpp" "../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 __dflt_argK(). "../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 *, mpl_::bool_<0>). "../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