diff --git a/libcxx/include/__system_error/system_error.h b/libcxx/include/__system_error/system_error.h --- a/libcxx/include/__system_error/system_error.h +++ b/libcxx/include/__system_error/system_error.h @@ -39,6 +39,7 @@ private: static string __init(const error_code&, string); + static string __init(const error_code&); }; _LIBCPP_NORETURN _LIBCPP_EXPORTED_FROM_ABI void __throw_system_error(int __ev, const char* __what_arg); diff --git a/libcxx/src/system_error.cpp b/libcxx/src/system_error.cpp --- a/libcxx/src/system_error.cpp +++ b/libcxx/src/system_error.cpp @@ -243,6 +243,16 @@ return what_arg; } +string +system_error::__init(const error_code& ec) +{ + if (ec) + { + return ec.message(); + } + return string(); +} + system_error::system_error(error_code ec, const string& what_arg) : runtime_error(__init(ec, what_arg)), __ec_(ec) @@ -256,7 +266,7 @@ } system_error::system_error(error_code ec) - : runtime_error(__init(ec, "")), + : runtime_error(__init(ec)), __ec_(ec) { } @@ -274,7 +284,7 @@ } system_error::system_error(int ev, const error_category& ecat) - : runtime_error(__init(error_code(ev, ecat), "")), + : runtime_error(__init(error_code(ev, ecat))), __ec_(error_code(ev, ecat)) { }