I like the "value return" approach here, and I've been considering using it for a project I'm working on. You have to provide a place for the error to go when you call the function. You can decide to ignore it, but you can't forget that it exists. I'd be interested in hearing a contrary position, however.