Add std::future_error constructor from future_errc
authorJonathan Wakely <jwakely@redhat.com>
Sat, 12 Nov 2016 03:40:24 +0000 (03:40 +0000)
committerJonathan Wakely <redi@gcc.gnu.org>
Sat, 12 Nov 2016 03:40:24 +0000 (03:40 +0000)
* include/std/future (future_error): Make existing constructor
private and add constructor from future_errc.

From-SVN: r242334

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/future

index f8eb55db79f7234f76c836ad04da5ee4a94770cc..00f6670e106bbdc38564469d34c16f91694635f5 100644 (file)
@@ -1,5 +1,8 @@
 2016-11-11  Jonathan Wakely  <jwakely@redhat.com>
 
+       * include/std/future (future_error): Make existing constructor
+       private and add constructor from future_errc.
+
        * include/bits/shared_ptr.h (hash<shared_ptr<T>>): Use element_type.
        * include/bits/shared_ptr_base.h (hash<__shared_ptr<T, L>>): Likewise.
 
index fea915b0a8765f1e14633cb8a46a38400aaa7112..4d125e8fe9d3ee3a6f5a81e152df909e3434a947 100644 (file)
@@ -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<bool>(__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