...
The C++ Standard, [support.runtime], paragraph 10 [ISO/IEC 14882-2014], states:
The common subset of the C and C++ languages consists of all declarations, definitions, and expressions that may appear in a well formed C++ program and also in a conforming C program. A POF (“plain old function”) is a function that uses only features from this common subset, and that does not directly or indirectly use any function that is not a POF, except that it may use plain lock-free atomic operations. A plain lock-free atomic operation is an invocation of a function f from Clause 29, such that f is not a member function, and either f is the function
atomic_is_lock_free
, or for every atomic argumentA
passed to f,atomic_is_lock_free(A)
yieldstrue
. All signal handlers shall have C linkage. The behavior of any function other than a POF used as a signal handler in a C++ program is implementation-defined.228
...
If your signal handler is not a plain old function, then the behavior of a call to it in response to a signal is implementation-defined, at best, and is likely to result in undefined behavior. All signal handlers must meet the definition of a plain old function. In particular, this definition prohibits use of features that exist in C++ but not in C (such as non-POD [non–plain old data] objects and exceptions), including indirect use of such features through function calls, and includes the restrictions placed on signal handlers in a C program. See Rule 11. Signals (SIG) for rules regarding conforming use of signals in a C program.
Noncompliant Code Example
...