diff --git a/src/entt/meta/utility.hpp b/src/entt/meta/utility.hpp index 8e56426c3..76d73a5f2 100644 --- a/src/entt/meta/utility.hpp +++ b/src/entt/meta/utility.hpp @@ -298,7 +298,7 @@ template return Type{(args+Index)->cast()...}; } - return {}; + return meta_any{}; } @@ -390,7 +390,7 @@ template */ template [[nodiscard]] meta_any meta_construct(meta_any * const args) { - return meta_construct(Candidate, args); + return meta_invoke({}, Candidate, args); } diff --git a/test/entt/meta/meta_ctor.cpp b/test/entt/meta/meta_ctor.cpp index d290cd629..6ccdf9c00 100644 --- a/test/entt/meta/meta_ctor.cpp +++ b/test/entt/meta/meta_ctor.cpp @@ -16,7 +16,7 @@ struct derived_t: base_t { }; struct clazz_t { - clazz_t(const base_t &other, int iv) + clazz_t(const base_t &other, int &iv) : clazz_t{iv, other.value} {} @@ -55,7 +55,7 @@ struct MetaCtor: ::testing::Test { entt::meta() .type("clazz"_hs) .ctor<&entt::registry::emplace_or_replace, entt::as_ref_t>() - .ctor() + .ctor() .ctor() .ctor(clazz_t::factory)>() .ctor(clazz_t::factory)>() @@ -114,7 +114,6 @@ TEST_F(MetaCtor, ArithmeticConversion) { TEST_F(MetaCtor, ConstNonConstRefArgs) { int ivalue = 42; const char cvalue = 'c'; - auto any = entt::resolve().construct(entt::forward_as_meta(ivalue), entt::forward_as_meta(cvalue)); ASSERT_TRUE(any); @@ -122,6 +121,17 @@ TEST_F(MetaCtor, ConstNonConstRefArgs) { ASSERT_EQ(any.cast().c, 'c'); } +TEST_F(MetaCtor, WrongConstness) { + int value = 42; + auto any = entt::resolve().construct(derived_t{}, entt::forward_as_meta(value)); + auto other = entt::resolve().construct(derived_t{}, entt::forward_as_meta(std::as_const(value))); + + ASSERT_TRUE(any); + ASSERT_FALSE(other); + ASSERT_EQ(any.cast().i, 42); + ASSERT_EQ(any.cast().c, 'c'); +} + TEST_F(MetaCtor, FuncMetaAnyArgs) { auto any = entt::resolve().construct(entt::meta_any{42});