<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Nov 14, 2013 at 12:02 PM, Geoffrey Irving <span dir="ltr"><<a href="mailto:irving@naml.us" target="_blank">irving@naml.us</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Is there a safe way to make petsc throw exceptions from C++ code,<br>

without interfering with the same passage from errors through C code?<br>
The existence of PETSC_ERROR_IN_CXX and PetscPushErrorHandler seems<br>
promising?  Could I push a C++ error handler at the top of a C++<br>
function and pop it and the end, for example?<br></blockquote><div><br></div><div>PyLith uses:</div><div><br></div><div>#define PYLITH_CHECK_ERROR(err) do {if (PetscUnlikely(err)) {PetscError(PETSC_COMM_SELF,__LINE__,PETSC_FUNCTION_NAME,__FILE__,err,PETSC_ERROR_IN_CXX,0);}} while(0)</div>
<div><br></div><div>#define PYLITH_CHECK_ERROR_MSG(err, msg) \</div><div>  if (err) { \</div><div>    PetscError(PETSC_COMM_SELF,__LINE__,__FUNCT__,__FILE__,err,PETSC_ERROR_IN_CXX, 0, " "); \</div><div>    throw std::runtime_error(msg); }</div>
<div><br></div><div>   Matt</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Note that "no" is a fine answer. :)  I only want to do this if there's<br>
a way to do it cleanly.  The alternative is wrapping a CHECK macro<br>
around all my calls to petsc from C++, which is far superior to a<br>
fancy but broken solution.<br>
<br>
Thanks,<br>
Geoffrey<br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead.<br>
-- Norbert Wiener
</div></div>