This commit is contained in:
es3n1n
2025-05-07 17:01:09 +09:00
commit a49f027fde
33 changed files with 2609 additions and 0 deletions

View File

@@ -0,0 +1,30 @@
#pragma once
#include <utility>
template <typename Callable>
class DeferHolder {
public:
explicit DeferHolder(Callable&& callable) noexcept: callable_(std::forward<Callable>(callable)) { }
~DeferHolder() {
callable_();
}
private:
Callable callable_;
};
class Defer {
public:
constexpr Defer() noexcept = default;
constexpr ~Defer() noexcept = default;
template <typename Callable>
DeferHolder<Callable> operator%(Callable&& cb) {
return DeferHolder<Callable>{std::forward<Callable>(cb)};
}
};
#define COMMON_CAT_(x, y) x##y
#define COMMON_CAT(x, y) COMMON_CAT_(x, y)
#define defer auto COMMON_CAT(_defer_instance_, __LINE__) = Defer{} % [&]()