#define PACK_MAX_VALUE(max) : std::bit_width(static_cast<size_t>(max))
#define PACK_BOOL PACK_MAX_VALUE(1)
#define PACK_ENUM(Type) PACK_MAX_VALUE(Type::_END)
#define SIZEOF(...) detail::SizeOf<__VA_ARGS__>::value
namespace detail {
template <typename T, size_t size = sizeof(T)>
struct SizeOf {
inline static constexpr size_t value = size;
};
} // namespace detail