Both are 'safe/sane/correct' if the caller checks before use. The issue is what happens if the caller doesn't check. Which is better, some flavour of null error or using an invalid value? There is no single correct answer. It depends on what you are worried about. If crashes are _really_ bad but the answer isn't critical or has an excepted default value, then perhaps using a boolean as a flag is better. If using the wrong answer is a greater issue than crashing, then using null is better. For the majority of the 'typical' cases, fast failure and forcing the callers to check is the fastest way to sane code. Hence, I think null should be the default choice but I wouldn't put too much faith in the "X is the root of all evil" evangelists. They normally haven't anticipated all the use cases.