From: Jonathan Wakely Date: Sat, 12 Nov 2016 03:40:24 +0000 (+0000) Subject: Add std::future_error constructor from future_errc X-Git-Tag: upstream/12.2.0~43392 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=330cc73d9838aa51c162f29ed1e5ccf659b440d3;p=platform%2Fupstream%2Fgcc.git Add std::future_error constructor from future_errc * include/std/future (future_error): Make existing constructor private and add constructor from future_errc. From-SVN: r242334 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index f8eb55d..00f6670 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,8 @@ 2016-11-11 Jonathan Wakely + * include/std/future (future_error): Make existing constructor + private and add constructor from future_errc. + * include/bits/shared_ptr.h (hash>): Use element_type. * include/bits/shared_ptr_base.h (hash<__shared_ptr>): Likewise. diff --git a/libstdc++-v3/include/std/future b/libstdc++-v3/include/std/future index fea915b..4d125e8 100644 --- a/libstdc++-v3/include/std/future +++ b/libstdc++-v3/include/std/future @@ -95,11 +95,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION */ class future_error : public logic_error { - error_code _M_code; - public: - explicit future_error(error_code __ec) - : logic_error("std::future_error: " + __ec.message()), _M_code(__ec) + explicit + future_error(future_errc __errc) + : future_error(std::make_error_code(__errc)) { } virtual ~future_error() noexcept; @@ -109,6 +108,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION const error_code& code() const noexcept { return _M_code; } + + public: + explicit + future_error(error_code __ec) + : logic_error("std::future_error: " + __ec.message()), _M_code(__ec) + { } + + friend void __throw_future_error(int); + + error_code _M_code; }; // Forward declarations. @@ -426,8 +435,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { if (static_cast(__res)) { - error_code __ec(make_error_code(future_errc::broken_promise)); - __res->_M_error = make_exception_ptr(future_error(__ec)); + __res->_M_error = + make_exception_ptr(future_error(future_errc::broken_promise)); // This function is only called when the last asynchronous result // provider is abandoning this shared state, so noone can be // trying to make the shared state ready at the same time, and