http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49372
Kai Tietz <ktietz at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|RESOLVED |NEW Last reconfirmed| |2012-12-10 Resolution|INVALID | Ever Confirmed|0 |1 --- Comment #4 from Kai Tietz <ktietz at gcc dot gnu.org> 2012-12-10 13:42:30 UTC --- (In reply to comment #3) > Kai, I don't think anyone disputes that B's constructor is called, the > question > is why 12.2/4 doesn't apply. Well, we have here 5.2.2 which says "A function call is a postfix expression followed by parentheses containing a possibly empty, comma-separated list of expressions which constitute the arguments to the function." But we don't have here an explicit function-call. And an implicit call is not an expression, hence, not a part of any full expression, and so we don't have a sequence-point. Not sure if specification intended it differently, but by its current wording I would assume that current implementation is right. But indeed 12.4 seems to be violated here. "There are two contexts in which temporaries are destroyed at a different point than the end of the fullexpression. The first context is when a default constructor is called to initialize an element of an array. If the constructor has one or more default arguments, the destruction of every temporary created in a default argument expression is sequenced before the construction of the next array element, if any." So there is an antagonism in spec. I will reopen it. sorry, didn't read about 12.4