diff --git a/include/etl/private/variant_new.h b/include/etl/private/variant_new.h index eaeb2698..7c8cf7a5 100644 --- a/include/etl/private/variant_new.h +++ b/include/etl/private/variant_new.h @@ -272,19 +272,12 @@ namespace etl { using type = etl::remove_reference_t; - operation = operation_type::value, etl::is_move_constructible::value>::do_operation; - type_id = etl::private_variant::parameter_pack::template index_of_type::value; - - bool bc = etl::is_copy_constructible::value; - bool bm = etl::is_move_constructible::value; - - type t; - - size_t s = sizeof(operation); - static_assert(etl::is_one_of::value, "Unsupported type"); construct_in_place(data, std::forward(value)); + + operation = operation_type::value, etl::is_move_constructible::value>::do_operation; + type_id = etl::private_variant::parameter_pack::template index_of_type::value; } //*************************************************************************** @@ -296,7 +289,7 @@ namespace etl { using type = etl::remove_reference_t; - construct_in_place(data, std::forward(args)...); + construct_in_place_args(data, std::forward(args)...); operation = operation_type::value, etl::is_move_constructible::value>::do_operation; type_id = etl::private_variant::parameter_pack::template index_of_type::value; @@ -312,9 +305,9 @@ namespace etl { using type = typename private_variant::parameter_pack:: template type_from_index_t; - construct_in_place(data, std::forward(args)...); + construct_in_place_args(data, std::forward(args)...); - operation_type = operation_type::value, etl::is_move_constructible::value>::do_operation; + operation = operation_type::value, etl::is_move_constructible::value>::do_operation; } #if ETL_CPP11_SUPPORTED && ETL_NOT_USING_STLPORT && ETL_USING_STL @@ -327,12 +320,10 @@ namespace etl { using type = etl::remove_reference_t; - construct_in_place(data, std::forward(args)...); + construct_in_place_args(data, std::forward(args)...); operation = operation_type::value, etl::is_move_constructible::value>::do_operation; - operation(command::Move, data, reinterpret_cast(&temp)); - - type_id = private_variant::parameter_pack:: template index_of_type::value; + type_id = private_variant::parameter_pack:: template index_of_type::value; } //*************************************************************************** @@ -345,7 +336,7 @@ namespace etl { using type = typename private_variant::parameter_pack:: template type_from_index_t; - construct_in_place(data, std::forward(args)...); + construct_in_place_args(data, std::forward(args)...); operation = operation_type::value, etl::is_move_constructible::value>::do_operation; } @@ -425,7 +416,7 @@ namespace etl operation(command::Destroy, data, nullptr); - construct_in_place(data, std::forward(args)...); + construct_in_place_args(data, std::forward(args)...); operation = operation_type::value, etl::is_move_constructible::value>::do_operation; @@ -447,7 +438,7 @@ namespace etl operation(command::Destroy, data, nullptr); - construct_in_place(data, std::forward(value)); + construct_in_place(data, etl::forward(value)); operation = operation_type::value, etl::is_move_constructible::value>::do_operation; type_id = etl::private_variant::parameter_pack::template index_of_type::value; @@ -583,18 +574,20 @@ namespace etl { using type = etl::remove_reference_t; - ::new (pstorage) type(etl::forward(value)); + ::new (pstorage) type(etl::move(value)); } //*************************************************************************** /// Construct the type in-place. Variadic args. //*************************************************************************** template - static void construct_in_place(char* pstorage, TArgs&&... args) + static void construct_in_place_args(char* pstorage, TArgs&&... args) { using type = etl::remove_reference_t; - ::new (pstorage) type(etl::forward(args)...); + type t; + + ::new (pstorage) type(etl::forward(args)...); } //*************************************************************************** @@ -747,6 +740,7 @@ namespace etl default: { + assert(false); break; } }