In C++14, the spec specifies that a temporary object's destructor is called as the last step in evaluating the full expression that contains the point where it was created (C++14 §12.2).
I'm presuming it's the same in earlier versions of the language, but I don't have those specs handy ATM.