On Nov 25, 2005, at 5:37 PM, Audet, Martin wrote:
First the MPI_Offset datatype is defined as a preprocessor macro as
follow in mpi.h:
/* Type of MPI_Offset */
#define MPI_Offset long long
This generate a syntax error when MPI_Offset is used in C++ for what
Stroustrup call a value construction (e.g. type ( expr_list ) c.f.
section 6.2 in The C++ programming language).
The obvious solution is to define MPI_Offset as a typedef as follow:
/* Type of MPI_Offset */
typedef long long MPI_Offset;
It's currently a #define right now for convenience in our configure
script (we just AC_DEFINE it). We can certainly change it over to a
typedef; it takes a little trickery on the Autoconf side of things
because we can't AC_SUBST in there, but there's a workaround for that.
I'll put this in tonight so that it will be in tomorrow's trunk nightly
snapshot.
The seccond problem is related to the C++ interface: it uses direct
C-style type cast that remove constness. Since ISO/C++ have the
const_cast operator especially for this situation, the compiler
generates TONS of warnings (I use to compile my code with -Wall and
many other warning activated) and this is really annoying.
Excellent catch. We didn't explicitly test for this case with -Wall
for compiling C++ codes. I'll put this in tonight as well (be sure to
let me know if I miss any).
Many thanks!
--
{+} Jeff Squyres
{+} The Open MPI Project
{+} http://www.open-mpi.org/