Похоже, что у этой проблемы нет простого решения.
Основная проблема, вероятно, связана с тем, что C ++ позволяет компиляторам переупорядочивать большую часть того, что происходит в функции. Таким образом, вы не можете надежно зависеть от порядка вещей, происходящих в функциях.
Похоже, мне придется в конечном итоге использовать серию обратных вызовов, возможно, используя лямбду, если у меня есть желание сохранить семантически похожий на блок кода.
Возможно, я даже смогу что-то взломать, используя макросы, которые преобразуются в лямбды для имитации стиля сопрограммы.