#include template void Reconstruct(T& x, Args&&... args) { static_assert(!std::has_virtual_destructor::value, "Unsafe"); x.~T(); new (&x) T(std::forward(args)...); }