我发现函数 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
答案 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(尚不存在),则会看到预期的行为。