use inplace uvalue creation

This commit is contained in:
BlackMATov
2023-01-01 12:37:16 +07:00
parent cdf074e34c
commit 1c44fece15
3 changed files with 14 additions and 14 deletions

View File

@@ -42,18 +42,18 @@ namespace meta_hpp::detail
} }
if constexpr ( as_object ) { if constexpr ( as_object ) {
class_type return_value{args[Is].cast<type_list_at_t<Is, argument_types>>()...}; return make_uvalue<class_type>(
return uvalue{std::move(return_value)}; args[Is].cast<type_list_at_t<Is, argument_types>>()...);
} }
if constexpr ( as_raw_ptr ) { if constexpr ( as_raw_ptr ) {
auto return_value{std::make_unique<class_type>(args[Is].cast<type_list_at_t<Is, argument_types>>()...)}; return uvalue{std::make_unique<class_type>(
return uvalue{return_value.release()}; args[Is].cast<type_list_at_t<Is, argument_types>>()...).release()};
} }
if constexpr ( as_shared_ptr ) { if constexpr ( as_shared_ptr ) {
auto return_value{std::make_shared<class_type>(args[Is].cast<type_list_at_t<Is, argument_types>>()...)}; return uvalue{std::make_shared<class_type>(
return uvalue{std::move(return_value)}; args[Is].cast<type_list_at_t<Is, argument_types>>()...)};
} }
}(std::make_index_sequence<ct::arity>()); }(std::make_index_sequence<ct::arity>());
} }

View File

@@ -5182,18 +5182,18 @@ namespace meta_hpp::detail
} }
if constexpr ( as_object ) { if constexpr ( as_object ) {
class_type return_value{args[Is].cast<type_list_at_t<Is, argument_types>>()...}; return make_uvalue<class_type>(
return uvalue{std::move(return_value)}; args[Is].cast<type_list_at_t<Is, argument_types>>()...);
} }
if constexpr ( as_raw_ptr ) { if constexpr ( as_raw_ptr ) {
auto return_value{std::make_unique<class_type>(args[Is].cast<type_list_at_t<Is, argument_types>>()...)}; return uvalue{std::make_unique<class_type>(
return uvalue{return_value.release()}; args[Is].cast<type_list_at_t<Is, argument_types>>()...).release()};
} }
if constexpr ( as_shared_ptr ) { if constexpr ( as_shared_ptr ) {
auto return_value{std::make_shared<class_type>(args[Is].cast<type_list_at_t<Is, argument_types>>()...)}; return uvalue{std::make_shared<class_type>(
return uvalue{std::move(return_value)}; args[Is].cast<type_list_at_t<Is, argument_types>>()...)};
} }
}(std::make_index_sequence<ct::arity>()); }(std::make_index_sequence<ct::arity>());
} }

View File

@@ -99,8 +99,8 @@ TEST_CASE("meta/meta_states/ctor") {
} }
CHECK(clazz<1>::constructor_counter == 1); CHECK(clazz<1>::constructor_counter == 1);
CHECK(clazz<1>::destructor_counter == 2); CHECK(clazz<1>::destructor_counter == 1);
CHECK(clazz<1>::move_constructor_counter == 1); CHECK(clazz<1>::move_constructor_counter == 0);
CHECK(clazz<1>::copy_constructor_counter == 0); CHECK(clazz<1>::copy_constructor_counter == 0);
} }