system_error::system_error(error_code ec)
not explicitSection: 19.5.8.2 [syserr.syserr.members] Status: New Submitter: Peter Dimov Opened: 2018-10-02 Last modified: 2020-04-07
Priority: 3
View all other issues in [syserr.syserr.members].
View all issues with New status.
Discussion:
The constructor for std::system_error
taking a single argument of type std::error_code
is
not marked explicit, which allows implicit conversions from error_code
to system_error
. I
think that this is an oversight and not intentional, and that we should make this constructor explicit.
[2020-04-07 Issue Prioritization]
Priority to 3 after reflector discussion.
Proposed resolution:
This wording is relative to N4762.
Change 19.5.8.1 [syserr.syserr.overview] p2, class system_error
synopsis, as indicated
namespace std { class system_error : public runtime_error { public: system_error(error_code ec, const string& what_arg); system_error(error_code ec, const char* what_arg); explicit system_error(error_code ec); system_error(int ev, const error_category& ecat, const string& what_arg); system_error(int ev, const error_category& ecat, const char* what_arg); system_error(int ev, const error_category& ecat); const error_code& code() const noexcept; const char* what() const noexcept override; }; }
Change 19.5.8.2 [syserr.syserr.members] as indicated
explicit system_error(error_code ec);-5- Effects: […]
-6- Ensures: […]