Categorías <error_sistema> y códigos de error estándar / del sistema

C ++ 11 introdujo el<system_error> encabezado que contiene un sistema genérico para manejar códigos de error. Unstd::error_code es una tupla que contiene unint, el código de error y una referencia a unstd::error_category, que define el dominio de error y el manejo del código de error. La biblioteca estándar viene con cuatro categorías:std::generic_category, std::system_category, std::future_categoryystd::iostream_category.

Existen conflictos sobre qué categoría usar, tanto aquí en SO como en sitios de referencia de C ++, al crearstd::error_codes / tirarstd::system_errors conerrno y códigos de error WinAPI:

errno constd::generic_category: Pues contesta, llvm-commits, cplusplus.comerrno constd::system_category: Pues contesta, cppreference.comGetLastError() constd::generic_category: Pues contestaGetLastError() constd::system_category: Pues contesta, Comentario

Sin embargo,errno yGetLastError() no puede usar la misma categoría, de lo contrario, algunos códigos de error serían ambiguos. El código de error 33 es un ejemplo, ya que es ambosEDOM yERROR_LOCK_VIOLATION.

Incluso hay algunos lugares que abogan por una categoría hecha por el usuario para WinAPI, pero no puedo encontrar ninguna referencia a eso en este momento. Esta alternativa sería especialmente dolorosa.

Con qué categoría se debe utilizarerrno, y que debe usarse conGetLastError() así que eso

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

son inequívocos y apropiados para el código de error subyacente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta