https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111512
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2023-09-21
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Yes, that seems undesirable.
Reduced:
template<typename T>
void to_array(T& from)
{
T to;
__builtin_memcpy(&to, &from, sizeof(T));
}
struct incomplete;
template<class T>
struct holder {
T t;
};
using validator = holder<incomplete>*;
int main()
{
validator a[1]{};
::to_array(a);
}
Casting the arguments to void avoids the problem:
__builtin_memcpy((void*)&to, (void*)&from, sizeof(T));