Open SergeyIvanov87 opened 6 years ago
/cc @artemp
@SergeyIvanov87 - It looks like you're correct but I vaguely recall having some reasons for not having a check. I'll need to dig through history to see why implementation ended up like this and if we need to fix it. Thanks!
This struck me as well. i'm upgrading it from "possible" to "definite".
I fixed it by adding if(&rhs==this) return;
to copy_assign() and move_assign() but I don't really have a lot of confidence that's technically correct. Nevertheless it did fix my manifestation of the problem and I didn't immediately see any other bad consequences.
@SergeyIvanov87 @mgambrell @springmeyer - I don't remember why there's no check for the self assignment. I can only think that at some point operaror= signature was :
VARIANT_INLINE variant<Types...>& operator=(variant<Types...> other) // <--- pass by value
I'll take a look at adding the test tomorrow, thanks!
Hi, Thanks to you variant implementation! But i see, that there are issue in member
Now there are no check for
&other ==this
andcopy_assign
can destroy variant member data's before actual copy to itselfSo, in result
helper_type::copy(rhs.type_index, &rhs.data, &data);
can operate with invalid dataBest Regards