cpp-ru / ideas

Идеи по улучшению языка C++ для обсуждения
https://cpp-ru.github.io/proposals
Creative Commons Zero v1.0 Universal
89 stars 0 forks source link

Добавить std::rethrow_and_release для std::exception_ptr #358

Open apolukhin opened 3 years ago

apolukhin commented 3 years ago

Перенос предложения: голоса +4, -0 Автор идеи: Олег Фатхиев

Сейчас std::rethrow_exception не обнуляет std::exception_ptr, хотя такое поведение часто необходимо. Из-за чего в коде можно увидеть swap-ы со временными std::exception_ptr. Предлагаю добавить функцию std::rethrow_and_release.

Вместо того, чтобы писать как-то так:

std::exception_ptr tmp;
std::swap(tmp, exc_);
std::rethrow_exception(tmp);

Можно будет писать вот так:

std::rethrow_and_release(exc_);

Код самой функции:

void rethrow_and_release(std::exception_ptr p) {
    std::rethrow_exception(std::exchange(p, std::exception_ptr{}));
}
apolukhin commented 3 years ago

yndx-antoshkka, 19 сентября 2018, 12:43 Хм... может быть полезно.

Но возможно стоит поправить требования к exception_ptr и гарантировать что вот такой код будет оставлять p в null value состоянии:

std::rethrow_exception(std::move(p));