4 * This file is part of OpenTTD.
5 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
6 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
7 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
10 /** @file scope.h Simple scope guard... */
16 class scope_exit_obj
{
23 scope_exit_obj(T
&&func
)
24 : f(std::move(func
)), shouldexec(true) { }
26 scope_exit_obj(const scope_exit_obj
©src
) = delete;
27 scope_exit_obj(scope_exit_obj
&&movesrc
)
28 : f(std::move(movesrc
.f
)), shouldexec(movesrc
.shouldexec
) {
29 movesrc
.shouldexec
= false;
49 scope_exit_obj
<typename
std::decay
<T
>::type
> scope_guard(T
&&func
) {
50 return scope_exit_obj
<typename
std::decay
<T
>::type
>(std::forward
<T
>(func
));