错误处理。将系统错误代码映射到通用

时间:2018-11-01 16:15:00

标签: c++ error-handling g++ std

我发现函数 default_error_condition 不能按我的代码预期的那样工作

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

返回的 ec 值具有系统错误类别,但如果我从文档中得到正确的答案,则必须为通用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())

这是怎么回事?

我正在Linux上使用g ++ 7.3.0

1 个答案:

答案 0 :(得分:2)

您是对的,因为有这样的论点,应该从error_condition(ev,generic_category())返回default_error_condition,因此输出应该是"generic"

查看您链接到的源的“历史记录”,直到最近(仅three months ago)这都是一个libstdc ++错误。是bug 60555

乔纳森的结论是:

  

已修复所有活动分支,因此将在6.5、7.4、8.3和9.1版本中进行修复。

因此,如果您要将GCC 7.3升级到7.4(尚不存在),则会看到预期的行为。