#include #include #include #include #include struct SignalLess: testing::Test { enum my_entity : std::uint32_t {}; template struct has_on_construct: std::false_type {}; template requires requires { &entt::storage_type_t::on_construct; } struct has_on_construct: std::true_type {}; template static constexpr auto has_on_construct_v = has_on_construct::value; }; template struct entt::storage_type { // no signal regardless of element type ... using type = basic_storage; }; template<> struct entt::storage_type { // ... unless it's char, because yes. using type = sigh_mixin>; }; TEST_F(SignalLess, Example) { // invoking registry::on_construct is a compile-time error ASSERT_FALSE((has_on_construct_v)); ASSERT_TRUE((has_on_construct_v)); entt::basic_registry registry; const std::array entity{registry.create()}; // literally a test for storage_adapter_mixin registry.emplace(entity[0], 0); registry.erase(entity[0]); registry.insert(entity.begin(), entity.end(), 3); registry.patch(entity[0], [](auto &value) { value = 2; }); ASSERT_EQ(registry.get(entity[0]), 2); }