https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122907
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Now, perhaps because __memcpyable_integer<_Tp>::__width is 0 or some multiple
of __CHAR_BIT__, perhaps easiest fix would be to arrange for this __width on
bool to be 1 rather than __CHAR_BIT__ or more.
So, add
// Cannot memcpy between bool and non-bool in either direction.
template<>
struct __memcpyable_integer<bool>
{ enum { __width = 1 }; };
template<>
struct __memcpyable_integer<const bool>
{ enum { __width = 1 }; };
?