The performance of the happy path matters a lot more, and I don't know of any compiler smart enough to return to different addresses for good and bad error codes. How much is the penalty for always checking a code after returning, compared to a try block that didn't catch anything (which should be free, apart from a compile time unwind table)?