https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80886
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to steveren from comment #0) > Has this behaviour changed deliberately? Yes, because the standard forbids it. As Andrew said, the __builtin_constant_p part (and what the docs say about it) is irrelevant because the (void *) 0x1000 expression is what gives an error. > As I say, it is contrary to the > Standard, but it would be disappointing to lose such a useful extension. I think it would be better to add support to C++ for "pointer literals", I've been talking with a few people about proposing that for the standard. That would allow you to create constexpr pointers from literal integers, but still disallow arbitrary reinterpret casts between them. Closing as G++ is correct to disallow this.