The FAILURE macro is essentially like an assert. It does not
return control to the caller (it throws an exception). In
debug mode, it provides some useful information, including
an English message intended for developers to see. In release
mode, a generic "Software Failure" exception is thrown.