Michele Caini vor 6 Jahren
Ursprung
Commit
699fb73726
2 geänderte Dateien mit 11 neuen und 2 gelöschten Zeilen
  1. 5 2
      src/entt/meta/meta.hpp
  2. 6 0
      test/entt/meta/meta.cpp

+ 5 - 2
src/entt/meta/meta.hpp

@@ -1848,8 +1848,11 @@ public:
         std::array<meta_any, sizeof...(Args)> arguments{{std::forward<Args>(args)...}};
         meta_any any{};
 
-        internal::iterate<&internal::meta_type_node::ctor>([data = arguments.data(), &any](auto *curr) -> bool {
-            any = curr->invoke(data);
+        internal::find_if<&internal::meta_type_node::ctor>([data = arguments.data(), &any](auto *curr) -> bool {
+            if(curr->size == sizeof...(args)) {
+                any = curr->invoke(data);
+            }
+
             return static_cast<bool>(any);
         }, node);
 

+ 6 - 0
test/entt/meta/meta.cpp

@@ -1420,6 +1420,12 @@ TEST_F(Meta, MetaTypeConstructInvalidArgs) {
     ASSERT_FALSE(any);
 }
 
+TEST_F(Meta, MetaTypeLessArgs) {
+    auto type = entt::resolve<derived_type>();
+    auto any = type.construct(base_type{});
+    ASSERT_FALSE(any);
+}
+
 TEST_F(Meta, MetaTypeConstructCastAndConvert) {
     auto type = entt::resolve<derived_type>();
     auto any = type.construct(entt::meta_any{derived_type{}}, entt::meta_any{42.}, entt::meta_any{'c'});