[ Kona 2022-11-10; SG1 yields a recommendation ]
Poll: Adopt the proposed resolution for LWG3756
"f is a non-static member function invoked on an
atomic_flag object, or"
"f is a non-member function, and every pointer-to-
atomic argument passed to f is atomic_flag, or"
SF F N A SA 11 3 0 0 0
Unanimous consent
Previous resolution [SUPERSEDED]:
This wording is relative to N4917.
Modify [support.signal] as indicated:
-1- A call to the function signal synchronizes with any resulting invocation of the signal handler so installed.
-2- A plain lock-free atomic operation is an invocation of a function f from [atomics], such that:
- (2.1) — f is the function atomic_is_lock_free(), or
- (2.2) — f is the member function is_lock_free(), or
- (2.?) — f is a non-static member function invoked on an atomic_flag object, or
- (2.?) — f is a non-member function, and every pointer-to-atomic argument passed to f is atomic_flag, or
- (2.3) — f is a non-static member function invoked on an object A, such that A.is_lock_free() yields true, or
- (2.4) — f is a non-member function, and for every pointer-to-atomic argument A passed to f, atomic_is_lock_free(A) yields true.
-3- An evaluation is signal-safe unless it includes one of the following:
- (3.1) — a call to any standard library function, except for plain lock-free atomic operations and functions explicitly identified as signal-safe;
[Note 1: This implicitly excludes the use of new and delete expressions that rely on a library-provided memory allocator. — end note]
- (3.2) — an access to an object with thread storage duration;
- (3.3) — a dynamic_cast expression;
- (3.4) — throwing of an exception;
- (3.5) — control entering a try-block or function-try-block;
- (3.6) — initialization of a variable with static storage duration requiring dynamic initialization ([basic.start.dynamic], [stmt.dcl])206; or
- (3.7) — waiting for the completion of the initialization of a variable with static storage duration ([stmt.dcl]).
A signal handler invocation has undefined behavior if it includes an evaluation that is not signal-safe.