The expected output for sizeof(std::aligned_union<T>::type) is >= 24, not 16. The unexpectedly small size of std::aligned_union<T>::type results in undefined behavior if used for its intended purpose.
Specifically, the standard says in 18.104.22.168:
The member typedef type shall be a POD type suitable for use as uninitialized storage for any object whose type is listed in Types; its size shall be at least Len.
I am currently working around this by ensuring that the size supplied for Len is the maximum of sizeof of all types.