entity: constrained type instead of sfinae based design for traits
This commit is contained in:
@@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user