diff --git a/tour.cpp b/tour.cpp index 5eb0f9f0..a6dc7726 100644 --- a/tour.cpp +++ b/tour.cpp @@ -1100,12 +1100,13 @@ template void rv_keep(T& variable) { on_cleanup_or_next([backup, &variable] { variable = backup; }); } -template void rv_hook(hookset& m, int prio, U&& hook) { +template auto autoclear_hook(hookset& m, int prio, U&& hook) { int p = addHook(m, prio, hook); - auto del = [&m, p] { - delHook(m, p); - }; - on_cleanup_or_next(del); + return [&m, p] { delHook(m, p); }; + } + +template void rv_hook(hookset& m, int prio, U&& hook) { + on_cleanup_or_next(autoclear_hook(m, prio, hook)); } #endif