N3188 - Revision to N3113: Async Launch Policies (CH 36)

git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@120027 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/future b/include/future
index be975f4..f51ccb9 100644
--- a/include/future
+++ b/include/future
@@ -27,9 +27,9 @@
 
 enum class launch
 {
-    any,
-    async,
-    sync
+    async = 1,
+    deferred = 2,
+    any = async | deferred
 };
 
 enum class future_status
@@ -470,9 +470,9 @@
 struct _LIBCPP_VISIBLE launch
 {
 enum _ {
-    any,
-    async,
-    sync
+    async = 1,
+    deferred = 2,
+    any = async | deferred
 };
 
     _ __v_;
@@ -2111,16 +2111,16 @@
 {
     typedef typename result_of<_F(_Args...)>::type _R;
     future<_R> __r;
-    if (__policy == launch::sync)
-        __r = _STD::__make_deferred_assoc_state<_R>(bind(_STD::forward<_F>(__f),
-                                               _STD::forward<_Args>(__args)...));
-    else
+    if (__policy & launch::async)
     {
         packaged_task<_R()> __pk(bind(_STD::forward<_F>(__f),
                                       _STD::forward<_Args>(__args)...));
         __r = __pk.get_future();
         thread(_STD::move(__pk)).detach();
     }
+    else if (__policy & launch::deferred)
+        __r = _STD::__make_deferred_assoc_state<_R>(bind(_STD::forward<_F>(__f),
+                                              _STD::forward<_Args>(__args)...));
     return __r;
 }