pm
- это mutex_type
, а определение для разблокировки в std::mutex
:
void unlock() noexcept;
То есть функция unlock
не может генерировать никаких исключений, поэтому unique_lock::unlock
не делаетЯ должен унаследовать любое из этих исключений.Относительно того, почему он может генерировать любое исключение, остается загадкой.
Немного неприятно, что деструктор для unique_lock
может выбросить исключение (так как я предполагаю, что ему, возможно, придется вызвать unlock
там, гдеможет тоже).Это кажется мне плохим, поскольку использование объекта блокировки для правильной разблокировки во время обработки исключений - очень распространенная идиома.Очень плохо, что блокировка может генерировать исключение во время раскручивания стека - тем более, что нижележащий мьютекс не разрешен.
Что-то здесь определенно не так.
Явсе еще работает с последнего публичного проекта, возможно, это было исправлено