Compiler warnings are a very useful tool for detecting bugs in your program. Because you can enable them selectively, and because you can choose to turn them into hard errors on your compiler, you can in fact build a dialect, which is a safer subset of C++. You can enable even more warning if you assist your compiler a bit and instruct it about your intentions. We will see how to do it in one case. Continue reading
In this post I would like to discuss two issues brought up by the readers regarding previous posts on using
- Storing 0 in error codes, and using non-0 success values.
- Concerns about using globals.
In the previous posts we have seen what error codes and error conditions are. But the way we used them is far from optimum. In particular, the implementation of
FailureSourceCategory::equivalent was huge and error category
FailureSourceCategory was forced to be aware of all error codes from all sub-systems in the project. In this post we will see how we can do better, especially in more complex systems.
In the previous post we have seen how you can create your own error-code enumeration for representing different reasons for failure in your component, and how you can store them and convey them type erased via
std::error_code. In this post we will see how you can inspect an error situation encoded in
std::error_code, and how you can build useful queries about error conditions. Continue reading
I was recently implementing the “classification of error conditions” in my application offered by the functionality behind
std::error_code. In this post I want to share some of my experience and insight.
C++11 comes with a quite sophisticated mechanism for classifying error conditions. You may have encountered names like “error code”, “error condition”, error category”, but figuring out what good they are, and how to use them is difficult. The only valuable source of information on the subject in the Internet is a series of blog posts by Christopher Kohlhoff, the author of Boost.Asio library:
- “System error support in C++0x – part 1”
- “System error support in C++0x – part 2”
- “System error support in C++0x – part 3”
- “System error support in C++0x – part 4”
- “System error support in C++0x – part 5”
And this was a really good start for me. But still, I believe it would be beneficial to have more than one source of information, and more than one way of explaining the subject. So here we go… Continue reading