PetscCallCXXAbort#
Like PetscCallCXX() but calls MPI_Abort() instead of returning an error-code
Synopsis#
#include <petscerror.h>
void PetscCallCXXAbort(MPI_Comm comm, ...) noexcept;
Collective; No Fortran Support
Input Parameters#
- comm - The MPI communicator to abort on 
- VA_ARGS - An arbitrary expression 
Notes#
This macro may be used to check C++ expressions for exceptions in cases where you cannot return an error code. This includes constructors, destructors, copy/move assignment functions or constructors among others.
If an exception is caught, the macro calls SETERRABORT() on comm. The exception must
derive from std::exception in order to be caught.
If the routine can return an error-code it is highly advised to use PetscCallCXX()
instead.
See PetscCallCXX() for additional discussion.
Example Usage#
  class Foo
  {
    std::vector<int> data_;
  public:
    // normally std::vector::reserve() may raise an exception, but since we handle it with
    // PetscCallCXXAbort() we may mark this routine as noexcept!
    Foo() noexcept
    {
      PetscCallCXXAbort(PETSC_COMM_SELF, data_.reserve(10));
    }
  };
  std::vector<int> bar()
  {
    std::vector<int> v;
    PetscFunctionBegin;
    // OK!
    PetscCallCXXAbort(PETSC_COMM_SELF, v.emplace_back(1));
    PetscFunctionReturn(v);
  }
  PetscErrorCode baz()
  {
    std::vector<int> v;
    PetscFunctionBegin;
    // WRONG! baz() returns a PetscErrorCode, prefer PetscCallCXX() instead
    PetscCallCXXAbort(PETSC_COMM_SELF, v.emplace_back(1));
    PetscFunctionReturn(PETSC_SUCCESS);
  }
See Also#
PetscCallCXX(), SETERRABORT(), PetscCallAbort()
Level#
beginner
Location#
Index of all Sys routines
Table of Contents for all manual pages
Index of all manual pages