У меня есть код С++, который обертывает произвольную лямбда и возвращает результат лямбда.
template <typename F>
auto wrapAndRun(F fn) -> decltype(F()) {
// foo();
auto result = fn();
// bar();
return result;
}
Это работает, если F
не возвращает void
(error: variable has incomplete type 'void'
). Я думал использовать ScopeGuard
для запуска bar
, но я не хочу, чтобы bar
выполнялся, если fn
throws. Любые идеи?