Using a return value does not have zero overhead, but this is another one of those things that nobody will ever agree on, so may as well stick with consistency..

You could always use an algebraic data type :p