co_await-ed awaitable не уничтожается при исключении при компиляции с GCC10 - PullRequest
1 голос
/ 14 июля 2020

Предположим, у нас есть ожидание, которое выдает при возобновлении:

struct always_throws : std::suspend_always {
    void await_resume() {
        throw std::runtime_error("");
    }
    always_throws() { std::cerr << "always_throws()" << std::endl; }
    ~always_throws() { std::cerr << "~always_throws()" << std::endl; }
};

теперь давайте ожидаем always_throws в сопрограмме и выполним ее до завершения: -10 вызывается деструктор, но он не вызывается с g cc -10. Мой вопрос: правильный ли код, т.е. без неопределенного поведения? Или это ошибка в реализации сопрограммы gcc?

Полный пример (также с реализацией Resumable): g cc и clang .

РЕДАКТИРОВАТЬ (15 июля): Гор Нишанов указал мне на отчет об ошибке , который очень похож, следовательно, вероятно, сообщает о той же проблеме. Следовательно, поведение действительно является ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...