Как вы используете std::system_error с GetLastError?
Если я вызываю функцию Win32, которая сообщает об ошибках через GetLastError, например RegisterClassEx, как я могу вызвать std::system_error для этой ошибки?
2 ответа
Помните, что сравнивая std::error_code
в категории std::system_category()
обычно не работает с std::errc
константы перечисления в зависимости от вашего поставщика. Например
std::error_code(ERROR_FILE_NOT_FOUND, std::system_category()) != std::errc::no_such_file_or_directory)
Некоторые поставщики требуют использования std::generic_category()
чтобы это работало.
В минГВ std::error_code(ERROR_FILE_NOT_FOUND, std::system_category()).message()
не даст вам правильное сообщение.
Для действительно портативного и надежного решения я бы порекомендовал std::system_error
а также std::system_category
в windows_error
а также windows_category
и реализовать правильную функциональность самостоятельно. Сообщалось, что YMMV, VS2017 работает так, как и следовало ожидать.