diff mbox

Add std::future_error constructor from future_errc

Message ID 20161112033958.GA3703@redhat.com
State New
Headers show

Commit Message

Jonathan Wakely Nov. 12, 2016, 3:39 a.m. UTC
At the WG21 meeting we just approved a change to replace the
exposition-only constructor for future_error with a constructor taking
a future_errc error code enum instead. This adds it, making the
existing not-required-by-the-standard constructor private.

	* include/std/future (future_error): Make existing constructor
	private and add constructor from future_errc.

Tested powerpc64le-linux, committed to trunk.
commit c1d04bfe22e29dd047aeecce379154e75ee31eb3
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Sat Nov 12 03:27:16 2016 +0000

    Add std::future_error constructor from future_errc
    
    	* include/std/future (future_error): Make existing constructor
    	private and add constructor from future_errc.

Comments

Tim Song Nov. 12, 2016, 7:34 a.m. UTC | #1
On Fri, Nov 11, 2016 at 10:39 PM, Jonathan Wakely <jwakely@redhat.com> wrote:
> making the existing not-required-by-the-standard constructor private.

> +  public:
> +    explicit
> +    future_error(error_code __ec)
> +    : logic_error("std::future_error: " + __ec.message()), _M_code(__ec)+    { }

That doesn't look private to me...

Tim
diff mbox

Patch

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<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