[thread.thread.constr] (original) (raw)

32 Concurrency support library [thread]

32.4 Threads [thread.threads]

32.4.3 Class thread [thread.thread.class]

32.4.3.3 Constructors [thread.thread.constr]

Effects: The object does not represent a thread of execution.

Postconditions: get_id() == id().

template<class F, class... Args> explicit thread(F&& f, Args&&... args);

Constraints: remove_cvref_t<F> is not the same type as thread.

Mandates: The following are all true:

Effects: The new thread of execution executesinvoke(auto(std::forward<F>(f)), auto(std::forward<Args>(args))...) with the values produced by autobeing materialized ([conv.rval]) in the constructing thread.

Any return value from this invocation is ignored.

[Note 1:

This implies that any exceptions not thrown from the invocation of the copy of f will be thrown in the constructing thread, not the new thread.

— _end note_]

If the invocation of invoke terminates with an uncaught exception,terminate is invoked ([except.terminate]).

Synchronization: The completion of the invocation of the constructor synchronizes with the beginning of the invocation of the copy of f.

Postconditions: get_id() != id().

*this represents the newly started thread.

Throws: system_error if unable to start the new thread.

Error conditions:

thread(thread&& x) noexcept;

Postconditions: x.get_id() == id() and get_id() returns the value of x.get_id() prior to the start of construction.