Browse Source

meta: review meta_arg[_node] + increase code coverage

Michele Caini 3 years ago
parent
commit
b45db747a8
2 changed files with 9 additions and 5 deletions
  1. 7 5
      src/entt/meta/node.hpp
  2. 2 0
      test/entt/meta/meta_utility.cpp

+ 7 - 5
src/entt/meta/node.hpp

@@ -138,12 +138,14 @@ meta_type_node resolve() noexcept;
 
 template<typename... Args>
 [[nodiscard]] meta_type_node meta_arg_node(type_list<Args...>, [[maybe_unused]] const std::size_t index) noexcept {
-    if constexpr(sizeof...(Args) == 0u) {
-        return {};
-    } else {
-        const meta_type_node args[sizeof...(Args)]{internal::resolve<std::remove_cv_t<std::remove_reference_t<Args>>>()...};
-        return args[index];
+    if constexpr(sizeof...(Args) != 0u) {
+        if(index < sizeof...(Args)) {
+            const meta_type_node args[sizeof...(Args)]{internal::resolve<std::remove_cv_t<std::remove_reference_t<Args>>>()...};
+            return args[index];
+        }
     }
+
+    return {};
 }
 
 template<typename Type>

+ 2 - 0
test/entt/meta/meta_utility.cpp

@@ -73,8 +73,10 @@ TEST_F(MetaUtility, MetaDispatch) {
 }
 
 TEST_F(MetaUtility, MetaArg) {
+    ASSERT_EQ((entt::meta_arg<entt::type_list<>>(3u)), entt::meta_type{});
     ASSERT_EQ((entt::meta_arg<entt::type_list<int, char>>(0u)), entt::resolve<int>());
     ASSERT_EQ((entt::meta_arg<entt::type_list<int, char>>(1u)), entt::resolve<char>());
+    ASSERT_EQ((entt::meta_arg<entt::type_list<int, char>>(2u)), entt::meta_type{});
 }
 
 TEST_F(MetaUtility, MetaSetter) {