https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107561
--- Comment #20 from Jonathan Wakely <redi at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #16) > (In reply to Richard Biener from comment #15) > > where if I understand you correctly, bar () is not allowed to modify *this > > (unless I pass it an argument to it, of course), even if *this is for > > example > > Why? Because it is a constructor and the object isn't fully constructed yet > at that point? Yes, exactly. The object's lifetime has not started until the constructor completes, so accessing it is only allowed in very limited ways, described in [basic.life] p6. However, it looks like for a non-trivial constructor the results are just unspecified, not undefined, see [class.cdtor] p2. Still, I don't see how operator new could meaningfully do anything to an object under construction if the object is in an unspecified state. And frankly, if anybody did write an operator new like that, they deserve what they get. Could we have a flag that says "assume operator new is not stupid"?