Обработка ошибок. Отображение кодов ошибок системы в общий - PullRequest
0 голосов
/ 01 ноября 2018

Я обнаружил, что функция default_error_condition не работает должным образом в моем коде

auto ec = std::system_category().default_error_condition(EACCES);
std::cout << ec.value() << std::endl << ec.category().name() << std::endl;

Возвращено ec значение имеет system категорию ошибки, но оно должно быть generic , если я правильно понял из документации, например. cppreference и исходный код gcc system_error.cc

UPD: также нашел это замечание в стандарте 19.5.1.5 Объекты категории ошибок

Виртуальная функция объекта default_error_condition должна вести себя следующим образом:

Если аргумент ev соответствует значению POSIX errno posv, функция должна возвращать error_condition (posv, generic_category ()). В противном случае функция должна вернуть error_condition (ev, system_category ())

Что здесь происходит?

Я использую G ++ 7.3.0 на Linux

1 Ответ

0 голосов
/ 01 ноября 2018

Вы правы, что из-за аргумента error_condition(ev,generic_category()) должно быть возвращено из default_error_condition и, следовательно, должно быть "generic".

Если посмотреть на «историю» источника, на который вы ссылались, то это была ошибка libstdc ++ до самого недавнего времени (всего три месяца назад ). Это была ошибка 60555 .

Заключительный комментарий Джонатана был:

Исправлено на всех активных ветках, поэтому будет исправлено в версиях 6.5, 7.4, 8.3 и 9.1.

Итак, если бы вы обновили свой GCC 7.3 до 7.4 (который еще не существует), вы бы увидели ожидаемое поведение.

...