entt: std::remove_const_t<std::remove_reference_t<...>> -> std::remove_cvref_t<...>
This commit is contained in:
@@ -68,7 +68,7 @@ class basic_any: private internal::basic_any_storage<Len, Align> {
|
||||
|
||||
template<typename Type>
|
||||
static const void *basic_vtable(const request req, const basic_any &value, const void *other) {
|
||||
static_assert(std::is_same_v<std::remove_const_t<std::remove_reference_t<Type>>, Type>, "Invalid type");
|
||||
static_assert(std::is_same_v<std::remove_cvref_t<Type>, Type>, "Invalid type");
|
||||
|
||||
switch(const auto *elem = static_cast<const Type *>(value.data()); req) {
|
||||
using enum internal::any_request;
|
||||
@@ -112,7 +112,7 @@ class basic_any: private internal::basic_any_storage<Len, Align> {
|
||||
|
||||
template<typename Type>
|
||||
static void basic_deleter(const basic_any &value) {
|
||||
static_assert(std::is_same_v<std::remove_const_t<std::remove_reference_t<Type>>, Type>, "Invalid type");
|
||||
static_assert(std::is_same_v<std::remove_cvref_t<Type>, Type>, "Invalid type");
|
||||
ENTT_ASSERT((value.mode == any_policy::dynamic) || ((value.mode == any_policy::embedded) && !std::is_trivially_destructible_v<Type>), "Unexpected policy");
|
||||
|
||||
const auto *elem = static_cast<const Type *>(value.data());
|
||||
@@ -128,7 +128,7 @@ class basic_any: private internal::basic_any_storage<Len, Align> {
|
||||
|
||||
template<typename Type, typename... Args>
|
||||
void initialize([[maybe_unused]] Args &&...args) {
|
||||
using plain_type = std::remove_const_t<std::remove_reference_t<Type>>;
|
||||
using plain_type = std::remove_cvref_t<Type>;
|
||||
|
||||
vtable = basic_vtable<plain_type>;
|
||||
underlying_type = type_hash<plain_type>::value();
|
||||
@@ -559,7 +559,7 @@ template<typename Type, std::size_t Len, std::size_t Align>
|
||||
template<typename Type, std::size_t Len, std::size_t Align>
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-rvalue-reference-param-not-moved)
|
||||
[[nodiscard]] std::remove_const_t<Type> any_cast(basic_any<Len, Align> &&data) noexcept {
|
||||
if constexpr(std::is_copy_constructible_v<std::remove_const_t<std::remove_reference_t<Type>>>) {
|
||||
if constexpr(std::is_copy_constructible_v<std::remove_cvref_t<Type>>) {
|
||||
if(auto *const instance = any_cast<std::remove_reference_t<Type>>(&data); instance) {
|
||||
return static_cast<Type>(std::move(*instance));
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ struct compressed_pair_element {
|
||||
// NOLINTNEXTLINE(modernize-use-equals-default)
|
||||
constexpr compressed_pair_element() noexcept(std::is_nothrow_default_constructible_v<Type>) {}
|
||||
|
||||
template<typename Arg, typename = std::enable_if_t<!std::is_same_v<std::remove_const_t<std::remove_reference_t<Arg>>, compressed_pair_element>>>
|
||||
template<typename Arg, typename = std::enable_if_t<!std::is_same_v<std::remove_cvref_t<Arg>, compressed_pair_element>>>
|
||||
constexpr compressed_pair_element(Arg &&arg) noexcept(std::is_nothrow_constructible_v<Type, Arg>)
|
||||
: value{std::forward<Arg>(arg)} {}
|
||||
|
||||
@@ -52,7 +52,7 @@ struct compressed_pair_element<Type, Tag, std::enable_if_t<is_ebco_eligible_v<Ty
|
||||
constexpr compressed_pair_element() noexcept(std::is_nothrow_default_constructible_v<base_type>)
|
||||
: base_type{} {}
|
||||
|
||||
template<typename Arg, typename = std::enable_if_t<!std::is_same_v<std::remove_const_t<std::remove_reference_t<Arg>>, compressed_pair_element>>>
|
||||
template<typename Arg, typename = std::enable_if_t<!std::is_same_v<std::remove_cvref_t<Arg>, compressed_pair_element>>>
|
||||
constexpr compressed_pair_element(Arg &&arg) noexcept(std::is_nothrow_constructible_v<base_type, Arg>)
|
||||
: base_type{std::forward<Arg>(arg)} {}
|
||||
|
||||
|
||||
@@ -146,9 +146,9 @@ struct type_info final {
|
||||
template<typename Type>
|
||||
// NOLINTBEGIN(modernize-use-transparent-functors)
|
||||
constexpr type_info(std::in_place_type_t<Type>) noexcept
|
||||
: seq{type_index<std::remove_const_t<std::remove_reference_t<Type>>>::value()},
|
||||
identifier{type_hash<std::remove_const_t<std::remove_reference_t<Type>>>::value()},
|
||||
alias{type_name<std::remove_const_t<std::remove_reference_t<Type>>>::value()} {}
|
||||
: seq{type_index<std::remove_cvref_t<Type>>::value()},
|
||||
identifier{type_hash<std::remove_cvref_t<Type>>::value()},
|
||||
alias{type_name<std::remove_cvref_t<Type>>::value()} {}
|
||||
// NOLINTEND(modernize-use-transparent-functors)
|
||||
|
||||
/**
|
||||
@@ -257,11 +257,11 @@ private:
|
||||
*/
|
||||
template<typename Type>
|
||||
[[nodiscard]] const type_info &type_id() noexcept {
|
||||
if constexpr(std::is_same_v<Type, std::remove_const_t<std::remove_reference_t<Type>>>) {
|
||||
if constexpr(std::is_same_v<Type, std::remove_cvref_t<Type>>) {
|
||||
static const type_info instance{std::in_place_type<Type>};
|
||||
return instance;
|
||||
} else {
|
||||
return type_id<std::remove_const_t<std::remove_reference_t<Type>>>();
|
||||
return type_id<std::remove_cvref_t<Type>>();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -269,7 +269,7 @@ template<typename Type>
|
||||
template<typename Type>
|
||||
// NOLINTNEXTLINE(cppcoreguidelines-missing-std-forward)
|
||||
[[nodiscard]] const type_info &type_id(Type &&) noexcept {
|
||||
return type_id<std::remove_const_t<std::remove_reference_t<Type>>>();
|
||||
return type_id<std::remove_cvref_t<Type>>();
|
||||
}
|
||||
|
||||
} // namespace entt
|
||||
|
||||
@@ -180,7 +180,7 @@ public:
|
||||
|
||||
template<typename Type>
|
||||
Type &insert_or_assign(const id_type id, Type &&value) {
|
||||
return any_cast<std::remove_const_t<std::remove_reference_t<Type>> &>(ctx.insert_or_assign(id, std::forward<Type>(value)).first->second);
|
||||
return any_cast<std::remove_cvref_t<Type> &>(ctx.insert_or_assign(id, std::forward<Type>(value)).first->second);
|
||||
}
|
||||
|
||||
template<typename Type>
|
||||
|
||||
@@ -24,7 +24,7 @@ static constexpr bool tombstone_check_v = ((sizeof...(Type) == 1u) && ... && (Ty
|
||||
|
||||
template<typename Type>
|
||||
const Type *view_placeholder() {
|
||||
static_assert(std::is_same_v<std::remove_const_t<std::remove_reference_t<Type>>, Type>, "Unexpected type");
|
||||
static_assert(std::is_same_v<std::remove_cvref_t<Type>, Type>, "Unexpected type");
|
||||
static const Type placeholder{};
|
||||
return &placeholder;
|
||||
}
|
||||
@@ -227,7 +227,7 @@ class basic_view;
|
||||
*/
|
||||
template<typename Type, bool Checked, std::size_t Get, std::size_t Exclude>
|
||||
class basic_common_view {
|
||||
static_assert(std::is_same_v<std::remove_const_t<std::remove_reference_t<Type>>, Type>, "Unexpected type");
|
||||
static_assert(std::is_same_v<std::remove_cvref_t<Type>, Type>, "Unexpected type");
|
||||
|
||||
template<typename Return, typename View, typename Other, std::size_t... GLhs, std::size_t... ELhs, std::size_t... GRhs, std::size_t... ERhs>
|
||||
friend Return internal::view_pack(const View &, const Other &, std::index_sequence<GLhs...>, std::index_sequence<ELhs...>, std::index_sequence<GRhs...>, std::index_sequence<ERhs...>);
|
||||
@@ -690,7 +690,7 @@ public:
|
||||
*/
|
||||
template<typename Type, deletion_policy Policy>
|
||||
class basic_storage_view {
|
||||
static_assert(std::is_same_v<std::remove_const_t<std::remove_reference_t<Type>>, Type>, "Unexpected type");
|
||||
static_assert(std::is_same_v<std::remove_cvref_t<Type>, Type>, "Unexpected type");
|
||||
|
||||
protected:
|
||||
/*! @cond TURN_OFF_DOXYGEN */
|
||||
|
||||
@@ -63,7 +63,7 @@ inline constexpr bool reserve_aware_container_v = reserve_aware_container<Type>:
|
||||
*/
|
||||
template<typename Type>
|
||||
struct basic_meta_sequence_container_traits {
|
||||
static_assert(std::is_same_v<Type, std::remove_const_t<std::remove_reference_t<Type>>>, "Unexpected type");
|
||||
static_assert(std::is_same_v<Type, std::remove_cvref_t<Type>>, "Unexpected type");
|
||||
|
||||
/*! @brief Unsigned integer type. */
|
||||
using size_type = meta_sequence_container::size_type;
|
||||
@@ -187,7 +187,7 @@ struct basic_meta_sequence_container_traits {
|
||||
*/
|
||||
template<typename Type>
|
||||
struct basic_meta_associative_container_traits {
|
||||
static_assert(std::is_same_v<Type, std::remove_const_t<std::remove_reference_t<Type>>>, "Unexpected type");
|
||||
static_assert(std::is_same_v<Type, std::remove_cvref_t<Type>>, "Unexpected type");
|
||||
|
||||
/*! @brief Unsigned integer type. */
|
||||
using size_type = meta_associative_container::size_type;
|
||||
|
||||
@@ -223,7 +223,7 @@ public:
|
||||
*/
|
||||
template<auto Candidate>
|
||||
auto conv() noexcept {
|
||||
using conv_type = std::remove_const_t<std::remove_reference_t<std::invoke_result_t<decltype(Candidate), Type &>>>;
|
||||
using conv_type = std::remove_cvref_t<std::invoke_result_t<decltype(Candidate), Type &>>;
|
||||
auto *const op = +[](const meta_ctx &area, const void *instance) { return forward_as_meta(area, std::invoke(Candidate, *static_cast<const Type *>(instance))); };
|
||||
base_type::insert_or_assign(internal::meta_conv_node{type_id<conv_type>().hash(), op});
|
||||
return *this;
|
||||
@@ -240,7 +240,7 @@ public:
|
||||
*/
|
||||
template<typename To>
|
||||
meta_factory conv() noexcept {
|
||||
using conv_type = std::remove_const_t<std::remove_reference_t<To>>;
|
||||
using conv_type = std::remove_cvref_t<To>;
|
||||
auto *const op = +[](const meta_ctx &area, const void *instance) { return forward_as_meta(area, static_cast<To>(*static_cast<const Type *>(instance))); };
|
||||
base_type::insert_or_assign(internal::meta_conv_node{type_id<conv_type>().hash(), op});
|
||||
return *this;
|
||||
@@ -263,7 +263,7 @@ public:
|
||||
meta_factory ctor() noexcept {
|
||||
using descriptor = meta_function_helper_t<Type, decltype(Candidate)>;
|
||||
static_assert(Policy::template value<typename descriptor::return_type>, "Invalid return type for the given policy");
|
||||
static_assert(std::is_same_v<std::remove_const_t<std::remove_reference_t<typename descriptor::return_type>>, Type>, "The function doesn't return an object of the required type");
|
||||
static_assert(std::is_same_v<std::remove_cvref_t<typename descriptor::return_type>, Type>, "The function doesn't return an object of the required type");
|
||||
base_type::insert_or_assign(internal::meta_ctor_node{type_id<typename descriptor::args_type>().hash(), descriptor::args_type::size, &meta_arg<typename descriptor::args_type>, &meta_construct<Type, Candidate, Policy>});
|
||||
return *this;
|
||||
}
|
||||
@@ -328,8 +328,8 @@ public:
|
||||
/* this is never static */
|
||||
std::is_const_v<std::remove_reference_t<data_type>> ? internal::meta_traits::is_const : internal::meta_traits::is_none,
|
||||
1u,
|
||||
&internal::resolve<std::remove_const_t<std::remove_reference_t<data_type>>>,
|
||||
&meta_arg<type_list<std::remove_const_t<std::remove_reference_t<data_type>>>>,
|
||||
&internal::resolve<std::remove_cvref_t<data_type>>,
|
||||
&meta_arg<type_list<std::remove_cvref_t<data_type>>>,
|
||||
&meta_setter<Type, Data>,
|
||||
&meta_getter<Type, Data, Policy>});
|
||||
} else {
|
||||
@@ -347,8 +347,8 @@ public:
|
||||
name,
|
||||
((!std::is_pointer_v<decltype(Data)> || std::is_const_v<data_type>) ? internal::meta_traits::is_const : internal::meta_traits::is_none) | internal::meta_traits::is_static,
|
||||
1u,
|
||||
&internal::resolve<std::remove_const_t<std::remove_reference_t<data_type>>>,
|
||||
&meta_arg<type_list<std::remove_const_t<std::remove_reference_t<data_type>>>>,
|
||||
&internal::resolve<std::remove_cvref_t<data_type>>,
|
||||
&meta_arg<type_list<std::remove_cvref_t<data_type>>>,
|
||||
&meta_setter<Type, Data>,
|
||||
&meta_getter<Type, Data, Policy>});
|
||||
}
|
||||
@@ -404,7 +404,7 @@ public:
|
||||
/* this is never static */
|
||||
internal::meta_traits::is_const,
|
||||
0u,
|
||||
&internal::resolve<std::remove_const_t<std::remove_reference_t<typename descriptor::return_type>>>,
|
||||
&internal::resolve<std::remove_cvref_t<typename descriptor::return_type>>,
|
||||
&meta_arg<type_list<>>,
|
||||
&meta_setter<Type, Setter>,
|
||||
&meta_getter<Type, Getter, Policy>});
|
||||
@@ -418,7 +418,7 @@ public:
|
||||
/* this is never static nor const */
|
||||
internal::meta_traits::is_none,
|
||||
1u,
|
||||
&internal::resolve<std::remove_const_t<std::remove_reference_t<typename descriptor::return_type>>>,
|
||||
&internal::resolve<std::remove_cvref_t<typename descriptor::return_type>>,
|
||||
&meta_arg<type_list<type_list_element_t<static_cast<std::size_t>(args_type::size != 1u), args_type>>>,
|
||||
&meta_setter<Type, Setter>,
|
||||
&meta_getter<Type, Getter, Policy>});
|
||||
@@ -464,7 +464,7 @@ public:
|
||||
name,
|
||||
(descriptor::is_const ? internal::meta_traits::is_const : internal::meta_traits::is_none) | (descriptor::is_static ? internal::meta_traits::is_static : internal::meta_traits::is_none),
|
||||
descriptor::args_type::size,
|
||||
&internal::resolve<std::conditional_t<std::is_same_v<Policy, as_void_t>, void, std::remove_const_t<std::remove_reference_t<typename descriptor::return_type>>>>,
|
||||
&internal::resolve<std::conditional_t<std::is_same_v<Policy, as_void_t>, void, std::remove_cvref_t<typename descriptor::return_type>>>,
|
||||
&meta_arg<typename descriptor::args_type>,
|
||||
&meta_invoke<Type, Candidate, Policy>});
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ public:
|
||||
: ctx{&area},
|
||||
data{&instance},
|
||||
value_type_node{&internal::resolve<typename Type::value_type>},
|
||||
const_reference_node{&internal::resolve<std::remove_const_t<std::remove_reference_t<typename Type::const_reference>>>},
|
||||
const_reference_node{&internal::resolve<std::remove_cvref_t<typename Type::const_reference>>},
|
||||
size_fn{meta_sequence_container_traits<std::remove_const_t<Type>>::size},
|
||||
clear_fn{meta_sequence_container_traits<std::remove_const_t<Type>>::clear},
|
||||
reserve_fn{meta_sequence_container_traits<std::remove_const_t<Type>>::reserve},
|
||||
@@ -161,7 +161,7 @@ class meta_any {
|
||||
|
||||
template<typename Type>
|
||||
static void basic_vtable(const internal::meta_traits req, const meta_any &value, [[maybe_unused]] const void *other) {
|
||||
static_assert(std::is_same_v<std::remove_const_t<std::remove_reference_t<Type>>, Type>, "Invalid type");
|
||||
static_assert(std::is_same_v<std::remove_cvref_t<Type>, Type>, "Invalid type");
|
||||
|
||||
if(req == internal::meta_traits::is_none) {
|
||||
value.node = &internal::resolve<Type>(internal::meta_context::from(*value.ctx));
|
||||
@@ -248,7 +248,7 @@ public:
|
||||
explicit meta_any(const meta_ctx &area, std::in_place_type_t<Type>, Args &&...args)
|
||||
: storage{std::in_place_type<Type>, std::forward<Args>(args)...},
|
||||
ctx{&area},
|
||||
vtable{&basic_vtable<std::remove_const_t<std::remove_reference_t<Type>>>} {}
|
||||
vtable{&basic_vtable<std::remove_cvref_t<Type>>} {}
|
||||
|
||||
/**
|
||||
* @brief Constructs a wrapper taking ownership of the passed object.
|
||||
@@ -470,22 +470,22 @@ public:
|
||||
template<typename Type>
|
||||
[[nodiscard]] meta_any allow_cast() const {
|
||||
if constexpr(!std::is_reference_v<Type> || std::is_const_v<std::remove_reference_t<Type>>) {
|
||||
if(storage.has_value<std::remove_const_t<std::remove_reference_t<Type>>>()) {
|
||||
if(storage.has_value<std::remove_cvref_t<Type>>()) {
|
||||
return as_ref();
|
||||
} else if(*this) {
|
||||
if constexpr(std::is_arithmetic_v<std::remove_const_t<std::remove_reference_t<Type>>> || std::is_enum_v<std::remove_const_t<std::remove_reference_t<Type>>>) {
|
||||
if constexpr(std::is_arithmetic_v<std::remove_cvref_t<Type>> || std::is_enum_v<std::remove_cvref_t<Type>>) {
|
||||
if(const auto &from = fetch_node(); from.conversion_helper) {
|
||||
return meta_any{*ctx, static_cast<Type>(from.conversion_helper(nullptr, storage.data()))};
|
||||
}
|
||||
}
|
||||
|
||||
if(const auto &from = fetch_node(); from.details != nullptr) {
|
||||
if(const auto *elem = internal::find_member<&internal::meta_conv_node::type>(from.details->conv, entt::type_hash<std::remove_const_t<std::remove_reference_t<Type>>>::value()); elem != nullptr) {
|
||||
if(const auto *elem = internal::find_member<&internal::meta_conv_node::type>(from.details->conv, entt::type_hash<std::remove_cvref_t<Type>>::value()); elem != nullptr) {
|
||||
return elem->conv(*ctx, storage.data());
|
||||
}
|
||||
|
||||
for(auto &&curr: from.details->base) {
|
||||
if(auto other = curr.resolve(internal::meta_context::from(*ctx)).from_void(*ctx, nullptr, curr.cast(storage.data())); curr.type == entt::type_hash<std::remove_const_t<std::remove_reference_t<Type>>>::value()) {
|
||||
if(auto other = curr.resolve(internal::meta_context::from(*ctx)).from_void(*ctx, nullptr, curr.cast(storage.data())); curr.type == entt::type_hash<std::remove_cvref_t<Type>>::value()) {
|
||||
return other;
|
||||
} else if(auto from_base = std::as_const(other).template allow_cast<Type>(); from_base) {
|
||||
return from_base;
|
||||
@@ -508,9 +508,9 @@ public:
|
||||
if constexpr(std::is_reference_v<Type> && !std::is_const_v<std::remove_reference_t<Type>>) {
|
||||
return allow_cast<const std::remove_reference_t<Type> &>() && (storage.policy() != any_policy::cref);
|
||||
} else {
|
||||
if(storage.has_value<std::remove_const_t<std::remove_reference_t<Type>>>()) {
|
||||
if(storage.has_value<std::remove_cvref_t<Type>>()) {
|
||||
return true;
|
||||
} else if(auto other = std::as_const(*this).allow_cast<std::remove_const_t<std::remove_reference_t<Type>>>(); other) {
|
||||
} else if(auto other = std::as_const(*this).allow_cast<std::remove_cvref_t<Type>>(); other) {
|
||||
if(other.storage.owner()) {
|
||||
std::swap(*this, other);
|
||||
}
|
||||
@@ -526,7 +526,7 @@ public:
|
||||
template<typename Type, typename... Args>
|
||||
void emplace(Args &&...args) {
|
||||
storage.emplace<Type>(std::forward<Args>(args)...);
|
||||
auto *prev = std::exchange(vtable, &basic_vtable<std::remove_const_t<std::remove_reference_t<Type>>>);
|
||||
auto *prev = std::exchange(vtable, &basic_vtable<std::remove_cvref_t<Type>>);
|
||||
node = (prev == vtable) ? node : nullptr;
|
||||
}
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ const meta_type_node &resolve(const meta_context &) noexcept;
|
||||
template<typename... Args>
|
||||
[[nodiscard]] const meta_type_node &meta_arg_node(const meta_context &context, type_list<Args...>, const std::size_t index) noexcept {
|
||||
using resolve_type = const meta_type_node &(*)(const meta_context &) noexcept;
|
||||
constexpr std::array<resolve_type, sizeof...(Args)> list{&resolve<std::remove_const_t<std::remove_reference_t<Args>>>...};
|
||||
constexpr std::array<resolve_type, sizeof...(Args)> list{&resolve<std::remove_cvref_t<Args>>...};
|
||||
ENTT_ASSERT(index < sizeof...(Args), "Out of bounds");
|
||||
return list[index](context);
|
||||
}
|
||||
@@ -278,7 +278,7 @@ auto setup_node_for() noexcept {
|
||||
|
||||
template<typename Type>
|
||||
[[nodiscard]] const meta_type_node &resolve(const meta_context &context) noexcept {
|
||||
static_assert(std::is_same_v<Type, std::remove_const_t<std::remove_reference_t<Type>>>, "Invalid type");
|
||||
static_assert(std::is_same_v<Type, std::remove_cvref_t<Type>>, "Invalid type");
|
||||
static const meta_type_node node = setup_node_for<Type>();
|
||||
const auto *elem = try_resolve(context, *node.info);
|
||||
return (elem == nullptr) ? node : *elem;
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace entt {
|
||||
template<typename Type>
|
||||
[[nodiscard]] meta_type resolve(const meta_ctx &ctx) noexcept {
|
||||
const auto &context = internal::meta_context::from(ctx);
|
||||
return {ctx, internal::resolve<std::remove_const_t<std::remove_reference_t<Type>>>(context)};
|
||||
return {ctx, internal::resolve<std::remove_cvref_t<Type>>(context)};
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -93,11 +93,11 @@ struct meta_function_descriptor<Type, Ret (*)(MaybeType, Args...)>
|
||||
: meta_function_descriptor_traits<
|
||||
Ret,
|
||||
std::conditional_t<
|
||||
std::is_same_v<std::remove_const_t<std::remove_reference_t<MaybeType>>, Type> || std::is_base_of_v<std::remove_const_t<std::remove_reference_t<MaybeType>>, Type>,
|
||||
std::is_same_v<std::remove_cvref_t<MaybeType>, Type> || std::is_base_of_v<std::remove_cvref_t<MaybeType>, Type>,
|
||||
type_list<Args...>,
|
||||
type_list<MaybeType, Args...>>,
|
||||
!(std::is_same_v<std::remove_const_t<std::remove_reference_t<MaybeType>>, Type> || std::is_base_of_v<std::remove_const_t<std::remove_reference_t<MaybeType>>, Type>),
|
||||
std::is_const_v<std::remove_reference_t<MaybeType>> && (std::is_same_v<std::remove_const_t<std::remove_reference_t<MaybeType>>, Type> || std::is_base_of_v<std::remove_const_t<std::remove_reference_t<MaybeType>>, Type>)> {};
|
||||
!(std::is_same_v<std::remove_cvref_t<MaybeType>, Type> || std::is_base_of_v<std::remove_cvref_t<MaybeType>, Type>),
|
||||
std::is_const_v<std::remove_reference_t<MaybeType>> && (std::is_same_v<std::remove_cvref_t<MaybeType>, Type> || std::is_base_of_v<std::remove_cvref_t<MaybeType>, Type>)> {};
|
||||
|
||||
/**
|
||||
* @brief Meta function descriptor.
|
||||
@@ -316,7 +316,7 @@ template<typename Type, auto Data>
|
||||
template<typename Type, auto Data, typename Policy = as_value_t>
|
||||
[[nodiscard]] std::enable_if_t<is_meta_policy_v<Policy>, meta_any> meta_getter(meta_handle instance) {
|
||||
if constexpr(std::is_member_pointer_v<decltype(Data)> || std::is_function_v<std::remove_reference_t<std::remove_pointer_t<decltype(Data)>>>) {
|
||||
if constexpr(!std::is_array_v<std::remove_const_t<std::remove_reference_t<std::invoke_result_t<decltype(Data), Type &>>>>) {
|
||||
if constexpr(!std::is_array_v<std::remove_cvref_t<std::invoke_result_t<decltype(Data), Type &>>>) {
|
||||
if constexpr(std::is_invocable_v<decltype(Data), Type &>) {
|
||||
if(auto *clazz = instance->try_cast<Type>(); clazz) {
|
||||
return meta_dispatch<Policy>(instance->context(), std::invoke(Data, *clazz));
|
||||
@@ -418,7 +418,7 @@ template<typename Type, typename... Args>
|
||||
*/
|
||||
template<typename Type, typename Policy = as_value_t, typename Candidate>
|
||||
[[nodiscard]] meta_any meta_construct(const meta_ctx &ctx, Candidate &&candidate, meta_any *const args) {
|
||||
if constexpr(meta_function_helper_t<Type, Candidate>::is_static || std::is_class_v<std::remove_const_t<std::remove_reference_t<Candidate>>>) {
|
||||
if constexpr(meta_function_helper_t<Type, Candidate>::is_static || std::is_class_v<std::remove_cvref_t<Candidate>>) {
|
||||
meta_any placeholder{meta_ctx_arg, ctx};
|
||||
return internal::meta_invoke<Type, Policy>(placeholder, std::forward<Candidate>(candidate), args, std::make_index_sequence<meta_function_helper_t<Type, std::remove_reference_t<Candidate>>::args_type::size>{});
|
||||
} else {
|
||||
|
||||
@@ -211,16 +211,16 @@ public:
|
||||
template<typename Type, typename... Args>
|
||||
explicit basic_poly(std::in_place_type_t<Type>, Args &&...args)
|
||||
: storage{std::in_place_type<Type>, std::forward<Args>(args)...},
|
||||
vtable{poly_vtable<Concept, Len, Align>::template instance<std::remove_const_t<std::remove_reference_t<Type>>>()} {}
|
||||
vtable{poly_vtable<Concept, Len, Align>::template instance<std::remove_cvref_t<Type>>()} {}
|
||||
|
||||
/**
|
||||
* @brief Constructs a poly from a given value.
|
||||
* @tparam Type Type of object to use to initialize the poly.
|
||||
* @param value An instance of an object to use to initialize the poly.
|
||||
*/
|
||||
template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::remove_const_t<std::remove_reference_t<Type>>, basic_poly>>>
|
||||
template<typename Type, typename = std::enable_if_t<!std::is_same_v<std::remove_cvref_t<Type>, basic_poly>>>
|
||||
basic_poly(Type &&value) noexcept
|
||||
: basic_poly{std::in_place_type<std::remove_const_t<std::remove_reference_t<Type>>>, std::forward<Type>(value)} {}
|
||||
: basic_poly{std::in_place_type<std::remove_cvref_t<Type>>, std::forward<Type>(value)} {}
|
||||
|
||||
/**
|
||||
* @brief Returns the object type info if any, `type_id<void>()` otherwise.
|
||||
@@ -252,7 +252,7 @@ public:
|
||||
template<typename Type, typename... Args>
|
||||
void emplace(Args &&...args) {
|
||||
storage.template emplace<Type>(std::forward<Args>(args)...);
|
||||
vtable = poly_vtable<Concept, Len, Align>::template instance<std::remove_const_t<std::remove_reference_t<Type>>>();
|
||||
vtable = poly_vtable<Concept, Len, Align>::template instance<std::remove_cvref_t<Type>>();
|
||||
}
|
||||
|
||||
/*! @brief Destroys contained object */
|
||||
|
||||
@@ -147,7 +147,7 @@ public:
|
||||
*/
|
||||
template<typename Type>
|
||||
void erase() {
|
||||
handlers.first().erase(type_hash<std::remove_const_t<std::remove_reference_t<Type>>>::value());
|
||||
handlers.first().erase(type_hash<std::remove_cvref_t<Type>>::value());
|
||||
}
|
||||
|
||||
/*! @brief Disconnects all the listeners. */
|
||||
@@ -162,7 +162,7 @@ public:
|
||||
*/
|
||||
template<typename Type>
|
||||
[[nodiscard]] bool contains() const {
|
||||
return handlers.first().contains(type_hash<std::remove_const_t<std::remove_reference_t<Type>>>::value());
|
||||
return handlers.first().contains(type_hash<std::remove_cvref_t<Type>>::value());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user