meta: explicit checks

This commit is contained in:
Michele Caini
2024-12-12 12:38:11 +01:00
parent b879c722f4
commit b353f2ed7f

View File

@@ -555,14 +555,14 @@ public:
*/
[[nodiscard]] meta_sequence_container as_sequence_container() noexcept {
meta_sequence_container proxy = (storage.policy() == any_policy::cref) ? std::as_const(*this).as_sequence_container() : meta_sequence_container{};
if(!proxy && vtable) { vtable(internal::meta_traits::is_sequence_container, *ctx, storage.data(), &proxy); }
if(!proxy && vtable != nullptr) { vtable(internal::meta_traits::is_sequence_container, *ctx, storage.data(), &proxy); }
return proxy;
}
/*! @copydoc as_sequence_container */
[[nodiscard]] meta_sequence_container as_sequence_container() const noexcept {
meta_sequence_container proxy{};
if(vtable) { vtable(internal::meta_traits::is_sequence_container | internal::meta_traits::is_const, *ctx, storage.data(), &proxy); }
if(vtable != nullptr) { vtable(internal::meta_traits::is_sequence_container | internal::meta_traits::is_const, *ctx, storage.data(), &proxy); }
return proxy;
}
@@ -572,14 +572,14 @@ public:
*/
[[nodiscard]] meta_associative_container as_associative_container() noexcept {
meta_associative_container proxy = (storage.policy() == any_policy::cref) ? std::as_const(*this).as_associative_container() : meta_associative_container{};
if(!proxy && vtable) { vtable(internal::meta_traits::is_associative_container, *ctx, storage.data(), &proxy); }
if(!proxy && vtable != nullptr) { vtable(internal::meta_traits::is_associative_container, *ctx, storage.data(), &proxy); }
return proxy;
}
/*! @copydoc as_associative_container */
[[nodiscard]] meta_associative_container as_associative_container() const noexcept {
meta_associative_container proxy{};
if(vtable) { vtable(internal::meta_traits::is_associative_container | internal::meta_traits::is_const, *ctx, storage.data(), &proxy); }
if(vtable != nullptr) { vtable(internal::meta_traits::is_associative_container | internal::meta_traits::is_const, *ctx, storage.data(), &proxy); }
return proxy;
}
@@ -590,7 +590,7 @@ public:
*/
[[nodiscard]] meta_any operator*() const noexcept {
meta_any ret{meta_ctx_arg, *ctx};
if(vtable) { vtable(internal::meta_traits::is_pointer_like, *ctx, storage.data(), &ret); }
if(vtable != nullptr) { vtable(internal::meta_traits::is_pointer_like, *ctx, storage.data(), &ret); }
return ret;
}