This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of Resolved status.
atomic_futureSection: 99 [futures.atomic_future] Status: Resolved Submitter: Alisdair Meredith Opened: 2010-01-23 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [futures.atomic_future].
View all issues with Resolved status.
Discussion:
The revised futures package in the current working paper simplified the
is_ready/has_exception/has_value set of APIs, replacing them with a
single 'valid' method. This method is used in many places to signal pre- and
post- conditions, but that edit is not complete.
Atomic future retains the extended earlier API, and provides defined,
synchronized behaviour for all calls. However, some preconditions and throws
clauses are missing, which can easily be built around the new valid()
api. Note that for consistency, I suggest is_ready/has_exception/has_value
throw an exception if valid() is not true, rather than
return false. I think this is implied by the existing pre-condition on
is_ready.
[ 2010-01-23 See discussion starting with Message c++std-lib-26666. ]
[
2010 Pittsburgh: Moved to NAD EditorialResolved. Rationale added below.
]
Rationale:
Solved by N3058.
Proposed resolution:
Insert the following extra paragraphs:
In 99 [futures.atomic_future]
bool is_ready() const;17
PreconditionRequires:valid() == true.18 Returns:
trueonly if the associated state is ready.Throws:
future_errorwith an error condition ofno_stateif the precondition is not met.
bool has_exception() const;Requires:
valid() == true.19 Returns:
trueonly if the associated state is ready and contains an exception.Throws:
future_errorwith an error condition ofno_stateif the precondition is not met.
bool has_value() const;Requires:
valid() == true.20 Returns:
trueonly if the associated state is ready and contains a value.Throws:
future_errorwith an error condition ofno_stateif the precondition is not met.
void wait() const;Requires:
valid() == true.22 Effects: blocks until ...
Throws:
future_errorwith an error condition ofno_stateif the precondition is not met.
template <class Rep, class Period> bool wait_for(const chrono::duration<Rep, Period>& rel_time) const;Requires:
valid() == true.23 Effects: blocks until ...
24 Returns:
trueonly if ...Throws:
future_errorwith an error condition ofno_stateif the precondition is not met.
template <class Clock, class Duration> bool wait_until(const chrono::time_point<Clock, Duration>& abs_time) const;Requires:
valid() == true.25 Effects: blocks until ...
26 Returns:
trueonly if ...Throws:
future_errorwith an error condition ofno_stateif the precondition is not met.