categorias <system_error> e códigos de erro padrão / do sistema

C ++ 11 introduziu o<system_error> cabeçalho contendo um sistema genérico para manipular códigos de erro. Astd::error_code é uma tupla contendo umint, o código de erro e uma referência a umstd::error_category, que define o domínio do erro e a manipulação do código de erro. A biblioteca padrão vem com quatro categorias:std::generic_category, std::system_category, std::future_categoryestd::iostream_category.

Existem conflitos sobre qual categoria usar, aqui nos sites de referência SO e C ++, ao criarstd::error_codes / jogandostd::system_errors comerrno e códigos de erro do WinAPI:

errno comstd::generic_category: Então responde, llvm-commits, cplusplus.comerrno comstd::system_category: Então responde, cppreference.comGetLastError() comstd::generic_category: Então respondeGetLastError() comstd::system_category: Então responde, Comentário SO

Contudo,errno eGetLastError() não pode usar a mesma categoria; caso contrário, alguns códigos de erro seriam ambíguos. O código de erro 33 é um exemplo, pois é ambosEDOM eERROR_LOCK_VIOLATION.

Existem até alguns lugares que defendem uma categoria criada pelo usuário para o WinAPI, mas não consigo encontrar nenhuma referência a isso no momento. Essa alternativa seria especialmente dolorosa.

Qual categoria deve ser usada comerrnoe que deve ser usado comGetLastError() de modo a

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

são inequívocos e adequados ao código de erro subjacente?

questionAnswers(2)

yourAnswerToTheQuestion