Основная проблема с бросанием исключений из деструктора заключается в том, что в момент, когда деструктор называется другим исключением, может быть "в полете" (std::uncaught_exception() == true), и поэтому неясно, что делать в этом случае. "Перезаписать" старое исключение с новым было бы одним из возможных способов справиться с этой ситуацией. Но было решено, что в таких случаях нужно вызывать std::terminate (или другое std::terminate_handler).
В С++ 11 реализована функция вложенных исключений через класс std::nested_exception. Эта функция может быть использована для решения проблемы, описанной выше. Старое (непонятое) исключение может быть просто вложено в новое исключение (или наоборот?), А затем может быть выбрано вложенное исключение. Но эта идея не использовалась. std::terminate все еще вызывается в такой ситуации в С++ 11 и С++ 14.
Итак, вопросы. Была ли рассмотрена идея с вложенными исключениями? Есть ли проблемы с этим? Не изменится ли ситуация на С++ 17?