fix apple-clang errors

This commit is contained in:
BlackMATov
2023-12-27 23:48:49 +07:00
parent 43b144be27
commit ddf9481647
6 changed files with 28 additions and 35 deletions

View File

@@ -4,7 +4,6 @@
- type conversions - type conversions
- non-linear search of methods/functions/... - non-linear search of methods/functions/...
- register base types by `META_HPP_ENABLE_POLY_INFO`
- fix all includes to work with the library more flexible - fix all includes to work with the library more flexible
- test and support shared libraries - test and support shared libraries
- remove `resolve_poly_type`, use `resolve_type(T&&)` instead - remove `resolve_poly_type`, use `resolve_type(T&&)` instead

View File

@@ -12,6 +12,7 @@
namespace namespace
{ {
class shape { class shape {
META_HPP_ENABLE_POLY_INFO()
public: public:
shape() = default; shape() = default;
shape(const shape&) = default; shape(const shape&) = default;

View File

@@ -12,6 +12,7 @@
namespace namespace
{ {
class shape { class shape {
META_HPP_ENABLE_POLY_INFO()
public: public:
shape() = default; shape() = default;
shape(const shape&) = default; shape(const shape&) = default;

View File

@@ -2561,10 +2561,6 @@ namespace meta_hpp
return id_type{data_}; return id_type{data_};
} }
[[nodiscard]] explicit operator id_type() const noexcept {
return get_id();
}
[[nodiscard]] type_kind get_kind() const noexcept { [[nodiscard]] type_kind get_kind() const noexcept {
return data_->kind; return data_->kind;
} }
@@ -8307,19 +8303,19 @@ namespace meta_hpp::detail
, size{class_traits<Class>::size} , size{class_traits<Class>::size}
, align{class_traits<Class>::align} , align{class_traits<Class>::align}
, argument_types{resolve_types(typename class_traits<Class>::argument_types{})} { , argument_types{resolve_types(typename class_traits<Class>::argument_types{})} {
struct { class_list new_base_classes;
class_list base_classes; deep_upcasts_t new_deep_upcasts;
deep_upcasts_t deep_upcasts;
} new_base_data;
const auto add_new_base = [&new_base_data]<class_kind Base, class_kind Derived>(auto&& recur) { const auto add_new_base = [&]<class_kind Base, class_kind Derived>(auto&& recur) {
const class_type& base_class = resolve_type<Base>(); const class_type& base_class = resolve_type<Base>();
new_base_data.deep_upcasts.push_back(upcast_func_t{ new_deep_upcasts.push_back(upcast_func_t{
.target{base_class}, .target{base_class.get_id()},
.upcast{[]() { .upcast{[]() {
if constexpr ( requires { static_cast<Base*>(std::declval<Class*>()); } ) { if constexpr ( requires { static_cast<Base*>(std::declval<Class*>()); } ) {
return +[](void* from) -> void* { return static_cast<Base*>(static_cast<Class*>(from)); }; return +[](void* from) -> void* { //
return static_cast<Base*>(static_cast<Class*>(from));
};
} else { } else {
return nullptr; return nullptr;
} }
@@ -8327,16 +8323,16 @@ namespace meta_hpp::detail
}); });
if constexpr ( std::is_same_v<Class, Derived> ) { if constexpr ( std::is_same_v<Class, Derived> ) {
new_base_data.base_classes.push_back(base_class); new_base_classes.push_back(base_class);
} }
recur.template operator()<Base>(recur); recur.template operator()<Base>(recur);
}; };
const auto add_new_bases = [&add_new_base]<class_kind Derived>(auto&& recur) { const auto add_new_bases = [&]<class_kind Derived>(auto&& recur) {
if constexpr ( check_base_info_enabled<Derived> ) { if constexpr ( check_base_info_enabled<Derived> ) {
using meta_base_info = typename Derived::meta_base_info; using meta_base_info = typename Derived::meta_base_info;
meta_base_info::for_each([&add_new_base, &recur]<class_kind Base>() { meta_base_info::for_each([&]<class_kind Base>() { //
add_new_base.template operator()<Base, Derived>(recur); add_new_base.template operator()<Base, Derived>(recur);
}); });
} else { } else {
@@ -8346,8 +8342,8 @@ namespace meta_hpp::detail
add_new_bases.template operator()<Class>(add_new_bases); add_new_bases.template operator()<Class>(add_new_bases);
base_classes.swap(new_base_data.base_classes); base_classes.swap(new_base_classes);
deep_upcasts.swap(new_base_data.deep_upcasts); deep_upcasts.swap(new_deep_upcasts);
} }
} }

View File

@@ -126,10 +126,6 @@ namespace meta_hpp
return id_type{data_}; return id_type{data_};
} }
[[nodiscard]] explicit operator id_type() const noexcept {
return get_id();
}
[[nodiscard]] type_kind get_kind() const noexcept { [[nodiscard]] type_kind get_kind() const noexcept {
return data_->kind; return data_->kind;
} }

View File

@@ -27,19 +27,19 @@ namespace meta_hpp::detail
, size{class_traits<Class>::size} , size{class_traits<Class>::size}
, align{class_traits<Class>::align} , align{class_traits<Class>::align}
, argument_types{resolve_types(typename class_traits<Class>::argument_types{})} { , argument_types{resolve_types(typename class_traits<Class>::argument_types{})} {
struct { class_list new_base_classes;
class_list base_classes; deep_upcasts_t new_deep_upcasts;
deep_upcasts_t deep_upcasts;
} new_base_data;
const auto add_new_base = [&new_base_data]<class_kind Base, class_kind Derived>(auto&& recur) { const auto add_new_base = [&]<class_kind Base, class_kind Derived>(auto&& recur) {
const class_type& base_class = resolve_type<Base>(); const class_type& base_class = resolve_type<Base>();
new_base_data.deep_upcasts.push_back(upcast_func_t{ new_deep_upcasts.push_back(upcast_func_t{
.target{base_class}, .target{base_class.get_id()},
.upcast{[]() { .upcast{[]() {
if constexpr ( requires { static_cast<Base*>(std::declval<Class*>()); } ) { if constexpr ( requires { static_cast<Base*>(std::declval<Class*>()); } ) {
return +[](void* from) -> void* { return static_cast<Base*>(static_cast<Class*>(from)); }; return +[](void* from) -> void* { //
return static_cast<Base*>(static_cast<Class*>(from));
};
} else { } else {
return nullptr; return nullptr;
} }
@@ -47,16 +47,16 @@ namespace meta_hpp::detail
}); });
if constexpr ( std::is_same_v<Class, Derived> ) { if constexpr ( std::is_same_v<Class, Derived> ) {
new_base_data.base_classes.push_back(base_class); new_base_classes.push_back(base_class);
} }
recur.template operator()<Base>(recur); recur.template operator()<Base>(recur);
}; };
const auto add_new_bases = [&add_new_base]<class_kind Derived>(auto&& recur) { const auto add_new_bases = [&]<class_kind Derived>(auto&& recur) {
if constexpr ( check_base_info_enabled<Derived> ) { if constexpr ( check_base_info_enabled<Derived> ) {
using meta_base_info = typename Derived::meta_base_info; using meta_base_info = typename Derived::meta_base_info;
meta_base_info::for_each([&add_new_base, &recur]<class_kind Base>() { meta_base_info::for_each([&]<class_kind Base>() { //
add_new_base.template operator()<Base, Derived>(recur); add_new_base.template operator()<Base, Derived>(recur);
}); });
} else { } else {
@@ -66,8 +66,8 @@ namespace meta_hpp::detail
add_new_bases.template operator()<Class>(add_new_bases); add_new_bases.template operator()<Class>(add_new_bases);
base_classes.swap(new_base_data.base_classes); base_classes.swap(new_base_classes);
deep_upcasts.swap(new_base_data.deep_upcasts); deep_upcasts.swap(new_deep_upcasts);
} }
} }