#include <iostream>
#include <type_traits>
template <typename DestinationType, typename SourceType>
DestinationType* pod_cast(SourceType* p)
{
static_assert(std::is_fundamental<DestinationType>::value, "");
static_assert(std::is_fundamental<SourceType>::value, "");
return new (p) DestinationType;
}
int main()
{
char c;
char p[42];
auto d = pod_cast<double>(p);
char c2;
double test = 13.37;
*d = 67895762394.2352345;
std::cout << *d << '\n';
std::cout << (void*)&c << '\n';
std::cout << (void*)p << '\n';
std::cout << (void*)d << '\n';
std::cout << (void*)&c2 << '\n';
std::cout << (void*)&test << '\n';
std::cout << "char: " << alignof(char) << '\n';
std::cout << "short: " << alignof(short) << '\n';
std::cout << "double: " << alignof(double) << '\n';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRGVzdGluYXRpb25UeXBlLCB0eXBlbmFtZSBTb3VyY2VUeXBlPgpEZXN0aW5hdGlvblR5cGUqIHBvZF9jYXN0KFNvdXJjZVR5cGUqIHApCnsKCXN0YXRpY19hc3NlcnQoc3RkOjppc19mdW5kYW1lbnRhbDxEZXN0aW5hdGlvblR5cGU+Ojp2YWx1ZSwgIiIpOwoJc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Z1bmRhbWVudGFsPFNvdXJjZVR5cGU+Ojp2YWx1ZSwgIiIpOwoJcmV0dXJuIG5ldyAocCkgRGVzdGluYXRpb25UeXBlOwp9CgppbnQgbWFpbigpCnsKCWNoYXIgYzsKCWNoYXIgcFs0Ml07CglhdXRvIGQgPSBwb2RfY2FzdDxkb3VibGU+KHApOwoJY2hhciBjMjsKCWRvdWJsZSB0ZXN0ID0gMTMuMzc7CgkqZCA9IDY3ODk1NzYyMzk0LjIzNTIzNDU7CglzdGQ6OmNvdXQgPDwgKmQgPDwgJ1xuJzsKCXN0ZDo6Y291dCA8PCAodm9pZCopJmMgPDwgJ1xuJzsKCXN0ZDo6Y291dCA8PCAodm9pZCopcCA8PCAnXG4nOwoJc3RkOjpjb3V0IDw8ICh2b2lkKilkIDw8ICdcbic7CglzdGQ6OmNvdXQgPDwgKHZvaWQqKSZjMiA8PCAnXG4nOwoJc3RkOjpjb3V0IDw8ICh2b2lkKikmdGVzdCA8PCAnXG4nOwoJc3RkOjpjb3V0IDw8ICJjaGFyOiAiIDw8IGFsaWdub2YoY2hhcikgPDwgJ1xuJzsKCXN0ZDo6Y291dCA8PCAic2hvcnQ6ICIgPDwgYWxpZ25vZihzaG9ydCkgPDwgJ1xuJzsKCXN0ZDo6Y291dCA8PCAiZG91YmxlOiAiIDw8IGFsaWdub2YoZG91YmxlKSA8PCAnXG4nOwp9