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/


Reply via email to