C++0x has two predefined error_category
objects: generic_category()
and system_category()
. From what I have understood so far, system_category()
should be used for errors returned by the operating system, and generic_category()
should be used for the generic values found in std::errc
, which correspond to errno
values.
However, what should be done on Unix-like systems, where errno
values are the errors returned by the operating system? Should I use system_category()
(which would be wrong on non-Unix-like systems, needing an #ifdef
), or should I use generic_category()
(which would be wrong on Unix-like systems for non-standard errno
values)?
You are meant to report errors from OS (any one, including POSIX-based OSes such as Unix) using
system_category()
as C++ standard library functions do - see the quote from C++11 standard below:You should not use
system_category
unless you are in fact the operating system (or reporting an error from an OS-specific function). The category describes where the error originates from, not necessarily what the error code means. So it is perfectly legitimate to have the set of possible error codes fromsystem_category
be the same asgeneric_category
.