https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90370

            Bug ID: 90370
           Summary: Does 0 correspond to a POSIX errno value for
                    std::system_category?
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

The C++ standard says in [syserr.errcat.objects]:

"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 constitutes correspondence
for any given operating system is unspecified."

Our current implementation (in src/c++11/system_error.cc) does not consider 0
to correspond to a POSIX errno value. I did that because there is no EXXX macro
defined by POSIX with value zero, as all error numbers are required to be
positive values.

Libc++ and Boost.System do consider 0 to correspond to a POSIX errno value,
meaning "no error" (and Boost even defines the boost::system::errc::success
enumerator with the value zero).

I think both positions can be justified. Zero is not an errno value, but it
does have special meaning.

Should we change our implementation?

Reply via email to