Exception thrown by __cxa_guard_acquire.
6.7[stmt.dcl]/4: If control re-enters the declaration (recursively) while the object is being initialized, the behavior is undefined.
Since we already have a library function to handle locking, we might as well check for this situation and throw an exception. We use the second byte of the guard variable to remember that we're in the middle of an initialization.
|virtual const char* std::exception::what||(||)|| const throw ()