From Jason Turner

[futures.state]

Diff to HTML by rtfpessoa

tmp/tmpx7h63ym0/{from.md → to.md} RENAMED
@@ -7,11 +7,11 @@ a (possibly void) value or an exception. Futures, promises, and tasks
7
  defined in this clause reference such shared state.
8
 
9
  The result can be any kind of object including a function to compute
10
  that result, as used by `async` when `policy` is `launch::deferred`.
11
 
12
- An *asynchronous return object* is an object that reads results from an
13
  shared state. A *waiting function* of an asynchronous return object is
14
  one that potentially blocks to wait for the shared state to be made
15
  ready. If a waiting function can return before the state is made ready
16
  because of a timeout ([[thread.req.lockable]]), then it is a *timed
17
  waiting function*, otherwise it is a *non-timed waiting function*.
@@ -27,11 +27,15 @@ When an asynchronous return object or an asynchronous provider is said
27
  to release its shared state, it means:
28
 
29
  - if the return object or provider holds the last reference to its
30
  shared state, the shared state is destroyed; and
31
  - the return object or provider gives up its reference to its shared
32
- state.
 
 
 
 
33
 
34
  When an asynchronous provider is said to make its shared state ready, it
35
  means:
36
 
37
  - first, the provider marks its shared state as ready; and
 
7
  defined in this clause reference such shared state.
8
 
9
  The result can be any kind of object including a function to compute
10
  that result, as used by `async` when `policy` is `launch::deferred`.
11
 
12
+ An *asynchronous return object* is an object that reads results from a
13
  shared state. A *waiting function* of an asynchronous return object is
14
  one that potentially blocks to wait for the shared state to be made
15
  ready. If a waiting function can return before the state is made ready
16
  because of a timeout ([[thread.req.lockable]]), then it is a *timed
17
  waiting function*, otherwise it is a *non-timed waiting function*.
 
27
  to release its shared state, it means:
28
 
29
  - if the return object or provider holds the last reference to its
30
  shared state, the shared state is destroyed; and
31
  - the return object or provider gives up its reference to its shared
32
+ state; and
33
+ - these actions will not block for the shared state to become ready,
34
+ except that it may block if all of the following are true: the shared
35
+ state was created by a call to `std::async`, the shared state is not
36
+ yet ready, and this was the last reference to the shared state.
37
 
38
  When an asynchronous provider is said to make its shared state ready, it
39
  means:
40
 
41
  - first, the provider marks its shared state as ready; and