1#pragma once
2
3#include <functional>
4
5namespace taichi {
6
7class RaiiCleanup {
8 public:
9 using Func = std::function<void()>;
10
11 explicit RaiiCleanup(Func fn);
12 ~RaiiCleanup();
13 RaiiCleanup(const RaiiCleanup &) = delete;
14 RaiiCleanup &operator=(const RaiiCleanup &) = delete;
15 RaiiCleanup(RaiiCleanup &&) = default;
16 RaiiCleanup &operator=(RaiiCleanup &&) = default;
17
18 private:
19 Func fn_;
20};
21
22RaiiCleanup make_cleanup(RaiiCleanup::Func fn);
23
24} // namespace taichi
25