Reputation: 704
If I call a Win32 function that reports errors via GetLastError, for example RegisterClassEx, how do I throw a std::system_error for that error?
Upvotes: 19
Views: 9750
Reputation: 91
Be aware that comparing a std::error_code
in the category of std::system_category()
doesn't generally work with the std::errc
enumeration constants depending on your vendor. E.g.
std::error_code(ERROR_FILE_NOT_FOUND, std::system_category()) != std::errc::no_such_file_or_directory)
Certain vendors require using std::generic_category()
for that to work.
In MinGW std::error_code(ERROR_FILE_NOT_FOUND, std::system_category()).message()
won't give you the correct message.
For a truly portable and robust solution I would recommend subclassing both std::system_error
and std::system_category
to windows_error
and windows_category
and implement the correct functionality yourself. YMMV, VS2017 has been reported to work as one would expect.
Upvotes: 9