This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of CD1 status.
posix_error::posix_errno
concernsSection: 19.5 [syserr] Status: CD1 Submitter: Jens Maurer Opened: 2008-02-24 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [syserr].
View all issues with CD1 status.
Discussion:
19.5 [syserr]
namespace posix_error { enum posix_errno { address_family_not_supported, // EAFNOSUPPORT ...
should rather use the new scoped-enum facility (9.7.1 [dcl.enum]),
which would avoid the necessity for a new posix_error
namespace, if I understand correctly.
[ Further discussion: ]
See N2347, Strongly Typed Enums, since renamed Scoped Enums.
Alberto Ganesh Barbati also raised this issue in private email, and also proposed the scoped-enum solution.
Nick Stoughton asked in Bellevue that
posix_error
andposix_errno
not be used as names. The LWG agreed.The wording for the Proposed resolution was provided by Beman Dawes.
Proposed resolution:
Change System error support 19.5 [syserr] as indicated:
namespace posix_error {enumposix_errnoclass errc { address_family_not_supported, // EAFNOSUPPORT ... wrong_protocol_type, // EPROTOTYPE };} // namespace posix_errortemplate <> struct is_error_condition_enum<posix_error::posix_errnoerrc> : public true_type {}namespace posix_error {error_code make_error_code(posix_errnoerrc e); error_condition make_error_condition(posix_errnoerrc e);} // namespace posix_error
Change System error support 19.5 [syserr] :
Theis_error_code_enum
andis_error_condition_enum
templates may be specialized for user-defined types to indicate that such a type is eligible for classerror_code
and classerror_condition
automatic conversions, respectively.
Change System error support 19.5 [syserr] and its subsections:
- remove all occurrences of
posix_error::
- change all instances of
posix_errno
toerrc
- change all instances of
posix_category
togeneric_category
- change all instances of
get_posix_category
toget_generic_category
Change Error category objects 19.5.3.5 [syserr.errcat.objects], paragraph 2:
Remarks: The object's
default_error_condition
and equivalent virtual functions shall behave as specified for the classerror_category
. The object's name virtual function shall return a pointer to the string"POSIX""generic".
Change 19.5.4.5 [syserr.errcode.nonmembers] Class error_code
non-member functions as indicated:
error_code make_error_code(posix_errnoerrc e);Returns:
error_code(static_cast<int>(e),
.posixgeneric_category)
Change 19.5.5.5 [syserr.errcondition.nonmembers] Class error_condition
non-member functions as indicated:
error_condition make_error_condition(posix_errnoerrc e);Returns:
error_condition(static_cast<int>(e),
.posixgeneric_category)
Rationale:
Names Considered | |
---|---|
portable |
Too non-specific. Did not wish to reserve such a common word in namespace std. Not quite the right meaning, either. |
portable_error |
Too long. Explicit qualification is always required for scoped enums, so
a short name is desirable. Not quite the right meaning, either. May be
misleading because *_error in the std lib is usually an exception class
name.
|
std_error |
Fairly short, yet explicit. But in fully qualified names like
std::std_error::not_enough_memory , the std_ would be unfortunate. Not
quite the right meaning, either. May be misleading because *_error in
the std lib is usually an exception class name.
|
generic |
Short enough. The category could be generic_category . Fully qualified
names like std::generic::not_enough_memory read well. Reserving in
namespace std seems dicey.
|
generic_error |
Longish. The category could be generic_category . Fully qualified names
like std::generic_error::not_enough_memory read well. Misleading because
*_error in the std lib is usually an exception class name.
|
generic_err |
A bit less longish. The category could be generic_category . Fully
qualified names like std::generic_err::not_enough_memory read well.
|
gen_err |
Shorter still. The category could be generic_category . Fully qualified
names like std::gen_err::not_enough_memory read well.
|
generr |
Shorter still. The category could be generic_category . Fully qualified
names like std::generr::not_enough_memory read well.
|
error |
Shorter still. The category could be generic_category . Fully qualified
names like std::error::not_enough_memory read well. Do we want to use
this general a name?
|
err |
Shorter still. The category could be generic_category . Fully qualified
names like std::err::not_enough_memory read well. Although alone it
looks odd as a name, given the existing errno and namespace std names,
it seems fairly intuitive.
Problem: err is used throughout the standard library as an argument name
and in examples as a variable name; it seems too confusing to add yet
another use of the name.
|
errc |
Short enough. The "c" stands for "constant". The category could be
generic_category . Fully qualified names like
std::errc::not_enough_memory read well. Although alone it looks odd as a
name, given the existing errno and namespace std names, it seems fairly
intuitive. There are no uses of errc in the current C++ standard.
|