mixin: more concepts, less sfinae

This commit is contained in:
skypjack
2026-01-27 18:50:38 +01:00
parent 42c9e41c37
commit ad69bec438

View File

@@ -16,26 +16,26 @@ namespace entt {
/*! @cond ENTT_INTERNAL */
namespace internal {
template<typename, typename, typename = void>
template<typename, typename>
struct has_on_construct final: std::false_type {};
template<typename Type, typename Registry>
struct has_on_construct<Type, Registry, std::void_t<decltype(Type::on_construct(std::declval<Registry &>(), std::declval<Registry>().create()))>>
: std::true_type {};
requires std::invocable<decltype(&Type::on_construct), Registry &, typename Registry::entity_type>
struct has_on_construct<Type, Registry>: std::true_type {};
template<typename, typename, typename = void>
template<typename, typename>
struct has_on_update final: std::false_type {};
template<typename Type, typename Registry>
struct has_on_update<Type, Registry, std::void_t<decltype(Type::on_update(std::declval<Registry &>(), std::declval<Registry>().create()))>>
: std::true_type {};
requires std::invocable<decltype(&Type::on_update), Registry &, typename Registry::entity_type>
struct has_on_update<Type, Registry>: std::true_type {};
template<typename, typename, typename = void>
template<typename, typename>
struct has_on_destroy final: std::false_type {};
template<typename Type, typename Registry>
struct has_on_destroy<Type, Registry, std::void_t<decltype(Type::on_destroy(std::declval<Registry &>(), std::declval<Registry>().create()))>>
: std::true_type {};
requires std::invocable<decltype(&Type::on_destroy), Registry &, typename Registry::entity_type>
struct has_on_destroy<Type, Registry>: std::true_type {};
} // namespace internal
/*! @endcond */