74a5cb7bbc
this file is c++11 only. Change-Id: Ibff7acec00337a9f56f9b8e29ea262c8d64c2446 Reviewed-on: https://review.haiku-os.org/c/haiku/+/5292 Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org> Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com> Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>
44 lines
593 B
C++
44 lines
593 B
C++
/*
|
|
* Copyright 2022, Haiku, Inc. All Rights Reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _SCOPE_EXIT_H
|
|
#define _SCOPE_EXIT_H
|
|
|
|
|
|
#if __cplusplus < 201103L
|
|
#error This file requires compiler support for the C++11 standard.
|
|
#endif
|
|
|
|
|
|
#include <utility>
|
|
|
|
|
|
template<typename F>
|
|
class ScopeExit
|
|
{
|
|
public:
|
|
explicit ScopeExit(F&& fn) : fFn(fn)
|
|
{
|
|
}
|
|
|
|
~ScopeExit()
|
|
{
|
|
fFn();
|
|
}
|
|
|
|
ScopeExit(ScopeExit&& other) : fFn(std::move(other.fFn))
|
|
{
|
|
}
|
|
|
|
private:
|
|
ScopeExit(const ScopeExit&);
|
|
ScopeExit& operator=(const ScopeExit&);
|
|
|
|
private:
|
|
F fFn;
|
|
};
|
|
|
|
|
|
#endif // _SCOPE_EXIT_H
|