If an upperbound is set explicitly
by using the MPI datatype MPI_UB, the corresponding index must be positive.

The MPI-1 Standard originally made vague statements about padding and alignment;
this was intended to allow the simple definition of structures that could
be sent with a count greater than one. For example,

struct {int a; char b;} foo;

may have

sizeof(foo) = sizeof(int) + sizeof(char);

defining the extent of a datatype as including an epsilon, which would
have allowed an implementation to make the extent an MPI datatype for this
structure equal to 2*sizeof(int). However, since different systems might
define different paddings, a clarification to the standard made epsilon
zero. Thus, if you define a structure datatype and wish to send or receive
multiple items, you should explicitly include an MPI_UB entry as the last
member of the structure. For example, the following code can be used for
the structure foo:

Almost all MPI routines return an error value; C routines as the
value of the function and Fortran routines in the last argument. C++ functions
do not return errors. If the default error handler is set to MPI::ERRORS_THROW_EXCEPTIONS,
then on error the C++ exception mechanism will be used to throw an MPI::Exception
object.

Before the error value is returned, the current MPI error handler
is called. By default, this error handler aborts the MPI job, except for
I/O function errors. The error handler may be changed with MPI_Comm_set_errhandler;
the predefined error handler MPI_ERRORS_RETURN may be used to cause error
values to be returned. Note that MPI does not guarantee that an MPI program
can continue past an error.