@@ -93,9 +93,10 @@ struct Value final {
93
93
payload.u.member_name = rhs.payload.u.member_name; \
94
94
break ;
95
95
96
- #define CASE_MOVE_MOVEABLE_TYPE (type_tag, type, member_name ) \
96
+ #define CASE_MOVE_MOVEABLE_TYPE (type_tag, type, member_name, dtor_name ) \
97
97
case type_tag: \
98
98
new (&payload.member_name) type(std::move(rhs.payload.member_name)); \
99
+ rhs.payload.member_name.~dtor_name (); \
99
100
break ;
100
101
101
102
Value (Value&& rhs) noexcept : tag(rhs.tag) {
@@ -105,20 +106,23 @@ struct Value final {
105
106
CASE_MOVE_TRIVIALLY_COPYABLE_TYPE (TypeTag::DOUBLE, as_double);
106
107
CASE_MOVE_TRIVIALLY_COPYABLE_TYPE (TypeTag::BOOL, as_bool);
107
108
// Tensor and tensor adjacent types
108
- CASE_MOVE_MOVEABLE_TYPE (TypeTag::TENSOR, vTensor, as_tensor);
109
- CASE_MOVE_MOVEABLE_TYPE (TypeTag::STAGING, api::StorageBuffer, as_staging);
110
- CASE_MOVE_MOVEABLE_TYPE (TypeTag::TENSORREF, TensorRef, as_tensorref);
109
+ CASE_MOVE_MOVEABLE_TYPE (TypeTag::TENSOR, vTensor, as_tensor, vTensor);
110
+ CASE_MOVE_MOVEABLE_TYPE (
111
+ TypeTag::STAGING, api::StorageBuffer, as_staging, StorageBuffer);
112
+ CASE_MOVE_MOVEABLE_TYPE (
113
+ TypeTag::TENSORREF, TensorRef, as_tensorref, TensorRef);
111
114
// Scalar lists
112
115
CASE_MOVE_MOVEABLE_TYPE (
113
- TypeTag::INTLIST, std::vector<int64_t >, as_int_list);
116
+ TypeTag::INTLIST, std::vector<int64_t >, as_int_list, vector );
114
117
CASE_MOVE_MOVEABLE_TYPE (
115
- TypeTag::DOUBLELIST, std::vector<double >, as_double_list);
118
+ TypeTag::DOUBLELIST, std::vector<double >, as_double_list, vector );
116
119
CASE_MOVE_MOVEABLE_TYPE (
117
- TypeTag::BOOLLIST, std::vector<bool >, as_bool_list);
120
+ TypeTag::BOOLLIST, std::vector<bool >, as_bool_list, vector );
118
121
// Special types
119
122
CASE_MOVE_MOVEABLE_TYPE (
120
- TypeTag::VALUELIST, std::vector<ValueRef>, as_value_list);
121
- CASE_MOVE_MOVEABLE_TYPE (TypeTag::STRING, std::string, as_string);
123
+ TypeTag::VALUELIST, std::vector<ValueRef>, as_value_list, vector);
124
+ CASE_MOVE_MOVEABLE_TYPE (
125
+ TypeTag::STRING, std::string, as_string, basic_string);
122
126
123
127
case TypeTag::NONE:
124
128
clearToNone ();
0 commit comments