PetscCallCXX#
Checks C++ function calls and if they throw an exception, catch it and then return a PETSc error code
Synopsis#
#include <petscerror.h>
void PetscCallCXX(...) noexcept;
Not Collective
Input Parameter#
VA_ARGS - An arbitrary expression
Notes#
PetscCallCXX(...)
is a macro replacement for
try {
__VA_ARGS__;
} catch (const std::exception& e) {
return ConvertToPetscErrorCode(e);
}
Due to the fact that it catches any (reasonable) exception, it is essentially noexcept.
If you cannot return a PetscErrorCode
use PetscCallCXXAbort()
instead.
Example Usage#
void foo(void) { throw std::runtime_error("error"); }
void bar()
{
PetscCallCXX(foo()); // ERROR bar() does not return PetscErrorCode
}
PetscErrorCode baz()
{
PetscCallCXX(foo()); // OK
PetscCallCXX(
bar();
foo(); // OK multiple statements allowed
);
}
struct bop
{
bop()
{
PetscCallCXX(foo()); // ERROR returns PetscErrorCode, cannot be used in constructors
}
};
// ERROR contains do-while, cannot be used as function-try block
PetscErrorCode qux() PetscCallCXX(
bar();
baz();
foo();
return 0;
)
See Also#
PetscCallCXXAbort()
, PetscCallThrow()
, SETERRQ()
, PetscCall()
,
SETERRABORT()
, PetscCallAbort()
, PetscTraceBackErrorHandler()
, PetscPushErrorHandler()
,
PetscError()
, CHKMEMQ
Level#
beginner
Location#
Index of all Sys routines
Table of Contents for all manual pages
Index of all manual pages