How to use std::aligned_union
c++, c++11
Solution
The `aligned_union` type gives you a POD type that's suitable as storage for the desired classes - it is not actually an object of that type. You still have to construct your own object:
#include <memory>
{
std::aligned_union<sizeof(use), include, use>::type storage;
use * p = new (static_cast<void*>(std::addressof(storage))) use(from, to);
// ...
p->~use();
}
Problem
In trying to learn how to use std::aligned_union I am having trouble finding any examples. My attempt is running into problems that I do not know how to solve. ``` struct include { std::string file; }; struct use { use(const std::string &from, const std::string &to) : from{ from }, to{ to } { } std::string from; std::string to; }; std::aligned_union<sizeof(use), include, use>::type item; *reinterpret_cast<use*>(&item_) = use{ from, to }; ``` When I attempt to run the program in VC++2013 debug mode I get a runtime error in `memcpy(unsigned char * dst, unsigned char * src, unsigned long count)`. I assume that this is how VC++ implements the assignment from the temporary. How would I change this so that I do not have this issue?