    #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;
    }