| Technical Specification | ||||
| Filesystem library(filesystem TS) | ||||
| Library fundamentals(library fundamentals TS) | ||||
| Library fundamentals 2(library fundamentals TS v2) | ||||
| Library fundamentals 3(library fundamentals TS v3) | ||||
| Extensions for parallelism(parallelism TS) | ||||
| Extensions for parallelism 2(parallelism TS v2) | ||||
| Extensions for concurrency(concurrency TS) | ||||
| Extensions for concurrency 2(concurrency TS v2) | ||||
| Concepts(concepts TS) | ||||
| Ranges(ranges TS) | ||||
| Reflection(reflection TS) | ||||
| Mathematical special functions(special functions TR) | ||||
| Experimental Non-TS | ||||
| Pattern Matching | ||||
| Linear Algebra | ||||
| std::execution | ||||
| Contracts | ||||
| 2D Graphics |
| std::future extensions | ||||
| Latches and barriers | ||||
| Atomic smart pointers | ||||
template<class F> future</* see below */> then( F&& func); | ||
Attach the continuationfunc to*this. The behavior is undefined if*this has no associated shared state (i.e.,valid()==false).
Creates a shared state associated with thefuture object to be returned, and a copyfd offunc constructed as if byDECAY_COPY(std::forward<F>(func)) evaluated in the thread callingthen, whereDECAY_COPY is defined as
template<class T>std::decay_t<T> DECAY_COPY(T&& v){returnstd::forward<T>(v);} |
When the shared state currently associated with*this is ready, thecontinuationINVOKE(std::move(fd), std::move(*this)) is called on an unspecified thread of execution, whereINVOKE is the operation defined inCallable. If that expression is invalid, the behavior is undefined.
Any value returned from the continuation is stored as the result in the shared state of the returnedfuture object. Any exception propagated from the execution of the continuation is stored as the exceptional result in the shared state of the returnedfuture object.
LetU be the return type of the continuation (i.e.std::result_of_t<std::decay_t<F>(std::experimental::future<T>)>). IfU isstd::experimental::future<T2> for some typeT2, then the return type ofthen isstd::experimental::future<T2>, otherwise it isstd::experimental::future<U>. This is known asimplicit unwrapping.
If implicit unwrapping takes place and the continuation returns an invalidfuture, then the shared state is made ready with an exception of typestd::future_error with an error condition ofstd::future_errc::broken_promise.
After this function returns,valid() isfalse.
| func | - | a continuation to be attached |
Astd::experimental::future object associated with the shared state created by this object.valid()==true for the returned object.
| This section is incomplete Reason: no example |