cpp-ru / ideas

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

Улучшение для final_suspend #536

Open MBkkt opened 1 year ago

MBkkt commented 1 year ago

В идеальном мире return_value/void и final_suspend это одна функция.

На текущий момент времени этого уже сделать нельзя, к тому же возможно имеются сложности в реализации этого на уровне компилятора (из-за эксепшенов).

Поэтому предлагается позволить писать:

template <typename T>
auto final_suspend();

А компилятор вызовет final_suspend с типом параметра вызванного return_value. Тогда в final_suspend мы можем понять, какая из перегрузок return_value была выбрана.

https://github.com/YACLib/YACLib/issues/189

Я столкнулся с тем, что хочу возвращать разные типы в final_suspend. Для того чтобы реализовать "future unwrapping", иначе говоря вернуть асинхронной задачу из асинхронной задачи без ожидания (пусть и неблокирующего)

Понятно что это не что-то критичное, но почему нет? К тому же я думаю со временем примеров станет больше. По сути сюда подходит любое поведение, которое отличается в зависимости от возвращаемого типа. Например возможны оптимизации на не хранение того что у нас есть отмена. Или запуск ленивой задачи при возврате из асинхронной.