engine/dep/include/ctti/static_value.hpp
2024-12-02 18:48:18 -06:00

53 lines
1.1 KiB
C++

#ifndef CTTI_DETAIL_STATIC_VALUE_HPP
#define CTTI_DETAIL_STATIC_VALUE_HPP
namespace ctti
{
template<typename T, T Value>
struct static_value
{
constexpr static_value() = default;
using value_type = T;
static constexpr value_type value = Value;
constexpr operator value_type() const
{
return Value;
}
constexpr value_type get() const
{
return Value;
}
friend constexpr bool operator==(const static_value& lhs, const value_type rhs)
{
return lhs.get() == rhs;
}
friend constexpr bool operator==(const value_type lhs, const static_value& rhs)
{
return rhs == lhs;
}
friend constexpr bool operator!=(const static_value& lhs, const value_type rhs)
{
return !(lhs == rhs);
}
friend constexpr bool operator!=(const value_type lhs, const static_value& rhs)
{
return !(lhs == rhs);
}
};
template<typename T, T Value>
constexpr T static_value<T, Value>::value;
}
#define CTTI_STATIC_VALUE(x) ::ctti::static_value<decltype(x), (x)>
#endif // CTTI_DETAIL_STATIC_VALUE_HPP