Сопрограмма 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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