2

I've found that function default_error_condition doesn't work as expected in my code

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

Returned ec value has system error category, but it has to be generic, if I got it right from the documentation e.g. cppreference and gcc source code system_error.cc

UPD: also found this remark in the standard 19.5.1.5 Error category objects

The object’s default_error_condition virtual function shall behave as follows:

If the argument ev corresponds to a POSIX errno value posv, the function shall return error_condition(posv, generic_category()). Otherwise, the function shall return error_condition(ev, system_category())

What is happening here ?

I'm using g++ 7.3.0 on linux

Community
  • 1
  • 1
olpchk
  • 101
  • 5

1 Answers1

2

You're right that, because of the argument, an error_condition(ev,generic_category()) should be returned from default_error_condition and thus the output should be "generic".

Looking at the "history" of the source you linked to, this was a libstdc++ bug until very recently (just three months ago). It was bug 60555.

Jonathan's concluding comment was:

Fixed on all active branches, so will be fixed in the 6.5, 7.4, 8.3 and 9.1 releases.

So, if you were to upgrade your GCC 7.3 to 7.4 (which doesn't exist yet), you'd see the expected behaviour.

Lightness Races in Orbit
  • 378,754
  • 76
  • 643
  • 1,055