
On 09/22/10 13:46, Mathias Gaunard wrote:
On 22/09/2010 18:35, Larry Evans wrote:
How would C++0x avoid the problem?
By allowing to put non-PODs in unions.
Could you point to the variant code violating this rule?
aligned_storage<whatever>::type is a POD type of a certain type T. In order to read and write any of the object a variant can hold, it will need to reinterpret cast from a pointer to that object to a pointer to any of these object types, that are not necessarily the same as T.
I thought variant just static_cast<char*> to void* then from void* to T*. The char* is for the memory buffer in boost::aligned_storage. IOW, it doesn't use reinterpret_cast. To confirm, I did: find . -name \*.hpp -exec grep _cast {} \; -ls in boost/variant and only found static_cast. Now, as far as Frank's point about operator=, my reply to his post indicated there would never be a case where two pointers of different types and pointing to the same memory location would be in scope at the same time in the operator= implementation, at least for the container_one_of_maybe mentioned in my reply. I don't know if that is true for boost::variant. -Larry