+ CHECK_GROUP(1, group)
+ CHECK_NEGATIVE(2, MPI_ERR_ARG, n)
+ CHECK_NULL(3, MPI_ERR_ARG, ranks)
+ CHECK_NULL(4, MPI_ERR_ARG, newgroup)
+ CHECK_GROUP_RANKS(group, n, ranks)
+ if (n == 0) {
+ *newgroup = group;
+ if (group != MPI_GROUP_EMPTY &&
+ group != MPI_COMM_WORLD->group() &&
+ ((smpi_process()->comm_self_is_set()) || (group != MPI_COMM_SELF->group())))
+ group->ref();
+ return MPI_SUCCESS;
+ } else if (n == group->size()) {
+ *newgroup = MPI_GROUP_EMPTY;
+ return MPI_SUCCESS;