|
272 | 272 |
|
273 | 273 | \pnum
|
274 | 274 | In several places in this Clause the operation
|
275 |
| -\indextext{DECAY_COPY@\tcode{\textit{DECAY_COPY}}}% |
276 |
| -\indexlibrary{DECAY_COPY@\tcode{\textit{DECAY_COPY}}}% |
277 |
| -{\tcode{\textit{DECAY_COPY}(x)}} is used. All |
| 275 | +\indextext{DECAY_COPY@\tcode{\placeholder{DECAY_COPY}}}% |
| 276 | +\indexlibrary{DECAY_COPY@\tcode{\placeholder{DECAY_COPY}}}% |
| 277 | +{\tcode{\placeholdernc{DECAY_COPY}(x)}} is used. All |
278 | 278 | such uses mean call the function \tcode{decay_copy(x)} and use the
|
279 | 279 | result, where \tcode{decay_copy} is defined as follows:
|
280 | 280 |
|
|
520 | 520 | \pnum
|
521 | 521 | \requires\ \tcode{F} and each \tcode{Ti} in \tcode{Args} shall satisfy the
|
522 | 522 | \tcode{MoveConstructible} requirements.
|
523 |
| -\tcode{\textit{INVOKE}(\textit{DECAY_COPY}(} |
524 |
| -\tcode{std::forward<F>(f)), \textit{DECAY_COPY}(std::forward<Args>(args))...)}~(\ref{func.require}) shall be |
| 523 | +\tcode{% |
| 524 | +\placeholdernc{INVOKE}(\brk{}% |
| 525 | +\placeholdernc{DECAY_COPY}(\brk{}% |
| 526 | +std::forward<F>(f)), |
| 527 | +\placeholdernc{DECAY_COPY}(\brk{}% |
| 528 | +std::forward<Args>(\brk{}args))...)}~(\ref{func.require}) shall be |
525 | 529 | a valid expression.
|
526 | 530 |
|
527 | 531 | \pnum
|
|
531 | 535 |
|
532 | 536 | \pnum
|
533 | 537 | \effects\ Constructs an object of type \tcode{thread}. The new thread of execution executes
|
534 |
| -\tcode{\textit{INVOKE}(\textit{DECAY_COPY}(}\ |
535 |
| -\tcode{std::forward<F>(f)), \textit{DECAY_COPY}(std::forward<Args>(args))...)} with the calls to |
536 |
| -\brk{}\tcode{\textit{DECAY_COPY}} being evaluated in the constructing thread. Any return value from this invocation |
| 538 | +\tcode{% |
| 539 | +\placeholdernc{INVOKE}(\brk{}% |
| 540 | +\placeholdernc{DECAY_COPY}(\brk{}% |
| 541 | +std::forward<F>(f)), |
| 542 | +\placeholdernc{DECAY_COPY}(\brk{}% |
| 543 | +std::forward<Args>(\brk{}args))...)} with the calls to |
| 544 | +\tcode{\placeholder{DECAY_COPY}} being evaluated in the constructing thread. Any return value from this invocation |
537 | 545 | is ignored. \begin{note} This implies that any exceptions not thrown from the invocation of the copy
|
538 | 546 | of \tcode{f} will be thrown in the constructing thread, not the new thread. \end{note} If the
|
539 | 547 | invocation of
|
540 |
| -\tcode{\textit{INVOKE}(\textit{DECAY_COPY}(} |
541 |
| -\tcode{std::forward<F>(f)), \textit{DECAY_COPY}(std::forward<Args>(args))...)} |
| 548 | +\tcode{\placeholdernc{INVOKE}(\placeholdernc{DECAY_COPY}(} |
| 549 | +\tcode{std::forward<F>(f)), \placeholdernc{DECAY_COPY}(std::forward<Args>(args))...)} |
542 | 550 | terminates with an uncaught exception, \tcode{terminate} shall be called.
|
543 | 551 |
|
544 | 552 |
|
|
2782 | 2790 | \begin{itemdescr}
|
2783 | 2791 | \pnum
|
2784 | 2792 | \requires
|
2785 |
| -\tcode{\textit{INVOKE}(\brk{}} |
2786 |
| -\tcode{std::forward<Callable>(func), |
2787 |
| -std::forward<Args>(args)...)} \brk{}(\ref{func.require}) shall be |
| 2793 | +\tcode{\placeholdernc{INVOKE}(\brk{}% |
| 2794 | +std::forward<Callable>(func), |
| 2795 | +std::forward<Args>(args)...)}~(\ref{func.require}) shall be |
2788 | 2796 | a valid expression.
|
2789 | 2797 |
|
2790 | 2798 | \pnum
|
2791 | 2799 | \effects An execution of \tcode{call_once} that does not call its \tcode{func} is a
|
2792 | 2800 | \term{passive} execution. An execution of \tcode{call_once} that calls its \tcode{func}
|
2793 | 2801 | is an \term{active} execution. An active execution shall call
|
2794 |
| -\tcode{\textit{INVOKE}(} |
2795 |
| -\tcode{std::forward<Callable>(func), |
| 2802 | +\tcode{\placeholdernc{INVOKE}(\brk{}% |
| 2803 | +std::forward<Callable>(func), |
2796 | 2804 | std::forward<Args>(args)...)}. If such a call to \tcode{func}
|
2797 | 2805 | throws an exception the execution is \term{exceptional}, otherwise it is \term{returning}.
|
2798 | 2806 | An exceptional execution shall propagate the exception to the caller of
|
|
4822 | 4830 | \begin{itemize}
|
4823 | 4831 | \item
|
4824 | 4832 | If \tcode{launch::async} is set in \tcode{policy}, calls
|
4825 |
| -\tcode{\textit{INVOKE}(\textit{DECAY_COPY}(std::forward<F>(f)),} |
4826 |
| -\tcode{\textit{DECAY_COPY}(std::forward<Args>(args))...)} |
| 4833 | +\tcode{\placeholdernc{INVOKE}(\placeholdernc{DECAY_COPY}(std::forward<F>(f)),} |
| 4834 | +\tcode{\placeholdernc{DECAY_COPY}(std::forward<Args>(args))...)} |
4827 | 4835 | (\ref{func.require}, \ref{thread.thread.constr})
|
4828 | 4836 | as if in a new thread of execution represented by a \tcode{thread} object
|
4829 |
| -with the calls to \tcode{\textit{DECAY_COPY}()} being evaluated in the thread that called \tcode{async}. |
| 4837 | +with the calls to \tcode{\placeholdernc{DECAY_COPY}()} being evaluated in the thread that called \tcode{async}. |
4830 | 4838 | Any return value
|
4831 | 4839 | is stored as the result in the
|
4832 | 4840 | shared state. Any exception propagated from
|
4833 | 4841 | the execution of
|
4834 |
| -\tcode{\textit{INVOKE}(\textit{DECAY_COPY}(std::forward<F>(f)), |
4835 |
| -\textit{DECAY_COPY}(std::forward<Args>(args))...)} |
| 4842 | +\tcode{\placeholdernc{INVOKE}(\placeholdernc{DECAY_COPY}(std::forward<F>(f)), |
| 4843 | +\placeholdernc{DECAY_COPY}(std::forward<Args>(args))...)} |
4836 | 4844 | is stored as the exceptional result in the shared state.
|
4837 | 4845 | The \tcode{thread} object is
|
4838 | 4846 | stored in the shared state
|
|
4841 | 4849 |
|
4842 | 4850 | \item
|
4843 | 4851 | If \tcode{launch::deferred} is set in \tcode{policy},
|
4844 |
| -stores \tcode{\textit{DECAY_COPY}(std::forward<F>(f))} and |
4845 |
| -\tcode{\textit{DECAY_COPY}(std::forward<Args>(args))...} |
| 4852 | +stores \tcode{\placeholdernc{DECAY_COPY}(std::forward<F>(f))} and |
| 4853 | +\tcode{\placeholdernc{DECAY_COPY}(std::forward<Args>(args))...} |
4846 | 4854 | in the shared state. These copies of \tcode{f} and \tcode{args} constitute
|
4847 | 4855 | a \defn{deferred function}. Invocation of the deferred function evaluates
|
4848 |
| -\tcode{\textit{INVOKE}(std::move(g), std::move(xyz))} where \tcode{g} is the stored value of |
4849 |
| -\tcode{\textit{DECAY_COPY}(std::forward<F>(f))} and \tcode{xyz} is the stored copy of |
4850 |
| -\tcode{\textit{DECAY_COPY}(std::forward<Args>(args))...}. |
| 4856 | +\tcode{\placeholdernc{INVOKE}(std::move(g), std::move(xyz))} where \tcode{g} is the stored value of |
| 4857 | +\tcode{\placeholdernc{DECAY_COPY}(std::forward<F>(f))} and \tcode{xyz} is the stored copy of |
| 4858 | +\tcode{\placeholdernc{DECAY_COPY}(std::forward<Args>(args))...}. |
4851 | 4859 | Any return value is stored
|
4852 | 4860 | as the result in the shared state.
|
4853 | 4861 | Any exception propagated
|
|
4861 | 4869 | on an asynchronous return object referring to
|
4862 | 4870 | this shared state shall invoke the
|
4863 | 4871 | deferred function in the thread that called the waiting function.
|
4864 |
| -Once evaluation of \tcode{\textit{INVOKE}(std::move(g), std::move(xyz))} begins, the function is no longer |
| 4872 | +Once evaluation of \tcode{\placeholdernc{INVOKE}(std::move(g), std::move(xyz))} begins, the function is no longer |
4865 | 4873 | considered deferred.
|
4866 | 4874 | \begin{note} If this policy is specified together with other policies, such as when using a
|
4867 | 4875 | \tcode{policy} value of \tcode{launch::async | launch::deferred}, implementations should defer
|
|
5026 | 5034 | \begin{itemdescr}
|
5027 | 5035 | \pnum
|
5028 | 5036 | \requires
|
5029 |
| -\tcode{\textit{INVOKE}<R>(f, t1, t2, ..., tN)}, where \tcode{t1, t2, ..., tN} are values |
| 5037 | +\tcode{\placeholdernc{INVOKE}<R>(f, t1, t2, ..., tN)}, where \tcode{t1, t2, ..., tN} are values |
5030 | 5038 | of the corresponding types in \tcode{ArgTypes...}, shall be a valid expression. Invoking
|
5031 | 5039 | a copy of \tcode{f} shall behave the same as invoking \tcode{f}.
|
5032 | 5040 |
|
|
5148 | 5156 |
|
5149 | 5157 | \begin{itemdescr}
|
5150 | 5158 | \pnum
|
5151 |
| -\effects As if by \tcode{\textit{INVOKE}<R>(f, t1, t2, ..., tN)}, |
| 5159 | +\effects As if by \tcode{\placeholdernc{INVOKE}<R>(f, t1, t2, ..., tN)}, |
5152 | 5160 | where \tcode{f} is the
|
5153 | 5161 | stored task of \tcode{*this} and
|
5154 | 5162 | \tcode{t1, t2, ..., tN} are the values in \tcode{args...}. If the task returns normally,
|
|
5178 | 5186 |
|
5179 | 5187 | \begin{itemdescr}
|
5180 | 5188 | \pnum
|
5181 |
| -\effects As if by \tcode{\textit{INVOKE}<R>(f, t1, t2, ..., tN)}, |
| 5189 | +\effects As if by \tcode{\placeholdernc{INVOKE}<R>(f, t1, t2, ..., tN)}, |
5182 | 5190 | where \tcode{f} is the stored task and
|
5183 | 5191 | \tcode{t1, t2, ..., tN} are the values in \tcode{args...}. If the task returns normally,
|
5184 | 5192 | the return value is stored as the asynchronous result in the shared state of
|
|
0 commit comments