https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122267
--- Comment #10 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Indeed,
if constexpr ((sizeof(_Vt) & (sizeof(_Vt) - 1)) || sizeof(_Vt) > 16)
{
if constexpr (is_floating_point_v<_Vt> || is_pointer_v<_Vt>)
return __alignof__(_Vt);
else
return alignof(_Vt);
}
else
// 1/2/4/8/16-byte types, including integral types,
// must be aligned to at least their size.
return (sizeof(_Vt) > alignof(_Vt)) ? sizeof(_Vt) : alignof(_Vt);
would make more sense to me.