meta: re-added meta_type::remove_pointer (close #878)
This commit is contained in:
@@ -1070,6 +1070,15 @@ public:
|
||||
return !!(node->traits & internal::meta_traits::is_pointer);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Provides the type for which the pointer is defined.
|
||||
* @return The type for which the pointer is defined or this type if it
|
||||
* doesn't refer to a pointer type.
|
||||
*/
|
||||
[[nodiscard]] meta_type remove_pointer() const ENTT_NOEXCEPT {
|
||||
return node->remove_pointer();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Checks whether a type is a pointer-like type or not.
|
||||
* @return True if the underlying type is a pointer-like one, false
|
||||
|
||||
@@ -108,6 +108,7 @@ struct meta_type_node {
|
||||
meta_type_node *next;
|
||||
meta_prop_node *prop;
|
||||
const size_type size_of;
|
||||
meta_type_node *(*const remove_pointer)() ENTT_NOEXCEPT;
|
||||
meta_any (*const default_constructor)();
|
||||
double (*const conversion_helper)(void *, const void *);
|
||||
const meta_template_node *const templ;
|
||||
@@ -180,6 +181,7 @@ public:
|
||||
nullptr,
|
||||
nullptr,
|
||||
size_of_v<Type>,
|
||||
&meta_node<std::remove_cv_t<std::remove_reference_t<std::remove_pointer_t<Type>>>>::resolve,
|
||||
meta_default_constructor(),
|
||||
meta_conversion_helper(),
|
||||
meta_template_info()
|
||||
|
||||
@@ -261,6 +261,13 @@ TEST_F(MetaType, Traits) {
|
||||
ASSERT_FALSE(entt::resolve<std::vector<int>>().is_associative_container());
|
||||
}
|
||||
|
||||
TEST_F(MetaType, RemovePointer) {
|
||||
ASSERT_EQ(entt::resolve<void *>().remove_pointer(), entt::resolve<void>());
|
||||
ASSERT_EQ(entt::resolve<char **>().remove_pointer(), entt::resolve<char *>());
|
||||
ASSERT_EQ(entt::resolve<int (*)(char, double)>().remove_pointer(), entt::resolve<int(char, double)>());
|
||||
ASSERT_EQ(entt::resolve<derived_t>().remove_pointer(), entt::resolve<derived_t>());
|
||||
}
|
||||
|
||||
TEST_F(MetaType, TemplateInfo) {
|
||||
ASSERT_FALSE(entt::resolve<int>().is_template_specialization());
|
||||
ASSERT_EQ(entt::resolve<int>().template_arity(), 0u);
|
||||
|
||||
Reference in New Issue
Block a user