<system_error> категории и стандартные / системные коды ошибок

C ++ 11 представил<system_error> заголовок, содержащий общую систему для обработки кодов ошибок.std::error_code это кортеж, содержащийint, код ошибки и ссылка наstd::error_category, который определяет область ошибок и обработку кода ошибки. Стандартная библиотека поставляется с четырьмя категориями:std::generic_category, std::system_category, std::future_category, а такжеstd::iostream_category.

Существуют конфликты по поводу того, какую категорию использовать, как здесь, на SO, так и на ссылочных сайтах C ++, при созданииstd::error_codeс / метательнымstd::system_errorсerrno и коды ошибок WinAPI:

errno сstd::generic_category: Так ответь, LLVM-фиксаций, cplusplus.comerrno сstd::system_category: Так ответь, cppreference.comGetLastError() сstd::generic_category: Так ответьGetLastError() сstd::system_category: Так ответь, ТАК комментарий

Тем не мение,errno а такжеGetLastError() нельзя использовать одну и ту же категорию, иначе некоторые коды ошибок будут неоднозначными. Код ошибки 33 является одним из примеров, так как онEDOM а такжеERROR_LOCK_VIOLATION.

Есть даже некоторые места, которые защищают пользовательскую категорию для WinAPI, но я не могу найти никаких ссылок на это в данный момент. Эта альтернатива была бы особенно болезненной.

Какая категория должна использоваться сerrnoи который следует использовать сGetLastError() чтобы

std::error_code::default_error_condition()std::error_code::message()

являются однозначными и соответствуют базовому коду ошибки?

Ответы на вопрос(1)

Ваш ответ на вопрос