Selaa lähdekoodia

entity: constrained type instead of sfinae based design for traits

skypjack 1 kuukausi sitten
vanhempi
commit
f81f34e6fa
1 muutettua tiedostoa jossa 7 lisäystä ja 4 poistoa
  1. 7 4
      src/entt/entity/entity.hpp

+ 7 - 4
src/entt/entity/entity.hpp

@@ -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;
 };