Нет синтаксиса времени компиляции, чтобы сообщить, что функция должна вызываться, только когда существует текущее исключение.Он может быть обнаружен только во время выполнения, если такое текущее исключение действительно существует.
Вы можете использовать программирование более высокого порядка и вместо обеспечения функции lippincott
предоставить оболочку, которая выполняет весь try-call-catch-lippincott для данной функции:
auto with_catch = [](auto&& f, auto&& c, auto&&... args) -> decltype(c()) {
try {
f(std::forward<decltype(args)>(args)...);
return {};
} catch (...) {
return c();
}
};
auto with_lippincott = [](auto&& f, auto&&... args) {
return with_catch(
std::forward<decltype(f)>(f),
lippincott,
std::forward<decltype(args)>(args)...
);
};
Это не так просто неправильно использовать.Пример использования:
foo_Result r3 = with_lippincott(Snafuscate, true);