#include <iostream>
#include <type_traits>
int main()
{
using storage_type =
std::aligned_storage<sizeof(double), alignof(double)>::type;
using union_storage_type =
std::aligned_union<sizeof(double), double>::type;
storage_type storage;
union_storage_type union_storage;
std::cout << sizeof(storage_type) << '\n';
std::cout << sizeof(union_storage_type) << '\n';
std::cout << sizeof(storage) << '\n';
std::cout << sizeof(union_storage) << '\n';
std::cout << sizeof(double) << '\n';
return 0;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KICAgICAKICAgIGludCBtYWluKCkgCiAgICB7CiAgICAgICAgdXNpbmcgc3RvcmFnZV90eXBlID0gCiAgICAgICAgICAgIHN0ZDo6YWxpZ25lZF9zdG9yYWdlPHNpemVvZihkb3VibGUpLCBhbGlnbm9mKGRvdWJsZSk+Ojp0eXBlOwogICAgICAgIHVzaW5nIHVuaW9uX3N0b3JhZ2VfdHlwZSA9CiAgICAgICAgICAgIHN0ZDo6YWxpZ25lZF91bmlvbjxzaXplb2YoZG91YmxlKSwgZG91YmxlPjo6dHlwZTsKCiAgICAgICAgc3RvcmFnZV90eXBlIHN0b3JhZ2U7CiAgICAgICAgdW5pb25fc3RvcmFnZV90eXBlIHVuaW9uX3N0b3JhZ2U7CgogICAgICAgIHN0ZDo6Y291dCA8PCBzaXplb2Yoc3RvcmFnZV90eXBlKSA8PCAnXG4nOwogICAgICAgIHN0ZDo6Y291dCA8PCBzaXplb2YodW5pb25fc3RvcmFnZV90eXBlKSA8PCAnXG4nOwogICAgICAgIHN0ZDo6Y291dCA8PCBzaXplb2Yoc3RvcmFnZSkgPDwgJ1xuJzsKICAgICAgICBzdGQ6OmNvdXQgPDwgc2l6ZW9mKHVuaW9uX3N0b3JhZ2UpIDw8ICdcbic7CiAgICAgICAgc3RkOjpjb3V0IDw8IHNpemVvZihkb3VibGUpIDw8ICdcbic7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9