That is, all
threads have been notified; they can subsequently block on the lock specified in the
This relaxes the usual rules, which would have required all wait calls to happen before
Only the notification to unblock the wait needs to happen before destruction.
Undefined behavior ensues if a thread waits on *this
once the destructor has
been started, especially when the waiting threads are calling the wait functions in a loop or
using the overloads of wait
, or wait_until
that take a predicate.
— end note