No.
If your function does "return <some local var>", as in
Foo xyzzy() {
Foo ret;
/* do stuff to ret */
return ret;
}
then the compiler can rewrite it to be something like void xyzzy(void * _ptr) {
Foo * _ret = new(_ptr)Foo();
/* do stuff to *_ret */
}
where the function-local variable that gets returned is actually just constructed in the place that it would eventually be returned/copied to and so doesn't have to be returned at all.