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?

Original source

Related problems