#include <iostream>
#include <typeinfo>
using namespace std;
struct alignas(256) D {
char a;
char b;
};
template<typename T>
void* alloc(size_t n) {
return reinterpret_cast<void*>(new
aligned_storage<sizeof(T), alignof(T)>[n]);
}
template<typename T>
int allocSize() {
cout << "sizeof = " << sizeof(T) << ", alignof = " << alignof(
T) << endl;
cout << "type = " << typeid(typename
aligned_storage<sizeof(T), alignof(T)>::type).name() << endl;
return sizeof(typename
aligned_storage<sizeof(T), alignof(T)>::type);
}
int main() {
cout << allocSize<D>() << endl;
cout << alloc<D>(5) << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGFsaWduYXMoMjU2KSBEIHsKICAgIGNoYXIgYTsKICAgIGNoYXIgYjsKICAgIH07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp2b2lkKiBhbGxvYyhzaXplX3QgbikgewogICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG5ldwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduZWRfc3RvcmFnZTxzaXplb2YoVCksIGFsaWdub2YoVCk+W25dKTsKICAgIH0KCnRlbXBsYXRlPHR5cGVuYW1lIFQ+CmludCBhbGxvY1NpemUoKSB7CiAgICBjb3V0IDw8ICJzaXplb2YgPSAiIDw8IHNpemVvZihUKSA8PCAiLCBhbGlnbm9mID0gIiA8PCBhbGlnbm9mKAogICAgICAgICAgICAgVCkgPDwgZW5kbDsKICAgIGNvdXQgPDwgInR5cGUgPSAiIDw8IHR5cGVpZCh0eXBlbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduZWRfc3RvcmFnZTxzaXplb2YoVCksIGFsaWdub2YoVCk+Ojp0eXBlKS5uYW1lKCkgPDwgZW5kbDsKICAgIHJldHVybiBzaXplb2YodHlwZW5hbWUKICAgICAgICAgICAgICAgICAgYWxpZ25lZF9zdG9yYWdlPHNpemVvZihUKSwgYWxpZ25vZihUKT46OnR5cGUpOwogICAgfQoKCmludCBtYWluKCkgewogICAgY291dCA8PCBhbGxvY1NpemU8RD4oKSA8PCBlbmRsOwogICAgY291dCA8PCBhbGxvYzxEPig1KSA8PCBlbmRsOwogICAgfQoK