Проблема с этой линией. Поскольку throw
с выражением использует статический тип этого выражения для определения сгенерированного исключения, это разделяет объект исключения, создающий новый объект std::exception
, копирующий только часть базового объекта std::runtime_error
, e
которого является ссылкой к.
throw e;
Чтобы повторно выбросить пойманную исключительную ситуацию, вы всегда должны использовать throw без выражения.
throw;