Чтобы ответить на ваш измененный вопрос, введите код:
return X;
X всегда будет оцениваться до того, как произойдет возврат.Тогда то, что происходит, эквивалентно всем вложенным областям действия функции, из которой выполняется выход, в порядке от самого внутреннего к крайнему, с деструкторами, вызываемыми соответствующим образом на каждом выходе.