mirror of
https://github.com/BlackMATov/meta.hpp.git
synced 2025-12-15 03:45:30 +07:00
use inplace uvalue creation
This commit is contained in:
@@ -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>());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user