Now the errors are categorized so that you can handle them programmatically.
All uses of make_dynamic_error_code are removed.
Because we don't have error reporting mechanism, I just chose to print out
error messages to stdout, and then return an error object. Not sure if
that's the right thing to do, but at least it seems practical.
I'm not very happy about the size of Error.h and its density.
That defines only a few things but it is almost 100 lines long.
Maybe it's unavoidable?
I don't think you need Success. You can just use std::error_code(), no?