entity: constrained type instead of sfinae based design for traits

This commit is contained in:
skypjack
2026-01-15 15:08:51 +01:00
parent cc7d4aaeea
commit f81f34e6fa

View File

@@ -14,17 +14,20 @@ namespace entt {
/*! @cond TURN_OFF_DOXYGEN */
namespace internal {
template<typename, typename = void>
template<typename>
struct entt_traits;
template<typename Type>
struct entt_traits<Type, std::enable_if_t<std::is_enum_v<Type>>>
: entt_traits<std::underlying_type_t<Type>> {
requires std::is_enum_v<Type>
struct entt_traits<Type>: entt_traits<std::underlying_type_t<Type>> {
using value_type = Type;
};
template<typename Type>
struct entt_traits<Type, std::enable_if_t<std::is_class_v<Type>>>
requires requires { typename Type::entity_type; }
&& std::convertible_to<Type, typename Type::entity_type>
&& std::constructible_from<Type, typename Type::entity_type>
struct entt_traits<Type>
: entt_traits<typename Type::entity_type> {
using value_type = Type;
};