|
|
@@ -45,7 +45,7 @@ public:
|
|
|
*/
|
|
|
template<typename Type>
|
|
|
meta_sequence_container(std::in_place_type_t<Type>, any instance) noexcept
|
|
|
- : value_type_node{internal::meta_node<typename Type::value_type>::resolve()},
|
|
|
+ : value_type_node{&internal::meta_node<typename Type::value_type>::resolve},
|
|
|
size_fn{&meta_sequence_container_traits<Type>::size},
|
|
|
resize_fn{&meta_sequence_container_traits<Type>::resize},
|
|
|
iter_fn{&meta_sequence_container_traits<Type>::iter},
|
|
|
@@ -64,7 +64,7 @@ public:
|
|
|
[[nodiscard]] inline explicit operator bool() const noexcept;
|
|
|
|
|
|
private:
|
|
|
- internal::meta_type_node *value_type_node = nullptr;
|
|
|
+ internal::meta_type_node *(*value_type_node)() noexcept = nullptr;
|
|
|
size_type (*size_fn)(const any &) noexcept = nullptr;
|
|
|
bool (*resize_fn)(any &, size_type) = nullptr;
|
|
|
iterator (*iter_fn)(any &, const bool) = nullptr;
|
|
|
@@ -93,9 +93,9 @@ public:
|
|
|
template<typename Type>
|
|
|
meta_associative_container(std::in_place_type_t<Type>, any instance) noexcept
|
|
|
: key_only_container{meta_associative_container_traits<Type>::key_only},
|
|
|
- key_type_node{internal::meta_node<typename Type::key_type>::resolve()},
|
|
|
+ key_type_node{&internal::meta_node<typename Type::key_type>::resolve},
|
|
|
mapped_type_node{nullptr},
|
|
|
- value_type_node{internal::meta_node<typename Type::value_type>::resolve()},
|
|
|
+ value_type_node{&internal::meta_node<typename Type::value_type>::resolve},
|
|
|
size_fn{&meta_associative_container_traits<Type>::size},
|
|
|
clear_fn{&meta_associative_container_traits<Type>::clear},
|
|
|
iter_fn{&meta_associative_container_traits<Type>::iter},
|
|
|
@@ -103,7 +103,7 @@ public:
|
|
|
find_fn{&meta_associative_container_traits<Type>::find},
|
|
|
storage{std::move(instance)} {
|
|
|
if constexpr(!meta_associative_container_traits<Type>::key_only) {
|
|
|
- mapped_type_node = internal::meta_node<typename Type::mapped_type>::resolve();
|
|
|
+ mapped_type_node = &internal::meta_node<typename Type::mapped_type>::resolve;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -122,9 +122,9 @@ public:
|
|
|
|
|
|
private:
|
|
|
bool key_only_container{};
|
|
|
- internal::meta_type_node *key_type_node = nullptr;
|
|
|
- internal::meta_type_node *mapped_type_node = nullptr;
|
|
|
- internal::meta_type_node *value_type_node = nullptr;
|
|
|
+ internal::meta_type_node *(*key_type_node)() noexcept = nullptr;
|
|
|
+ internal::meta_type_node *(*mapped_type_node)() noexcept = nullptr;
|
|
|
+ internal::meta_type_node *(*value_type_node)() noexcept = nullptr;
|
|
|
size_type (*size_fn)(const any &) noexcept = nullptr;
|
|
|
bool (*clear_fn)(any &) = nullptr;
|
|
|
iterator (*iter_fn)(any &, const bool) = nullptr;
|
|
|
@@ -1664,7 +1664,7 @@ private:
|
|
|
* @return The meta value type of the container.
|
|
|
*/
|
|
|
[[nodiscard]] inline meta_type meta_sequence_container::value_type() const noexcept {
|
|
|
- return value_type_node;
|
|
|
+ return value_type_node();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1760,7 +1760,7 @@ inline meta_sequence_container::iterator meta_sequence_container::erase(iterator
|
|
|
* @return The meta key type of the a container.
|
|
|
*/
|
|
|
[[nodiscard]] inline meta_type meta_associative_container::key_type() const noexcept {
|
|
|
- return key_type_node;
|
|
|
+ return key_type_node();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1768,12 +1768,12 @@ inline meta_sequence_container::iterator meta_sequence_container::erase(iterator
|
|
|
* @return The meta mapped type of the a container.
|
|
|
*/
|
|
|
[[nodiscard]] inline meta_type meta_associative_container::mapped_type() const noexcept {
|
|
|
- return mapped_type_node;
|
|
|
+ return mapped_type_node ? mapped_type_node() : nullptr;
|
|
|
}
|
|
|
|
|
|
/*! @copydoc meta_sequence_container::value_type */
|
|
|
[[nodiscard]] inline meta_type meta_associative_container::value_type() const noexcept {
|
|
|
- return value_type_node;
|
|
|
+ return value_type_node();
|
|
|
}
|
|
|
|
|
|
/*! @copydoc meta_sequence_container::size */
|