Сопрограмма Final_suspend: это неопределенное поведение?C++

Программы на C++. Форум разработчиков
Anonymous
Сопрограмма Final_suspend: это неопределенное поведение?

Сообщение Anonymous »

Мой вопрос касается отрывка в cppreference, который меня сбивает с толку:

Если сопрограмма заканчивается неперехваченным исключением, она выполняет следующее: p>
  • перехватывает исключение и вызывает метод Promise.unhandled_Exceptionion() из блока catch.
  • вызывает Promise.final_suspend() и co_awaits результата (например, чтобы возобновить продолжение или опубликовать результат). Возобновление сопрограммы с этого момента не определено.
(см. https://en.cppreference.com/ w/cpp/language/coroutines)
Меня смущает второй пункт. Они говорят, что Final_suspend предназначен для выполнения продолжений, но затем они говорят, что возобновление сопрограммы «с этой точки» является неопределенным поведением. Это кажется почти противоречивым. Что именно здесь означает неопределенное поведение? Я могу придумать 3 сценария:
  • Неопределенное поведение при прямом или косвенном вызове возобновления в coroutine_handle в теле Final_suspend< /code>?
  • Это неопределенное поведение, прямое или косвенное возобновление coroutine_handle из тела await_suspend последнего ожидания?
  • Неопределенно ли поведение при возврате coroutine_handle из await_suspend последнего ожидания?
Если одно или все из них являются неопределенным поведением , это также верно для Final_suspend после return_void или return_value или только после unhandled_Exception?
(Я создал пример кода для сценария 3 на godbolt. Для этого вопроса это не обязательно, но может быть полезно, приводит ли моя обработка исключений и продолжений к неопределенному поведению в этом примере?)

Подробнее здесь: https://stackoverflow.com/questions/787 ... d-behavior

Вернуться в «C++»