#include <iostream>
#include <type_traits>
constexpr int Alignment = 256;
struct alignas(Alignment)AlignedStruct {
int dummy;
};
using AlignedStorage = typename std::aligned_storage<sizeof(AlignedStruct), alignof(AlignedStruct)>::type;
using AlignedUnion = typename std::aligned_union<1, AlignedStruct>::type;
using Aligned256 = typename std::aligned_storage<256, 256>::type;
template<typename X>
void print()
{
std::cout << "size=" << sizeof(X) << ", align=" << alignof(X) << "." << std::endl;
}
int main(void)
{
print<AlignedStruct>();
print<AlignedStorage>();
print<AlignedUnion>();
print<Aligned256>();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CgoKY29uc3RleHByIGludCBBbGlnbm1lbnQgPSAyNTY7CnN0cnVjdCBhbGlnbmFzKEFsaWdubWVudClBbGlnbmVkU3RydWN0IHsKICAgIGludCBkdW1teTsKfTsKdXNpbmcgQWxpZ25lZFN0b3JhZ2UgPSB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTxzaXplb2YoQWxpZ25lZFN0cnVjdCksIGFsaWdub2YoQWxpZ25lZFN0cnVjdCk+Ojp0eXBlOwp1c2luZyBBbGlnbmVkVW5pb24gPSB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfdW5pb248MSwgQWxpZ25lZFN0cnVjdD46OnR5cGU7CnVzaW5nIEFsaWduZWQyNTYgPSB0eXBlbmFtZSBzdGQ6OmFsaWduZWRfc3RvcmFnZTwyNTYsIDI1Nj46OnR5cGU7Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBYPgp2b2lkIHByaW50KCkKewogICAgc3RkOjpjb3V0IDw8ICJzaXplPSIgPDwgc2l6ZW9mKFgpIDw8ICIsIGFsaWduPSIgPDwgYWxpZ25vZihYKSA8PCAiLiIgPDwgc3RkOjplbmRsOwp9CgppbnQgbWFpbih2b2lkKQp7CiAgICBwcmludDxBbGlnbmVkU3RydWN0PigpOwogICAgcHJpbnQ8QWxpZ25lZFN0b3JhZ2U+KCk7CiAgICBwcmludDxBbGlnbmVkVW5pb24+KCk7CiAgICBwcmludDxBbGlnbmVkMjU2PigpOwogICAgcmV0dXJuIDA7Cn0K