|
Boost : |
Subject: [boost] miscompilation: boost.mpi, gcc 4.6 and c++0x
From: Christophe Prud'homme (prudhomm_at_[hidden])
Date: 2011-08-30 08:34:52
Dear Boost Developers
I created the ticket [1] several month ago regarding an issue between
g++-4.6 with option -std=c++0x and boost.mpi
I haven't had any feedback yet. Any idea wether boost or gcc is at fault here ?
it is easy to fix this by adding the right member function.
1. https://svn.boost.org/trac/boost/ticket/5538
let me recap what is going on
consider the following code in t.cpp:
#include <boost/mpi.hpp>
compile it with
g++ -std=c++0x -c -I/usr/include/mpi t.cpp
and you get in Debian unstable
In file included from /usr/include/c++/4.6/memory:67:0,
from /usr/include/boost/mpi/allocator.hpp:18,
from /usr/include/boost/mpi.hpp:22,
from t.cpp:1:
/usr/include/c++/4.6/bits/stl_uninitialized.h: In function 'void
std::__uninitialized_default_n_a(_ForwardIterator, _Size, _Allocator&)
[with _ForwardIterator = char*, _Size = long unsigned int, _Allocator
= boost::mpi::allocator<char>]':
/usr/include/c++/4.6/bits/vector.tcc:474:8: instantiated from 'void
std::vector<_Tp, _Alloc>::_M_default_append(std::vector<_Tp,
_Alloc>::size_type) [with _Tp = char, _Alloc =
boost::mpi::allocator<char>, std::vector<_Tp, _Alloc>::size_type =
long unsigned int]'
/usr/include/c++/4.6/bits/stl_vector.h:592:4: instantiated from
'void std::vector<_Tp, _Alloc>::resize(std::vector<_Tp,
_Alloc>::size_type) [with _Tp = char, _Alloc =
boost::mpi::allocator<char>, std::vector<_Tp, _Alloc>::size_type =
long unsigned int]'
/usr/include/boost/mpi/detail/packed_oprimitive.hpp:96:46:
instantiated from here
/usr/include/c++/4.6/bits/stl_uninitialized.h:576:6: error: no
matching function for call to
'boost::mpi::allocator<char>::construct(char*)'
/usr/include/c++/4.6/bits/stl_uninitialized.h:576:6: note: candidate is:
/usr/include/boost/mpi/allocator.hpp:168:8: note: void
boost::mpi::allocator<T>::construct(boost::mpi::allocator<T>::pointer,
const T&) [with T = char, boost::mpi::allocator<T>::pointer = char*]
/usr/include/boost/mpi/allocator.hpp:168:8: note: candidate expects
2 arguments, 1 provided
note that if you remove -std=c++0x, it compiles fine.
Best regards
C.
-- Debian Developer - member of Debian Science http://wiki.debian.org/DebianScience Prof. at Univ. Grenoble in Applied Math. http://ljk.imag.fr/membres/Christophe.Prudhomme/
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk