boost::system::error_code is the most basic class in Boost.System; it represents operating system-specific errors. Because operating systems typically enumerate errors, boost::system::error_code saves an error code in a variable of type int.
1. error_code
include <boost/system/error_code.hpp> #include <iostream> using namespace boost::system; void fail(error_code &ec) { ec = errc::make_error_code(errc::not_supported); } int main() { error_code ec; fail(ec); std::cout << ec.value() << std::endl;
std::cout << ec.category() << std::endl; return 0; }
boost::system::errc::not_supported is a number and ec is an object of type boost::system::error_code, the function boost::system::errc::make_error_code() is called. This function creates an object of type boost::system::error_code with the respective error code.
value() member function returns the error code stored in the object.
Error codes of type boost::system::error_code
belong to a category that can be retrieved with the member function category()
. Errors created with boost::system::errc::make_error_code()
automatically belong to the generic category. This is the category errors belong to if they aren’t assigned to another category explicitly.
2. creating error category
#include <boost/system/error_code.hpp> #include <string> #include <iostream> class application_category : public boost::system::error_category { public: const char *name() const noexcept { return "my app"; } std::string message(int ev) const { return "error message"; } }; application_category cat; int main() { boost::system::error_code ec(129, cat); std::cout << ec.value() << std::endl; std::cout << ec.category().name() << std::endl; return 0; }
A new error category is defined by creating a class derived from boost::system::error_category. This requires you to define various member functions. At a minimum, the member functions name() and message() must be supplied because they are defined as pure virtual member functions in boost::system::error_category. While name() returns the name of the error category, message() is used to retrieve the error description for a particular error code.
3. error_condition
#include <boost/system/error_code.hpp> #include <iostream> using namespace boost::system; void fail(error_code &ec) { ec = errc::make_error_code(errc::not_supported); } int main() { error_code ec; fail(ec); boost::system::error_condition ecnd = ec.default_error_condition(); std::cout << ecnd.value() << std::endl; std::cout << ecnd.category().name() << std::endl; return 0; }
boost::system::error_condition is used just like boost::system::error_code.
While the class boost::system::error_code
is used for platform-dependent error codes, boost::system::error_condition
is used to access platform-independent error codes. The member function default_error_condition()
translates a platform-dependent error code into a platform-independent error code of type boost::system::error_condition
.