The primary question to answer when choosing between using error codes or exceptions for signalling errors is this: do you want the error propagation code to be written by one or more humans, or do you want the compiler to generate invisible but consistent error propagation code?