While I believe that this function would allow you to create portable
struct datatypes, I don't believe it should be so restricted. That is,
I think that the first paragraph after the function interface:
Each type in the array_of_types list must be a portable datatype: I.e.,
a basic datatype, or a datatype constructed from a portable datatype
using one of the constructors MPI_TYPE_CONTIGUOUS, MPI_TYPE_VECTOR,
MPI_TYPE_INDEXED, or MPI_TYPE_SIMPLE_STRUCT.
should be deleted. Or perhaps replaced with something like:
This datatype constructor is present to allow portable struct datatypes
to be constructed. A portable datatype is a basic datatype or a
datatype constructed from portable datatypes using one of the
constructors MPI_TYPE_CONTIGUOUS, MPI_TYPE_VECTOR, MPI_TYPE_INDEXED, or
MPI_TYPE_SIMPLE_STRUCT.