Предположим, у нас есть ожидание, которое выдает при возобновлении:
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 июля): Гор Нишанов указал мне на отчет об ошибке , который очень похож, следовательно, вероятно, сообщает о той же проблеме. Следовательно, поведение действительно является ошибкой.