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

C ++ 11 introduziu o<system_error>&nbsp;cabeçalho contendo um sistema genérico para manipular códigos de erro. Astd::error_code&nbsp;é 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&nbsp;e códigos de erro do WinAPI:

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

Contudo,errno&nbsp;eGetLastError()&nbsp;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&nbsp;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()&nbsp;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?