https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102090
--- Comment #9 from Jakub Jelinek <jakub at gcc dot gnu.org> --- One of the reasons might be that placement new returns void *, and cast of that to pointer to some other type is not valid in constant expressions. std::construct_at bypasses all of that just by being a magic function, it is up to the implementation how it achieves what it is supposed to do.