Browse Source

meta: reduce instantiations

Michele Caini 5 years ago
parent
commit
51022cb132
1 changed files with 5 additions and 7 deletions
  1. 5 7
      src/entt/meta/factory.hpp

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

@@ -182,15 +182,15 @@ meta_any getter([[maybe_unused]] meta_any instance, [[maybe_unused]] meta_any in
         } else {
             return clazz ? dispatch(std::invoke(Data, clazz)) : meta_any{};
         }
-    } else {
-        static_assert(std::is_pointer_v<std::decay_t<decltype(Data)>>, "Invalid pointer to data type");
-
+    } else if constexpr(std::is_pointer_v<std::decay_t<decltype(Data)>>) {
         if constexpr(std::is_array_v<std::remove_pointer_t<decltype(Data)>>) {
             auto * const idx = index.try_cast<std::size_t>();
             return idx ? dispatch((*Data)[*idx]) : meta_any{};
         } else {
             return dispatch(*Data);
         }
+    } else {
+        return dispatch(Data);
     }
 }
 
@@ -619,8 +619,6 @@ public:
         internal::meta_data_node *curr = nullptr;
 
         if constexpr(std::is_same_v<Type, decltype(Data)>) {
-            static_assert(std::is_same_v<Policy, as_is_t>, "Policy not supported");
-
             static internal::meta_data_node node{
                 {},
                 type,
@@ -629,8 +627,8 @@ public:
                 true,
                 true,
                 &internal::meta_info<Type>::resolve,
-                [](meta_any, meta_any, meta_any) { return false; },
-                [](meta_any, meta_any) -> meta_any { return Data; }
+                &internal::setter<true, Type, Data>,
+                &internal::getter<Type, Data, Policy>
             };
 
             curr = &node;