It is often heard that in C++ temporary objects get deconstructed at the end of the full-expression. A full-expression is defined to be an expression that isn't a sub-expression of some other expression. This sounds very similar to the notion of a statement to me.
So my questions are: If I append a semi-colon to a full-expression, will it always be a statement? Can one arrive at every full-expression by taking some statement with a semi-colon at the end, and removing that semi-colon? Can I assume that every temporary will live until the end of its statement?
Here's a statement that is longer than the lifetime of a contained temporary:
if (T() == T()) foo();
The two temporaries created by the expression in the condition are destroyed at the end of the full-expression and are no longer alive when the statement (
Note that for any expression
; is a statement (namely an expression statement, see [stmt.expr]).