With exceptions, the error handling interface is much easier. The C++ throw command creates an expection that's handled by the catch block. The nice thing only the functions that does the throw and the one that catches it need to worry about the exception. All the other functions on the call stack don't have to worry about problems and don't have to pass error codes up the call stack.